Программирование на языке C++. Продвинутый поток 2026
О курсе
Курс посвящён изучению основных возможностей языка C++, особенностей управления памятью, объектно-ориентированного программирования, наследования и полиморфизма, стадий компиляции, шаблонов, исключений и устройства стандартных контейнеров.
Программа курса
Форма контроля в осеннем семестре: дифференцированный зачет
| Неделя | Лекция | Семинар |
|---|---|---|
| 1 | Основные термины языка C++. Объекты, значения, переменные, типы. Объявления и определения, области видимости. Основные типы и операции над ними. Выражения и операторы. Приоритет операторов и порядок вычислений. Виды ошибок: ошибки компиляции (CE), ошибки времени выполнения (RE). Понятие неопределенного поведения (UB). | Основные термины языка C++. Объекты, значения, переменные, типы. Объявления и определения, области видимости. Основные типы и операции над ними. Выражения и операторы. Приоритет операторов и порядок вычислений. Виды ошибок: ошибки компиляции (CE), ошибки времени выполнения (RE). Понятие неопределенного поведения (UB). |
| 2 | Указатели. Взятие адреса и разыменование. Арифметика указателей. Функции. Перегрузка функций. Указатели на функции. Массивы. Сходства и различия между массивами и указателями. Передача массивов в функции. Динамическая память, функции malloc/free, операторы new/delete. Статическая память и стек. Проблемы утечек памяти. | Указатели. Взятие адреса и разыменование. Арифметика указателей. Функции. Перегрузка функций. Указатели на функции. Массивы. Сходства и различия между массивами и указателями. Передача массивов в функции. Динамическая память, функции malloc/free, операторы new/delete. Статическая память и стек. Проблемы утечек памяти. |
| 3 | Ссылки. Особенности инициализации ссылок. Возврат ссылок из функций. Проблема висячих ссылок. Константы. Константные указатели и указатели на константу. Константные ссылки. Способы передачи аргументов в функцию. Способы приведения типов: static_cast, reinterpret_cast, const_cast. | Ссылки. Особенности инициализации ссылок. Возврат ссылок из функций. Проблема висячих ссылок. Константы. Константные указатели и указатели на константу. Константные ссылки. Способы передачи аргументов в функцию. Способы приведения типов: static_cast, reinterpret_cast, const_cast. |
| 4 | Структуры и классы. Члены классов. Модификаторы доступа. Перегрузка операторов. Конструкторы и деструкторы. Операторы присваивания. Правило трех. Списки инициализации в конструкторах. Идиома copy-and-swap. Статические члены классов. Внутренние классы и локальные классы. Константные методы. Указатели на поля и методы. | Структуры и классы. Члены классов. Модификаторы доступа. Перегрузка операторов. Конструкторы и деструкторы. Операторы присваивания. Правило трех. Списки инициализации в конструкторах. Идиома copy-and-swap. Статические члены классов. Внутренние классы и локальные классы. Константные методы. Указатели на поля и методы. |
| 5 | Наследование. Публичное и приватное наследование. Видимость и доступность членов класса при наследовании. Использование using. Размещение объектов в памяти при наследовании. Приведения типов при наследовании. Принцип подстановки Лисков. Множественное наследование. Diamond problem. Виртуальное наследование. | Наследование. Публичное и приватное наследование. Видимость и доступность членов класса при наследовании. Использование using. Размещение объектов в памяти при наследовании. Приведения типов при наследовании. Принцип подстановки Лисков. Множественное наследование. Diamond problem. Виртуальное наследование. |
| 6 | Полиморфизм. Виртуальные функции. Ключевое слово override. Чисто виртуальные функции. Таблицы виртуальных функций. Внутреннее устройство vtable. Понятие ABI. Внутреннее устройство указателей на члены класса. Проблема виртуальных функций в конструкторах. Ошибка pure virtual method call. | Полиморфизм. Виртуальные функции. Ключевое слово override. Чисто виртуальные функции. Таблицы виртуальных функций. Внутреннее устройство vtable. Понятие ABI. Внутреннее устройство указателей на члены класса. Проблема виртуальных функций в конструкторах. Ошибка pure virtual method call. |
| 7 | Стадии компиляции. Препроцессинг. Ассемблирование. Линковка, единицы трансляции. Ключевое слово extern. Правило одного определения и ключевое слово inline. Оптимизации компилятора. Примеры нетривиального UB из-за оптимизаций. Санитайзеры. | Стадии компиляции. Препроцессинг. Ассемблирование. Линковка, единицы трансляции. Ключевое слово extern. Правило одного определения и ключевое слово inline. Оптимизации компилятора. Примеры нетривиального UB из-за оптимизаций. Санитайзеры. |
| 8 | Шаблоны классов, функций, типов, переменных. Перегрузка шаблонных функций. Частичная и полная специализация шаблонов. Особенности определения шаблонных функций. Числовые параметры шаблонов. Простейшие compile-time вычисления. | Шаблоны классов, функций, типов, переменных. Перегрузка шаблонных функций. Частичная и полная специализация шаблонов. Особенности определения шаблонных функций. Числовые параметры шаблонов. Простейшие compile-time вычисления. |
| 9 | Шаблонные параметры шаблонов. Простейшие метафункции и их реализация. Зависимые имена. Шаблоны с переменным числом аргументов. Выражения свертки. | Шаблонные параметры шаблонов. Простейшие метафункции и их реализация. Зависимые имена. Шаблоны с переменным числом аргументов. Выражения свертки. |
| 10 | Исключения. Отличие исключений от RE. Особенности перехвата исключений. Проблема исключений в конструкторах и деструкторах. Идиома RAII и умные указатели. Множественные исключения, функция uncaught_exceptions. Иерархия стандартных исключений. Внутреннее устройство механизма обработки исключений. | Исключения. Отличие исключений от RE. Особенности перехвата исключений. Проблема исключений в конструкторах и деструкторах. Идиома RAII и умные указатели. Множественные исключения, функция uncaught_exceptions. Иерархия стандартных исключений. Внутреннее устройство механизма обработки исключений. |
| 11 | Устройство стандартных контейнеров: vector, list, deque, map, unordered_map. Особенности vector<bool>. Реализация методов push_back и reserve для vector. | Устройство стандартных контейнеров: vector, list, deque, map, unordered_map. Особенности vector<bool>. Реализация методов push_back и reserve для vector. |
| 12 | Конструкция placement new. Итераторы. Инвалидация итераторов. Константные и неконстантные итераторы. Обратные итераторы. Категории итераторов. | Конструкция placement new. Итераторы. Инвалидация итераторов. Константные и неконстантные итераторы. Обратные итераторы. Категории итераторов. |