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