Минск
+375 44 758 02 02
заказать звонок

Продвинутый курс C++

Учебная программа продвинутого курса предусматривает профессиональное развитие у слушателей навыков объектно-ориентированного программирования. На занятиях рассматриваются принципы работы со стандартной библиотекой языка, осваивается спектр основных возможностей Qt-библиотеки, нарабатываются навыки разработки GUI-приложений.

Профессиональные преподаватели обучают различным тонкостям и приемам разработки программного обеспечения и решения различных задач с использованием Qt-библиотеки. Также дают представление об алгоритмах, адаптерах, контейнерах, базах данных, архитектуре приложений, многопоточности и единичном (модульном) тестировании программного обеспечения.

По окончании курса Вы сможете:

- Разрабатывать различные приложения и программы на языке С++;
- Создавать GUI-приложения;
- Работать с различными библиотеками – стандартной С++ и Qt;
- Уверенно работать с методологией объектно-ориентированного программирования, проектирования и анализа;
- Устроиться на высокооплачиваемую работу по специальности.

Формат обучения: онлайн-уроки с преподавателем индивидуально или в мини-группе

Пробный урок бесплатно

программа обучения

Конструкторы/деструкторы

  • Правила генерации конструкторов до С++11
  • Что такое rvalue ссылки
  • Перемещающий конструктор и перемещающий оператор присвоения
  • Правила генерации конструкторов и операторов присваивания после С++11
  • Функция std::move. Неправильное применение функции std::move в качестве возвращаемого значения
  • Разница между объявлением конструкторов и операторов присваивания как приватные методы и объявление их с помощью ключевого слова delete
  • Зачем вообще нужно писать конструкторы и операторы присваивания как недоступные
  • Важность объявления конструкторов с помощью  ключевого слова default
  • Что такое delegating constructors
  • Простое понимание что такое NRVO и RVO
  • Проблемы влияния пользовательского конструктора на неявное преобразования типов. Ключевое слово explicit
  • Reference-qualified методы класса

Статический полиморфизм

  • Более детальное понимание перегрузки функции. Ключевое понятие mangling и рассмотрение примера перегрузки на примере таблицы символов
  • Шаблоны и шаблоны класса. Правила вывода типов для шаблонных параметров. Trailing return type
  • Проблематика шаблонов. Проблемы инстанцирования. Способы явного инстанцирования
  • Пример написания класса array, как аналог замены встроенного статического массива

Динамический полиморфизм

  • Особенности работы с динамическим полиморфизмом (virtual functions)
  • Важные нововведения, начиная с С++11 для безопасной работы с динамическим полиморфизмом
  • Ключевое слово final в контексте виртуальных функций
  • Аргумент по умолчанию и какие он скрывает проблемы в контексте виртуальных функций
  • Структура type_info
  • Когда именно полезен динамический полиморфизм

Более сложные применение шаблонов

  • Структура std::enable_if, зачем это может пригодиться. Элегантная замена сложности std::enable_if, начиная с С++17
  • Метапрограммирование, рассмотрение заголовочного файла как способ получения метаинформации о типе. Его применения на примере простого шаблона
  • Функция std::forward
  • Шаблоны с переменным числом параметров, понятие свертки
  • Шаблонные конструкторы
  • Вспомогательные шаблоны std::pair, шаблон std::tuple. Какие проблемы они решают

Написание библиотек на языке С++

  • Что такое разделяемые библиотеки
  • Что такое статические библиотеки
  • Разница в написании статических и динамических библиотек
  • Пример написания двух видов библиотек
  • Написание С++ библиотеки для подключения ее в С код и С++ код
  • Возможные проблемы при написании библиотек
  • Раздельная компиляция (многомодульность) и линковка

Вывод типа в С++ (type deduction)

  • Вывод типа с помощью ключевого слова auto: такой ли тип на самом деле?
  • Ключевое слово decltype
  • Константные ссылки как средство пролонгации времени жизни объекта и подводные камни

Исключительные ситуации

  • Простое понимание исключительных ситуаций. Что такое раскрутка стека
  • Ключевое слово noexcept. Его особенности
  • Висячие ссылки и висячие указатели

  • Исключительные ситуации в конструкторе и деструкторе.
  • noexcept деструкторы и конструкторы
  • Нужны ли исключительные ситуации. то такое обработка ошибок в стиле С, нужна ли она и какие ее преимущества в сравнении с исключительными ситуациями

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

  • Паттерн проектирования RAII
  • Проблемы при использовании С-подхода динамического выделения памяти для объектов
  • Что такое менеджер памяти и простое понимание выделения памяти.
  • Виды умных указателей. Какую проблему они решают
  • Зачем нужны вспомогательные функции (make_unique и т.д.). Какую проблематику они решают
  • Всегда ли стоит применять умные указатели, возможные проблемы производительности
  • std::static_pointer_cast, std::dynamic_pointer_cast. В чем их отличие от static_cast и dynamic_cast
  • Стоит ли проверять созданные умные указатели на nullptr. Когда умные указатели кидают исключения, а когда возвращают nullptr

Введение в STL

  • Что такое STL
  • Немного о структуре STL
  • Стоит ли знать всю библиотеку STL

Контейнеры в библиотеке STL

  • Последовательные контейнеры. Виды последовательных контейнеров, их отличие. Особенности работы с каждым из контейнеров
  • Рассмотрение основного функционала последовательных контейнеров
  • Ассоциативные контейнеры. Виды ассоциативных контейнеров, их основные отличия. Особенности работы. Рассмотрение основного функционала ассоциативных контейнеров
  • Какие задачи решают последовательные контейнеры и ассоциативные контейнеры
  • В каких случаях не стоит применять контейнеры. Накладные расходы на применения контейнеров
  • Возможные подводные камни работы как с последовательными, так и с ассоциативными контейнерами
  • Классы адаптеры контейнеров. Виды и их особенности
  • Что такое аллокатор в качестве параметра контейнера. Когда стоит писать свой аллокатор, а когда нет

Класс std::string

  • Рассмотрение основных возможностей класса std::string. Ошибки при создании и инициализации класса std::string
  • Рассмотрения основных методов работы с классом std::string

Итераторы

  • Виды итераторов
  • Применение итераторов для каждого вида контейнера
  • Способ работы с итераторами
  • Вспомогательные функции для работы с итераторами
  • Что означает begin-итератор  и end-итератор
  • Range for C++ как элегантный способ обхода контейнеров

Алгоритмы STL

  • Виды алгоритмов
  • Рассмотрение самых часто используемых алгоритмов
  • Итераторы как клей между контейнером и алгоритмом
  • Все ли виды алгоритмы применимы ко всем типам контейнеров. Что нужно понимать в интерфейсе алгоритма
  • Преимущества применения методов контейнеров над алгоритмами
  • Преимущества применения алгоритмов над методами контейнеров

Компаратор

  • Что такое компаратор и его специфика применения в алгоритмах и некоторых контейнерах
  • Что такое указатель на функцию
  • Что такое функциональный объект
  • Описание функции std::bind
  • Что такое лямбда и что общего между функциональным объектом. Что такое список захвата и зачем он нужен. Особенности захвата переменных. Ключевое слово mutable и его применение к захваченным параметрам лямбды. Как передать лямбду в С-функцию. Отличие лямбды в С++11 и C++14
  • Способ генерации лямбды-функции. Типичные ошибки в написании лямбды
  • Класс std::function

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

  • Что такое процесс. Описание работы процесса, выделение памяти, и связанные с ним расходы.Что такое поток. Проблемы связанные с многопоточностью
  • Что такое планировщик

Потоки в С++

  • std::thread и способы работы. Передача параметров в потоки
  • Проблемы, связанные с классом std::thread. Что такое join и detach
  • Что такое асинхронное выполнение потока и синхронное выполнение
  • std::async. Какие его преимущества в сравнении с std::thread
  • Параметры при создании std::async
  • Что такое std::future
  • Что такое разделяемые данные. Стоит ли использовать подход «разделение данных»
  • Ошибочное понимание volatile-переменных в контексте потоков. Что такое барьеры памяти. Класс std::atomic, для чего он нужен, связанные с ним накладные расходы
  • Ошибочное понимание std::shared_ptr в многопоточном программировании
  • Что такое race condition и data race, причины их получения
  • Объекты синхронизации потоков, доступных в стандартной библиотеке
  • Что такое дедлок и механизмы его решения в стандартной библиотеке
  • std::promise: что это такое. Его применение в контексте многопоточности. std::future + std::promise vs conditional variable
  • Исключительные ситуации в потоках
  • Что такое пул потоков и какие он решает проблемы

Сетевое программирование

  • Что такое сетевое программирование
  • Виды часто используемых протоколов. Что такое TCP и UDP протоколы
  • Когда их стоит применять
  • Что такое сокеты, их виды и применение
  • Что такое межпроцессорное взаимодействия (IPC). Зачем нужно межпроцессорное взаимодействие. Какие оно решает проблемы
  • Рассмотрение часто используемых подходов IPC

Введение в Qt

  • Meta object compiler
  • Сигналы и слоты
  • QObject
  • Базовая работа с виджетами
  • Event loop
  • Структура фреймворка

Введение в QML

  • Структура QML компонентов
  • Компоненты QtObject, Item
  • Базовые графические компоненты
  • Best practices в QML
  • Взаимодействие C++ & QML
  • - Q_PROPERTY
  • - Q_INVOKABLE
  • Компоненты ListView, GridView
  • Кастомизация компонентов
  • Attached properties
  • Scalability-приложения
  • Сигналы/cлоты в QML
  • Свойства, алиасы
  • Регистрация своих классов в метасистеме

Model View в Qt

  • Понятие модели, их виды
  • Понятие делегата
  • Понятие роли
  • Понятие view, их виды
  • Реализация своей модели, её регистрация, базовые методы
  • QAbstractListModel
  • Создание кастомных компонентов-делегатов с использованием ролей
  • qmldir, разбивка приложения на модули
  • Использование стилей в QML
  • QVariant

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

  • Подключение к базе данных
  • Классы QDir, QStandardPaths
  • Выполнение SQL запросов
  • Создание SQL-таблиц
  • Обработка ошибок
  • Привязка значений
  • QVariantList
  • Qt контейнеры, их преимущества и недостатки
  • Copy-on-write
  • Java style iterators vs stl style iterators

Многопоточность в Qt

  • Сравнение C++ потоков и многопоточности в Qt
  • Многопоточность на сигналах и слотах
  • QEventLoop
  • QThread
  • QtConcurrent

 

Минимальные требования:

  • Основы С++

 

преподаватели курса
Ирина
Образование высшее, БГУ, прикладная математика. Опыт преподавания более 20 лет.
Начните воплощать свои мечты об интересной и оплачиваемой работе вместе с нами сейчас.
ОТЗЫВЫ НАШИХ СТУДЕНТОВ
Αндреев Αртур
Создание сайтов
Я долго шел к выбору профессии.Однако отучившись и проработав по специальности, решил несколько откорректировать ее. Выбрав курсы Web-верстка (HTML, CSS), я практически с нуля научился создавать сайты. Преподаватель очень грамотный, объяснял всё очень доступно. Огромное спасибо за полученные знания!
itstar.by