Программа

1. Введение

Объектно-ориентрованный подход

Содержание курса

История ОО языков

2. Структуры и классы

Инкапсуляция

Поля и методы

Права доступа

Определение класса в h, .hpp и в .cpp

3. Создание и разрушение объектов

Конструкторы (с move версиями)

Деструкторы

malloc/free и new/delete

RAII

4. Исключения

Стандартные типы исключений

Стратегии обработки исключений

Исключения в констуркторе / деструкторе

5. Связность объектов

Наследование

Агрегирование

Дружественность

Диаграмма классов

6. Полиморфизм

Переопределение и перегрузка функций

Mock-объекты при использовании интерфейсов

Динамический полиморфизм

RTTI

7. Виды наследования

Одиночное

Множественное

Виртуальное

8. Умные указатели

scoped_ptr

shared_ptr

weak_ptr

intrusive_ptr

9. Перегрузка операторов

Приоритет операций

Какие операторы можно перегружать

Перегрузка &&, ||, ‘,’

Перегрузка [] и ()

10. Шаблоны функций и классов - 1

Вывод шаблонных параметров из аргументов функций

Ленивая компиляция шаблонов

Использование зависимых имён

Наследование шаблонных классов

11. Шаблоны функций и классов - 2

Полная специализация шаблонов

Классы свойств (Traits)

Частичная специализация шаблонов

Статический полиморфизм VS динамический полиморфизм на примере паттерна стратегия

12. Шаблоны функций и классов - 3

Метапрограммирование с использованием шаблонов

SFINAE

С++11 (using вместо typedef в шаблонах, variadic templates)

13. Шаблоны проектирования

Область применения шаблонов

Порождающие паттерны

Структурные паттерны

Поведенческие паттерны