C++

Семестр 1.

1.   Программа, состоящая из нескольких файлов.  

  • заголовочные файлы 
  • компиляция и линковка
  • утилита make

2.   Указатели, массивы, ссылки. Три вида памяти. Работа с кучей на C.

  • применение указателей и ссылок
  • арифметика указателей
  • глобальная/статическая память, стек, куча
  • malloc/calloc/realloc
  • void*

3.   Стуктуры. Cвязный список на C. 

  • неинтрузивная реализация
  • интрузивная реализация
  • typedef

4.  Функции. Указатели на функции. 

  • как происходит вызов функции
  • реализация сортировки
  • void sort(void* base, size_t num, size_t size, int (*compar)(const void*,const void*));

5.  Обзор стандартной библиотеки C. 

  • ввод-вывод на C (stdio.h, обработка ошибок)
  • string.h
  • stdlib.h

6.   Классы и объекты. 

  • зачем нужно ООП? 
  • инкапсуляция: private/public
  • конструктор (overloading), деструктор
  • инициализация

7.   Работа с кучей на C++.

  • new/delete 
  • cоздание объектов в куче
  • конструктор копий
  • оператор присваивания

8.   Наследование и полиморфизм.

  • protected
  • virtual (overriding)
  • таблица виртуальных функций
  • статическое/динамическое связывание

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

  • scoped_ptr
  • auto_ptr
  • shared_ptr

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

  • бинарные и унарные
  • в классе/вне классе
  • friend
  • приведение типов

11.  Ввод-вывод на C++. 

  • иерархия классов
  • методы/флаги/манипуляторы
  • обработка ошибок
  • overloading

12.  Ключевые слова extern, static, inline. 

  • extern у переменных
  • static у переменных и функций
  • static у полей и методов
  • inline у функций
  • паттерн Singleton.

13. Разное

  • Автотесты
  • Декомпозиция программы (Model, View)
  • Ключевые слова const, enum

Семестр 2.

1.   Шаблоны

  • решение в стиле C
  • шаблонные классы
  • шаблонные функции
  • специализация шаблонов

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

  • обработка ошибок в стиле C
  • try/catch/throw
  • исключения в конструкторах и деструкторах
  • идиома RAII
  • гарантии исключений

3.   Последовательные контейнеры

  • string, vector, list, deque
  • array, forward_list
  • внутреннее устройство и основные операции
  • итераторы и их инвалидация

4.   Ассоциативные контейнеры

  • set, multiset, map, multimap
  • unordered_set, unordered_map
  • внутреннее устройство и основные операции
  • итераторы и их инвалидация

5.   Алгоритмы

  • функторы
  • обзор алгоритмов с примерами
  • std::advance
  • iterator_traits (value_type, iterator_category)

6.   Приведение типов

  • static_cast, const_cast, reinterpret_cast
  • RTTI и dynamic_cast
  • mutable

7.   Move семантика

  • rvalue и lvalue
  • rvalue references
  • move constructor, move assignment
  • std::move

8.   Переменное число аргументов 

  • переменное число параметров в стиле C (va_arg, va_list, va_start)
  • variadic templates

9.   С++11. Разное.

  • lambda
  • auto, decltype
  • default, delete, override, final
  • initializer_list

10.  Метапрограммирование

  • решение в стиле C
  • type_traits
  • enable_if

11.  Потоки и мутексы

  • зачем нужны потоки?
  • конкурентный доступ к переменным
  • thread
  • mutex, lock_guard

12.  Сondition variable

  • задача "производитель-потребитель"
  • thread и std::bind
  • condition_variable