-
Notifications
You must be signed in to change notification settings - Fork 0
Вопросы
Полноценный и достаточный ответ на каждый вопрос можно уместить на пол страницы, в некоторых случаях на ⅔.
Для большей части вопросов можно использовать книгу, но учтите, что некоторая информация в ней устарела. Это касается в первую очередь ключевого слова auto, но может быть есть что-то ещё.
Типы: void, bool, char, int, float, double.
Модификаторы: short, long, signed, unsigned.
Минимальное и максимальное значение целых чисел.
Ограниченная точность чисел с плавающей точкой.
Представление целых чисел понадобится в вопросе 18.
Насчёт представления чисел с плавающей точкой достаточно сказать, что оно состоит из мантиссы, показателя степени и знака числа.
Рассказать о недостатках встроенных целочисленных типов.
Расположение в памяти, передача в виде аргумента.
Рассказать о недостатках использования массивов.
for (обычный и ranged), while, do while.
Нужно рассказать, о том, какие бывают модификаторы доступа (public, protected и private) и зачем они нужны.
Конечно, нужно сказать о том, что модификаторы доступа применяются только к классам (в широком смысле).
Рассказать о ключевых словах class и struct. Структуры — это классы с доступом public по-умолчанию. В обычных классах доступ по умолчанию — private.
Будет хорошим бонусом информация о public/protected/private наследовании, но пятерку за экзамен можно получить и без этого.
Нужны логически (архитектурно, идейно) обоснованные примеры использования public, protected и private.
Рассказать о friend классах и функциях.
Расскажите о том, зачем нужны методы и в чём их отличие от (обычных) функций.
Тут можно придумать множество вариантов классификации. "Придумайте" хотя бы три, а лучше - больше (я придумал шесть). Не нужно это гуглить (я сомневаюсь, что это где-нибудь написано), нужно просто подумать
(приведите пример, а лучше - два)
(приведите пример, а лучше - два)
(приведите пример, а лучше - два).
Расскажите о неявных параметрах. Расскажите, о том, в какой части кода доступны (для вызова) различные методы.
scope, namespace
enum; enum class.
Почитайте про типобезопасность: https://ru.wikipedia.org/wiki/Типобезопасность.
В контексте С++ и перечислений типобезопасность говорит о том, что простое перечисление может быть автоматически преобразовано в целый тип (int), а enum class — нет. То есть enum class безопаснее, чем enum.
Посмотрите на код:
enum FigureType {
Rectangle,
Circle,
Triangle,
};
enum DrawPrimitive {
Polygon,
Quad,
};
void printType(int type)
{
switch (type) {
case Rectangle:
printf("Rectangle");
break;
case Circle:
printf("Circle");
break;
case Triangle:
printf("Triangle");
break;
}
}
int main(int argc, char *argv[])
{
printType(Quad);
return 0;
}
Если бы DrawPrimitive был enum class, то компилятор искал бы функцию void printType(DrawPrimitive type) и выдал ошибку из-за того, что такая функция не найдена. В свою очередь, использование правильной сигнатуры сделало бы текущую логическую ошибку (использование Quad типа DrawPrimitive в функции, реализация которой ожидает FigureType) синтаксической.
Простой enum слабо типизирован, поэтому он может быть автоматически преобразован в int, что не даёт компилятору обнаружить возможные ошибки.
В Си++ многие ключевые слова (const, override, final, public, protected, private и т.д) используются в первую очередь для того, чтобы позволить компилятору найти ошибки во время компиляции, избавив программу от ошибок времени выполнения.
Директивы: #include, #define, #ifdef, #else, #elif, #endif
Рассказать, зачем нужна директива #error, на одном или двух примерах рассказать про #pragma.
Виртуальные и абстрактные методы.
Если кто-то хочет сдать на шесть по пятибальной — расскажите про виртуальное наследование.
Операторы new и delete. Конструкторы и деструкторы.
Отличный ответ включает в себя объяснение важности виртуального деструктора.
Нет ничего хуже, чем сказать, что auto используется для указания автоматического размещения в памяти.
Классы, структуры, перечисления. typedef
if, switch/case
Рассказать про switch по перечислению без секции default.
Размеры основных типов и порядок байтов. Портирование программ. WinAPI, Posix.
gcc, msvc, clang.
стек, куча, сегмент данных и сегмент кода
Другими словами — перегрузка (overload) и переопределение (override) функций.
Статический — вызываемый метод определяется на этапе компиляции. (Перегрузка функций)
Динамический — вызываемый метод определяется при выполнении программы. (Переопределение функций)
Применение explicit конструкторов и операторов приведения типа.
Resource Acquisition Is Initialization
inline
Рассказать, какие функции могут быть встроенными. Объявснить, как использование inline может снизить производительность.
Рассказать, зачем нужна и в чём может быть проблема рекурсивного вызова.
Run-Time Type Information
static_cast, dynamic_cast (, qobject_cast).
Нужно рассказать, зачем они нужны.
singleton
Ошибки и предупреждения при компиляции и связывании (compile и link time). Ошибки во время выполнения программы (runtime).