Стоимость курса: 5 000 грн в месяц
Длительность курса: 3 месяца, 67 астрономических часов
Дата начала курса: уточняйте дату у менеджеров
Требования к слушателям: знание тем, изучаемых на курсе «Основы программирования на C++»

*Курс доступен на языках: русский, украинский, английский

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

Программа курса
Указатели на функции
  • Адаптирование интерфейсов, 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.
  • Интерфейс и классы-адаптеры.
Динамические и статические библиотеки (Windows/Linux)
  • Подключение в проект, командная строка gcc (g++) компилятора. .dll, .lib, .so, .a, явное и неявное связывание, экспорт функций, классов, экcпорт интерфейса (абстрактного класса), debug.
Правила написания кроссплатформенного приложения
GUI - оконные приложения на примере Win32 API и Qt
  • Вечный цикл, сообщения, оконная процедура, Send-PostMessage и их отличия.
  • Работа с элементами управления: BUTTONs (radio, check, groupbox), СOMBOBOX, EDIT и т.д. Что такое события и слоты (в частности в Qt) замена оконной процедуры, перемещение точки начала прорисовки, создание своего элемента управления, OWNERDRAW.
Процессы, потоки (Windows/Linux/С++11)
  • Адресное пространство, синхронизация на примере Win32, std:: и BOOST.
  • Cписок процессов, мьютексы, семафоры, события, ожидаемые таймеры, обмен данными между процессами,boost::thread, (сравнение с std::thread), TLS, condition_variable, lock_quard, unique_lock.
Создание сетевого приложения (Windows/Linux)
  • Cокеты, протоколы (TCP, UDP), блокирующие и неблокирующие режимы.
Работа с базами данных
  • Cоздание базы, таблицы, запросы - многотабличные, вложенные, функции агрегирования, внешние ключи, хранимые процедуры.
Дипломный проект:
  • Создание плагина, позволяющего добавить новую функциональность в уже имеющуюся программу.
  • Программа поддерживает кроссплатформенность на уровне исходников - вся работа с ресурсами («железом») выделена в отдельные заменяемые блоки, специфичными для конкретной платформы.
Записаться
Пожалуйста, заполните форму. Наши менеджеры свяжутся с вами в ближайшее время.
Made on
Tilda