Программирование на C++, часть 2

Санкт-Петербург, весна 2015

Описание

Продолжение курса «Программирование на С++, часть 1».

Преподаватели

Список лекций

STL: последовательные контейнеры

Общие идеи STL. Итераторы вместо индексов. Работа с последовательными контейнерами (vector, list, deque).

STL: ассоциативные контейнеры и итераторы

Работа с ассоциативными контейнерами (map, set). Версии контейнеров с повторяющимися элементами. Задание упорядочивания для пользовательских типов. Категории итераторов. Итераторы в обратном направлении. Требования к итераторам. Как написать свой итератор. Идея iterator_traits.

STL: алгоритмы

Требования алгоритмов к элементам и последовательностям. Алгоритмы для произвольных последовательностей. Алгоритмы для упорядоченных последовательностей. Алгоритмы изменяющие последовательности. Другие категории алгоритмов. Как написать собственный алгоритм. Как специализировать алгоритм для конкретного типа итераторов/элементов. Создание собственных функторов.

Обработка ошибок

Концепция исключений. Стандартные классы исключений. Спецификация исключений. Стратегии обработки исключений. Почему не стоит бросать встроенные типы. Исключения в конструкторе. Исключения в списке инициализации. Недопустимость исключений в деструкторах.

Гарантии безопасности исключений. В каких случаях мы можем обеспечить строгую гарантию исключений. Использование swap для безопасности. Использование auto_ptr (unique_ptr) для обеспечения безопасности исключений. Проектирование с учётом исключений.

Указатели на функции и члены классов

Указатели на функции. Указатели на методы. Указатели на члены данных. Использование указателей на функции в качестве функторов. Пример использование указателей на методы - паттерн Listener.

Пространства имён

Определение пространств имён. Глобальное пространство имён. Директивы using (2 формы). Поиск имён. Поиск Кёнига (ADL). Поиск имён при наследовании.

Множественное наследование, С++ касты и RTTI

Представление в памяти. Вызов конструкторов. Разрешение имён, перегрузка виртуальных функций. Несколько таблиц вирт. функций. Преобразование указателей. Виртуальное наследование.

Преобразования в стиле C++: static_cast, const_cast, reinterpret_cast, dynamic_cast. Преимущества над преобразованиями
в стиле C. В каких случаях преобразование в стиле C приводит к ошибкам (множественное наследование).

Обзор нововведений стандарта C++11

Вывод типов. Variadic templates. Rvalue references, move semantics.

Метапрограммирование на C++

SFINAE и enable_if. CRTP. Определение наследование одного класса от другого. Алгебраические структуры на шаблонах. Поддержка метапрограммирования в Boost.