Cpp tickets1

Материал из SEWiki
Перейти к: навигация, поиск

Вопросы по C++, первый семестр

  1. Языки C и C++
    С++ — (почти) надмножество C. Возможность написания эффективных программ на C++. Сложности программирования на C++: прямая работа с памятью. Превращение кода в программу: компиляция и линковка. Что проверяется при компиляции, а что — при сборке. Структура программы на C/C++: файлы кода и заголовочные файлы. Что можно поместить в заголовочные файл, а что — нельзя. Макросы — очень плохая идея. Макросы для защиты от повторного включения заголовочного файла. Зависимости между частями программы. Makefile.
  2. Как работает программа
    Во что превращается код в исполняемом файле. Структура исполняемой программы. Раздел кода, раздел данных. Использование памяти в работающей программе. Стек и куча. Как передаются параметры функции. Где оказываются локальные переменные.
  3. Указатели и ссылки
    Передача параметра с помощью указателя. Взятие адреса переменной и, наоборот, значения по адресу. Неинициализированные указатели. Нулевой указатель. Потенциальные проблемы при использовании указателей. Ссылки. Сходство с ссылок с указателями и их отличия. Как хранятся ссылки.
  4. Распределение памяти в куче
    Язык C: malloc/free. Язык C++: new/delete и new[]/delete[]. Почему нужны 2 набора операторов. Потенциальные проблемы. Вопросы производительности. Двумерные массивы.
  5. С++ как "С с удобными структурами"
    Идея инкапсуляции. Конструктор и деструктор. Класс "самоуправляющегося" массива. Автоматический вызов деструктора. Об опасности неожиданного завершения программы. Различиях malloc/free и new/delete для классов. Конструктор копирования. Проблемы с присваиванием объектов. Как запретить присваивание.
  6. Строки в C. Ввод и вывод в C и C++
    Массивы и указатели. Строки. Конец строки. Строковые константы. Операции со строками.Дескриптор файла, FILE. Что происходит пр открытии закрытии файла. Буфферизация, flush/fflush. Стандартные файлы stdin, stdout, stderr. Потоковый вывод на экран (std::out, std::err). Перегрузка операторов ввода, вывода.
  7. "Внутренности" класса
    Поля и методы. Ограничение прав доступа к членам класса. Все поля должны быть private. Почему это удобно. Проблемы с производительностью. inline. Какие методы стоит делать public? Принцип "всегда целого" объекта. Что нужно оптимизировать программисту, а что сделает за него компилятор. Примеры оптимизации: никогда не вызывать функцию дважды. Code conventions.
  8. Инициализация и const
    Потенциальные проблема: неинициализированные переменные. Возможности инициализации в конструкторе. Другая проблема — случайное изменение переменных. Решение: константные поля. Констатные методы. Константное возвращаемое значение. "Заразность" const. Идея возвращения значения по ссылке. возможность создания "парных" методов const/не-const. this.
  9. Слово static
    Статические "глобальные" переменные. Статические локальные переменные. Статические функции. Статические члены класса. Необходимость инстанциации статических полей.
  10. Идея namespace
    Определение пространств имён. Глобальное пространство имён. Вложенные пространства имён. Анонимный namespace. Директива using. Алиасы для namespace.
  11. Перегрузка операторов.
    Перегрузка оператора присваивания. Не стоит злоупотреблять перегрузкой (кроме оператора присваивания). Какие операторы можно перегружать. Какие операторы следует перегружать как методы, какие как внешние функции.
  12. Наследование
    Идея "расширения" типа. Проблемы с копированием. Неявное приведение типов. protected. Подробнее об ограничениях, которые накладывают права доступа. friend'ы. Невозможность полной защиты в C++. Права доступа как средство "самоограничения" для программиста.
  13. Перегрузка и переопределение. Полиморфизм
    Перегрузка имен методов. Не стоит злоупотреблять перегрузкой. Перегрузка конструкторов. Статическая и динамическая типизация: разные подходы в разных языках. Перегрузка и переопределение — разные слова. Виртуальные методы. Чисто виртуальные методы. Таблица виртуальных функций. Виртуальные деструкторы. Порядок построения таблицы. Опасность вызова виртуальных методов из конструктора. Почему это не запрещено синтаксически?
  14. Умные указатели
    Идея умных указателей. Для чего могут быть полезны. Какие бывают, как пользваться. Какие могут быть проблемы.
  15. auto_ptr
    Идея auto_ptr. Поведение при копировнии. Для чего может быть полезен. Какие могут быть проблемы.
  16. Идея template'ов
    Общая идея template'ов. Шаблоны функций и классов. Вывод шаблонных параметров из аргументов функций. Компиляция шаблонов. Почему их нужно определять в заголовочных файлах.