Экзаменационные вопросы. Январь 2018

  1. Шаблоны (templates). Зачем они нужны? Шаблоны функций и классов. Инстанцирование шаблонов.
  2. Полная и частичная специализация. Шаблоны методов.
  3. Классы свойств и значений. Классы стратегий.
  4. Операции из <functional>. std::bind. Лямбда-функции.
  5. Принцип SFINAE. Метапрограммирование.
  6. Конструктор копирования. Семантика перемещения и конструктор перемещения. Перегрузка оператора присваивания. Операции по умолчанию и их удаление.
  7. std::initializer_list.
  8. Перегрузка операторов. Оператор-член класса и оператор-глобальная функция. Операторы и пространства имён.
  9. Перегрузка << и >> для ввода-вывода.
  10. Перегрузка логических операторов и свойство «короткого замыкания».
  11. Перегрузка операторов инкремента и декремента.
  12. Перегрузка оператора индекса [].
  13. Перегрузка оператора вызова функции ().
  14. Перегрузка операторов, связанных с указателями: &, * и ->.
  15. Оператор преобразования типа. Явное и неявное преобразование. Ключевое слово explicit.
  16. Перегрузка операторов new и delete. Placement new.
  17. Константы пользовательских типов (user-defined literals).
  18. Принцип Copy-on-Write.
  19. Паттерны проектирования. Почему они полезны?
  20. Порождающие паттерны. Singleton, Builder, Factory Method, Prototype.
  21. Поведенческие паттерны. Iterator, Command, Template Method, State, Strategy.
  22. Структурные паттерны. Adapter, Decorator, Proxy, Facade, Composite.
  23. Паттерны Object Pool, Null Object, Servant. Модель MVC. Модель цикла обработки событий (Event Loop).
  24. Работа с библиотеками в C++. Хорошие и плохие библиотеки. Структурирование исходного кода в больших проектах.
  25. История ООП. Скандинавская школа (Simula 67). Основы Smalltalk.
  26. Статическая и динамическая типизация. Основы Javascript. Наследование с помощью прототипов.
  27. Замыкания. Наследование интерфейса и наследование реализации. Наследование в Go и Rust.
  28. Критический взгляд на ООП. Сложность, присущая задаче (inherent complexity), и побочная сложность (incidental complexity). Проблемы, вытекающие из мутабельности состояния объектов. Персистентные структуры данных.