с/к "Язык программирования С++" (весна 2009). 
Темы, по которым могут быть задачи и вопросы.

1. Типы short, long, int, unsigned, float, double – когда какой тип лучше применять. Типичные ошибки при работе с числами.   

2.  Oперации ?: и , . Разница между i++ и ++i. Особенности вычисления && и ||. Что будет, если значение выражения зависит от порядка вычисления операндов? (например, i++ - i++). 

3. Операторы new, delete, delete []. Арифметические операции с указателями. Работа с массивами с помощью указателей. Простые функции для работы со списками и деревьями (создание, обход). 

4. Функции в С++. Как описать функцию, которой как параметр передается массив? inline функции. Параметры по умолчанию. Перегрузка функций.

5. Ссылки.  Примеры их использования – в качестве переменной, в качестве параметра, в качестве результата функции. Почему большие объекты лучше передавать по ссылке.

6. Классы. 
this. Разница между методами, описанными в классе и вне класса. public и private поля и методы. В чем разница между struct и class? Список инициализации. Конструктор по умолчанию. Когда он создается автоматически? Деструктор. Объявление класса.

7. Наследование классов. Виртуальные функции.
protected поля и методы. В чем разница между виртуальными и не виртуальными функциями? Бывают ли виртуальные конструкторы? А деструкторы? Реализация виртуальных функций. Таблицы виртуальных методов (vtable).

8. Чисто виртуальные функции. Абстрактные базовые классы.

9. Сложные типы данных – как их определять, и как читать определения. Определение типов с помощью typedef.
 
10. Исключения и обработка ошибок
throw, try, catch. Что происходит при вызове throw? Какой-нибудь пример использования исключений. Что означает catch (...) ? Что означает конструкция throw; ? Макро assert.

11. RAII. Что это такое? Какой-нибудь простой пример. 

12. Константы в С++
Как можно определить константу в С++ ? (const, enum). Константы и указатели (разница между const char * и char * const). const при описании полей класса. const при описании методов класса.  Что такое mutable? Что такое volatile?

13. Описание friend для функций и классов. Перегрузка (оverload) операторов. Почему оператор + лучше описывать не как метод, а как обычную функцию? Переопределение операторов типа =  (почему принято писать return *this;). 

14.  Определение преобразований типа: с помощью конструктора, с помощью перегрузки оператора преобразования. 
   Что означает описание explicit?

15. Как представляются строки в С и С++? Какой-нибудь пример работы со строками, как массивами char (strlen или strcpy и т.д.) Разница между char s[] = “abc”; и char* s = “abc”;

16. Особенности реализации классов, использующих динамическую память.
Почему иногда надо переопределять оператор=? Конструктор копирования. Почему его надо переопределять? Как можно запретить оператор = и конструктор копирования? «Правило 3х функций». 
Желательно уметь воспроизвести operator= и конструктор копирования для класса string, который мы проходили на занятиях.

17. Локальные, глобальные и статические переменные. В чем между ними разница?

18. Использование описателя static в классе. Что еще может быть описано в классе, кроме полей и методов?

19. Контейнеры STL: list, vector, deque
Шаблоны list, vector, deque. Чем они отличаются и в каких случаях лучше использовать тот или другой контейнер ? Итераторы, работа с контейнерами с помощью итераторов. Что такое const_iterator ? Что такое value_type?

20. Ассоциативные контейнеры в STL
Шаблоны set, map, multiset, multimap. Чем они отличаются? Основные операции с ними. Задача про сортировку по сумме цифр c помощью multimap.

21 Алгоритмы
Что передается в качестве параметров алгоритмам STL? Как задать свoй порядок в sort? Какой-нибудь пример вызова sort с параметром - функциeй  Что делает функция accumulate?

22. MFC: рисование
Какую функцию надо определить, чтобы что-то нарисовать в MFC программе? Особенности рисования в Windows программах. Как что-то поменять в окне? Функция Invalidate. 
Желательно уметь воспроизвести (примерно) CCircelesView::OnLButtonDown (простой вариант, без перетаскивания), и объяснить, что там происходит.

23. MFC: архитектура Document/View
Что такое архитектура Document/View? Почему ее бывает удобно использовать? Что делают функции GetDocument, UpdateAllViews?

24. Шаблоны функций. Шаблоны классов. Специализация шаблонов функций и классов. Пример: шаблон swap и его специализация для string. 

25. Пример, когда параметр шаблона – не тип. Параметры шаблона по умолчанию. 
Частичная специализация. Когда внутри шаблона надо использовать typename?

26. Пример специализации шаблонов: numeric_limits.  Прием traits. Как в задаче про numeric_limits можно использовать препроцессор?

27. Разделяемые данные. Понятие счетчика указателей. Пример: shared_string 

28. Программы из нескольких модулей. 
Как определить функцию в одном cpp файле, а использовать в другом?  То же для глобальной переменной. Описатель extern. Описатель static для глобальных переменных и функций. Безымянные пространства имен.

29. Указатели на функции.  Функции, как параметры других функций. Какой-нибудь пример.

30. Функторы (объекты - функции). Какой-нибудь пример.

31. Как напечатать байты числа? (какие-нибудь 2 способа). Анонимный union. 

32. Препроцессор
Чем отличается #include <abc.h> от #include "abc.h"?. #define. Примеры использования. #if. Примеры использования . Операторы # и ##.

33.Динамическая идентификация типа (RTTI). Оператор typeid

34. Операторы преобразования: static_cast, reinterpret_cast, const_cast, dynamic_cast. 

35. namespace. Зачем нужны namespace? Как обращаться к именам из namespace? (3 способа) 

Замечания/советы:

•	На экзамене почти точно будут задачи:
- про определение какого-нибудь оператора (вроде rational::operator+)
- про свой класс string (что-то вроде string::operator+=)
- про set/map
- про шаблон для работы с контейнером STL (вроде sumpos)
•	Почти точно будет вопрос «Что такое ...» - для какого-нибудь редкого слова (например, mutable, explicit, и т.д.) (Так что учите слова..)