Программирование на языке C++. Продвинутый поток 2026

Материал из Public ATP Wiki
Перейти к навигации Перейти к поиску

О курсе

Курс посвящён изучению основных возможностей языка 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. Итераторы. Инвалидация итераторов. Константные и неконстантные итераторы. Обратные итераторы. Категории итераторов. }