Тема 1. Защищенное наследование
1.1 Спецификаторы наследования private и protected.
Отношение между классами «подобен»
Специфика защищенного наследования.
Использование защищенного наследования для изоляции пользователя от использования функциональности базового класса.
1.2 Ключевое слово friend и защищенное наследование.
Защищенное наследование при построении иерархий классов
Использование защищенного наследования для изоляции классов потомков от использования функциональности базового класса
Тема 2. Множественное наследование
2.1 Отличия множественного и одиночного наследования.
Построение иерархий классов при множественном наследовании.
Множественное наследование и полиморфизм
2.2 Специфика множественного наследования
Проблемы, возникающие при множественном наследовании.
Множественное наследование и директива using.
Виртуальное наследование
Практические занятия
Построение иерархий классов при множественном наследовании
Тема 3. Механизм RTTI
3.1 Оператор static_cast и иерархии классов
Использование оператора static_cast для определения типа на этапе компиляции применительно к классам, связанным наследованием
3.2 Динамическая идентификация типа.
Оператор dynamic_cast, оператор typeid, класс type_info.
Встроенный механизм динамического определения типа
Практические занятия
1. Использование static_cast при реализации гетерогенного двухсвязного списка
2. Использование механизма динамического определения типа для реализации гетерогенного двухсвязного списка
Тема 4. Исключительные ситуации
4.1 Понятие исключительной ситуации.
Обзор способов обработки аварийных ситуаций.
4.2 Встроенные средства языка С++ для обработки исключительных ситуаций.
Встроенные средства С++ для обработки исключительных ситуаций: операторы try, catch, throw
4.3 Механизм обработки исключительной ситуации
Генерация исключения и способы приема объекта-исключения обработчиком исключительной ситуации.
Последовательность выполнения кода и выбор исключений.
Что может предусмотреть программист в обработчике исключения.
Исключения в конструкторах и деструкторах.
Стандартные исключения
4.4 Специфика обработки исключений средствами С++
Function-level try-блок.
Обработка непредусмотренных исключений.
Спецификация исключений.
Специфика оператора new
Практические занятия
Использование механизма обработки исключений при реализации стека
Тема 5. Шаблоны
5.1 Идеи обобщенного программирования
Способы обобщения действий: перегрузка имен функций, макросы с параметрами.
Зачем нужны шаблоны.
5.2 Понятия, связанные с шаблонами
Использование ключевого слова template для обобщения.
Параметры шаблона. Механизм инстанцирования.
5.3 Шаблоны функций Специфика шаблонов функций.
Специализация шаблона функции.
5.4 Шаблоны классов Специфика шаблона класса.
Специализация шаблона класса. Эмуляция шаблона «vector».
Эмуляция шаблона «list».
Введение понятия псевдоним типа.
Реализация итератора для разных структур данных.
Практические занятия
1. Реализация шаблона функции
2. Реализация шаблона ограниченного стека посредством встроенного массива
3. Реализация шаблона неограниченного стека посредством односвязного списка
4. Реализация шаблона кольцевой очереди посредством динамического массива
Тема 6. Контейнеры стандартной библиотеки
6.1 Базовые контейнеры
Обзор и примеры использования контейнеров std::vector, std::list, std::deque
6.2 Адаптеры базовых контейнеров
Обзор и примеры использования контейнеров std::stack, std::queue, std::priority_queue
6.3 Ассоциативные контейнеры
Обзор и примеры использования контейнеров std::set, std::multiset, std::map, std::multimap
Практические занятия
1. Использование контейнеров std::vector, std::list, std::deque для реализации поставленных задач
2. Использование контейнеров std::stack, std::queue, std::priority_queue для реализации поставленных задач
3. Использование контейнеров std::set, std::multiset, std::map, std::multimap для реализации поставленных задач
Тема 7. Итераторы
7.1 Понятие итератора
Реализация прямых и реверсивных итераторов для разных структур данных
7.2 Назначение и виды итераторов
Итераторы-адаптеры. Потоковые итераторы. Итераторы вставки
Практические занятия
1. Использование прямых и реверсивных итераторов для работы с контейнерами
2. Использование потоковых итераторов для вывода элементов контейнера на экран и в файл
3. Использование и итераторов вставки для манипулирования контейнерами
Тема 8. Обобщенные алгоритмы стандартной библиотеки
8.1 Понятие обобщенного алгоритма
Цели введения обобщенных алгоритмов. Реализация обобщенного алгоритма.
8.2 Обзор, примеры использования и эмуляция некоторых (часто используемых) обобщенных алгоритмов стандартной библиотеки
Эмуляция алгоритма for_each().
Эмуляция алгоритмов find(), find_if().
Алгоритмы count(), count_if().
Алгоритмы sort(), merge(), transform()
Практические занятия
1. Использование алгоритма for_each() для работы с последовательностями
2. Использование алгоритмов find(), find_if()) для работы с последовательностями
3. Использование алгоритмов count(), count_if() для работы с последовательностями
4. Использование алгоритма sort(), merge(), transform()для работы с последовательностями
Тема 9. Предикаты
9.1 Назначение предикатов.
Способы задания предикатов
Цель введения предикатов.
Реализация предиката посредством глобальной функции.
Реализация предиката посредством шаблона глобальной функции.
Реализация предиката посредством функционального объекта.
Реализация предиката посредством шаблона функционального объекта
9.2 Предикаты, предоставляемые стандартной библиотекой.
Универсальный способ обобщения предиката.
Шаблоны структур, предоставляемые стандартной библиотекой для задания предикатов.
Использование шаблонов function и mem_fn для универсального задания пользовательского предиката
Практические занятия
1. Использование предикатов стандартной библиотеки
2. Разработка пользовательских предикатов