Фундамент
- Компилируемость/интерпретируемость. Заголовочные файлы и их подключение. Компиляция. Переменные: объявление, использование, хранение. Работа с потоком ввода/вывода. Статическая/динамическая типизация. Основные типы и операции над ними. Литералы и идентификаторы. Объявления и определения. Области видимости. Выражения и операторы. Ленивые вычисления. Тернарный оператор. Приоритет вызова операторов. Управляющие конструкции. Виды ошибок: UB,CE,RE.
- Указатели и виды памяти. Операции над указателями. Переполнение стека. Статические переменные. Операторы new/delete. Проблемы с памятью: memory leak и double free. Массивы и операции над ними.
- Базовый синтаксис функций. Аргументы по умолчанию. Перегрузка функций: простые примеры. Правила выбора перегрузки (базовое понимание).
- Ссылки. Константы. Навешивание констант на указатели и ссылки.
- Абстракция, инкапсуляция, наследование, полиморфизм. Классы, объекты, члены классов, поля, методы. Операторы .,->, ключевое слово this.
- Перечисления (enum): примеры и как с ними работать.
На уд
- Модификаторы доступа (public/private). Инициализация по умолчанию. Конструкторы и деструкторы. Делигирующие конструкторы. Списки инициализации. Порядок вызова конструкторов и деструкторов. Конструктор по умолчанию. Конструктор копирования. Константные методы. Статические поля и методы. Оператор присваивания. Правило трех. Перегружаемые операторы. Перегрузка арифметических операторов и ее нюансы.
- Приведение типов в C++. Разновидности кастов: c-style, static_cast, const_cast, reinterpret_cast. Использование и применимость различных кастов.
- Шаблоны: основная идея и синтаксис. Шаблонные функции, классы, псевдонимы, константы и методы. Шаблонные методы шаблонного класса. Non-type template parameters.
- Наследование: общая идея. Видимость и доступность полей и методов при публичном наследовании. Порядок вызова конструкторов и деструкторов при наследовании. Приведение типов при наследовании (публичном). Срезка при копировании.
- Динамический полиморфизм: идея и простой пример. Виртуальные функции. Абстрактные классы и чисто виртуальные функции. Проблема виртуального деструктора.
- Лямбда-функции: основная идея и синтаксис. Примеры.
- Исключения: идея и примеры использования. Разница между исключениями и RE.
- Итераторы: основная идея и синтаксис использования. Ranged-based for. Виды итераторов и доступные операции над ними.
- Стандартные контейнеры: vector, list, deque, unordered_map, map, set. Основные методы и их ассимптотика. Адаптеры и их устройство на примере std::stack.
- Move-семантика: проблема и решение. Использование std::move. move-конструкторы и оператор присваивания перемещением на примере класса string. Правило пяти. Правильная реализация swap.
- Вывод типов с помощью ключевого слова auto. auto в качестве возвращаемого значения функций.
- Умные указатели: идея. unique_ptr, shared_ptr, weak_ptr: разница и примеры использования.