Профессиональное программирование на C++

Информация о курсе:


Стоимость: 3 000 грн в месяц

Длительность курса: 3 месяца (67,5 часов)
Вечерние группы: 27 занятий х 2,5 часа
Субботние группы: 15 занятий х 4,5 часа

Дата начала курса:



25 ноября 10:00-14:30

(занятия проходят по субботам)

Записаться в группу

 

Если вы уже изучали язык программирования C++ в университете, коммерческих учебных заведениях, на онлайн-курсах или самостоятельно, ознакомьтесь с программой курса «Основы программирования на C++» и убедитесь, что вы владеете 70-100% учебного материала. В этом случае рекомендуем вам продолжить обучение на курсе «Профессиональное программирование на С++». Если же у вас возникают какие-то сомнения, звоните, наши тренеры помогут вам сориентироваться при выборе необходимого курса.

Указатели на функции:

  • Адаптирование интерфейсов, callback функции, typedef.
  • Как при добавлении новых полей в структуру (или при наследовании от нее) добавить возможность сортировки этих структур по этим новым полям без перекомпиляции алгоритма сортировки. (то есть, как не создавать себе в будущем лишнюю работу). Предикативные функции.
  • Как использовать уже имеющийся чужой алгоритм (интерфейс) для обработки своих типов данных.

Шаблонные функции:

  • Правила определения параметров типов, возможность приведения типа, перегрузка.

Функции с неопределенным количеством параметров:

  • Зачем нужен первый параметр, работа с разнотипными параметрами.

Классы:

  • Правило инициализации членов класса, функциональности по умолчанию и их запрет, конструкторы, деструкторы, ресурсы и принцип работы с ними, как объект может идентифицировать себя среди других - this. public, private, наличие в классе объектов другого класса или указателей, время жизни взаимодействующих объектов, композиция - осведомленность и агрегирование.

Друзья класса:

  • Как функции или классу стать другом другого класса.
  • Взаимоотношения между классами-друзьями, предварительное объявление.
  • Как избежать перекрестных ссылок и неоднократного объявления типов, директивы #ifndef, #pragma.

Конструктор копирования:

  • Всегда ли он нужен, мелкое и глубокое копирование, как копировать объект внутри которого есть объект другого класса.
  • Вызов конструкторов, деструктора, перегрузка.

Перегрузка операторов +, =, <<, (type cast), ->, *(разименование), new, ++, !=, [ ], функтор):

  • Правила перегрузки. Использование в шаблонах. Диагностика.

Константность в классах, const_cast, mutable:

  • Что такое настоящая константа и readonly field. volatile (потоки и оптимизация компилятора).
  • Нужно ли менять константу и как работать с константными объектами.

Статические члены класса, private конструктор, паттерн Singleton:

  • Как запретить создание объекта на стеке, подсчет объектов данного класса, что делать если объект какого-то класса в программе должен быть только один.

Наследование:

  • Отличие между расширением функционала и наследованием интерфейса.
  • Как инициализируется объект наследника.
  • Работа из под указателя на базовый класс. protected члены класса и private, protected наследование.

Полиморфизм:

  • Виртуальные функции, деструктор, абстрактный базовый класс, интерфейс, vptr, vtbl, раннее и позднее связывание, механика вызова виртуальной функции. dynamic_cast, typeid, RTTI. В каких случаях виртуальный деструктор не спасет.
  • Что такое ABI (Application Binary Interface). Выравнивание данных (alignment).

Паттерны проектирования

  • Реализация и использование паттернов: Bridge, Abstract Factory, Visitor, Observer, Decorator, Chain Of Responsibility, MVC, Singleton, Adapter, Builder.

Шаблонные классы:

  • hpp файлы, конструктора копирования на основе других параметров типа.
  • Специализация шаблонов.

Динамические структуры данных:

  • Связные списки, деревья, очереди, стек, написание своего класса Tree.

STL:

  • Создание своего класса List, поддерживающего интерфейс STL(итераторы, операторы, функции-члены).
  • Контейнеры: std::vector, list, deque, map, set. Работа с итераторами при изменении размера вектора. std::vector с указателями на объекты. hash, сравнение алгоритмов (Big O Notation).
  • Алгоритмы: find, copy, find_if, remove, equal_to, bind2nd и т.д.
  • Пространства имен.

BOOST:

  • Знакомство с BOOST (как его скомпилировать и настроить проект), boost::bind, вся библиотека smart_ptr.
  • boost::thread (mutex, condition_variable, lock_quard, unique_lock), chrono, filesystem.

Обработка исключительных ситуаций:

  • Архитектура программы, использующей исключения.
  • Переброс исключений, catch(...), catch(BaseЕхсeptionClass &), правила размотки стека, время жизни выбрасываемого объекта исключения.

Умные указатели:

  • std:: и boost:: shared_ptr, weak_ptr, make_shared, auto_ptr, std::unique_ptr.

С++ 11:

  • Знакомство с IDE QtCreator. лямбды, ссылка на rvalue и movable конструктор (а также копирование, присваивание), auto, noexcept, std::thread, std::lock_guad, std::move()

Множественное наследование:

  • Виртуальное наследование, различия между компиляторами.
  • Oсновы СОМ: IUnknown, правила приведения типа в QueryInterface, регистрация компонента regsvr32, CLSID.
  • Интерфейс и классы-адаптеры.

Динамические и статические библиотеки:

  • Подключение в проект, командная строка gcc (g++) компилятора. .dll, .lib, .so, .a, явное и неявное связывание, экспорт функций, классов, экcпорт интерфейса (абстрактного класса), debug.

Правила написания кроссплатформенного приложения.

GUI - оконные приложения на примере Win32 API:

  • Вечный цикл, сообщения, оконная процедура, Send-PostMessage и их отличия.
  • Работа с элементами управления: BUTTONs (radio, check, groupbox), СOMBOBOX, EDIT и т.д. Что такое события и слоты (в частности в Qt) замена оконной процедуры, перемещение точки начала прорисовки, создание своего элемента управления, OWNERDRAW.

Процессы, потоки:

  • Адресное пространство, синхронизация на примере Win32, std:: и BOOST.
  • Cписок процессов, мьютексы, семафоры, события, ожидаемые таймеры, обмен данными между процессами,boost::thread, (сравнение с std::thread), TLS, condition_variable, lock_quard, unique_lock.

Создание сетевого приложения:

  • Cокеты, протоколы (TCP, UDP), блокирующие и неблокирующие режимы.

Работа с базами данных:

  • Cоздание базы, таблицы, запросы - многотабличные, вложенные, функции агрегирования, внешние ключи, хранимые процедуры.

Дипломный проект:

  • Создание плагина, позволяющего добавить новую функциональность в уже имеющуюся программу.
  • Программа поддерживает кроссплатформенность на уровне исходников - вся работа с ресурсами («железом») выделена в отдельные заменяемые блоки, специфичными для конкретной платформы.