C++ 1MIT осень 1 2019 — билеты

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

Обязательные знания

На экзамене требуется знать все понятия ниже, а также уметь приводить примеры к ним. Иначе — блокирующий "неуд".

  1. Переменные
    • статическая типизация
    • тип переменной
    • размер переменной, размер типа
    • типы int, char: типичные размеры. Например, на архитектуре x86_64 под Linux в компиляторе GCC.
  2. Основные конструкции языков C и C++
    • объявления переменных
    • выражения и операторы:
      • арифметические (+, -, *, /, %, +=, -=, *=, /=, %=, ++, --)
      • булевы (<, <=, >, >=, ==, !=, &&, ||, !)
      • на минимальную оценку необязательно знать: отличия постфиксных и префиксных операторов
    • условный оператор if
    • циклы for, while
  3. Функции
    • объявление и определение функции, требуется отличать между собой (можно случайно перепутать, но после вопроса исправиться)
    • вызов функции
    • возвращаемое значение
    • рекурсивный вызов

Билеты

При ответе на любой вопрос необходимо приводить "содержательные" примеры. Например: не класс Foo с методов bar, а класс Matrix с методом add.

  1. Программа, состоящая из нескольких файлов.
    • заголовочные файлы
    • компиляция и линковка
    • объявления и определения функций
    • утилита make
  2. Указатели, массивы, ссылки.
    • NULL, nullptr
    • применение указателей и ссылок
    • арифметика указателей
    • константность указателей
  3. Три вида памяти. Работа с кучей на C.
    • глобальная/статическая память, стек, куча
    • extern-переменные
    • sizeof для переменных и типов
    • malloc/calloc/realloc/free
    • void*
  4. Структуры. Неинтрузивный связный список на C.
    • неинтрузивная реализация
    • расположение полей в памяти, выравнивание
    • typedef
  5. Структуры. Интрузивный связный список на C.
    • интрузивная реализация
    • расположение полей в памяти, выравнивание
    • typedef
  6. Функции. Указатели на функции.
    • как происходит вызов функции
    • реализация сортировки
    • void sort(void* base, size_t num, size_t size, int (*compar)(const void*,const void*));
  7. Обзор стандартной библиотеки C.
    • string.h (memcpy, memcmp, strcpy, strcmp, strcat, strstr, strchr, strtok)
    • stdlib.h (atoi, strtoll, srand/rand, qsort)
    • строки в стиле Си (null-terminated strings), '0', '\0', 0
    • контракты функций: кто выделяет/освобождает буфер, какого должен быть размера, какие требования к аргументам, где хранится внутреннее состояние функций
    • чем отличаются функции, решающие похожие задачи (например, strcpy и memcpy, atoi/strtol)
  8. Ввод-вывод на C. Текстовые файлы.
    • FILE, fopen, fclose, r/w, t/b
    • stdin, stdout, stderr
    • printf, scanf, fprintf, fscanf, sprintf, sscanf, fgets
    • обработка ошибок, feof, ferror
  9. Ввод/вывод на C. Бинарные файлы.
    • FILE, fopen, fclose, r/w, t/b, буферизация
    • fread, fwrite, fseek, ftell, fflush
    • обработка ошибок, feof, ferror
  10. Классы и объекты.
    • инкапсуляция: private/public
    • конструктор (overloading), деструктор
    • инициализация полей: по умолчанию, member initialization list, default member initializer (C++11)
    • время жизни полей: порядок вызова конструкторов и деструкторов полей и конструктора/деструктора класса
    • конструктор по умолчанию
    • C++11: =default, constructor chaining
    • правило трёх, правило нуля
  11. Работа с кучей на C++
    • new/delete
    • cоздание объектов в куче
    • конструктор копий
    • оператор присваивания, copy-and-swap, возвращаемое значение, a = a
    • C++11: =delete
    • правило трёх, правило нуля
  12. Наследование и полиморфизм.
    • (не)явные преобразования указателей
    • protected
    • virtual (overriding)
    • таблица виртуальных функций
    • статическое/динамическое связывание
  13. Умные указатели.
    • scoped_ptr
    • unique_ptr
    • shared_ptr
  14. Перегрузка операторов.
    • бинарные и унарные (префиксный и постфиксный)
    • возвращаемое значение
    • в классе/вне класса
    • оператор приведения типов
  15. Сложные вызовы функций
    • передача параметров в функции и возврат из функций: по значению (по копии) и по ссылке, массивы, структуры, указатели
    • неявные преобразования аргументов и переменных
    • отсутствие неявного преобразования объекта при вызове методов: в a.foo() к a не применяются неявные преобразования
    • explicit-конструкторы
    • время жизни временных объектов в выражениях
  16. Ключевые слова extern, static, inline.
    • extern у переменных
    • static у переменных и функций
    • static у полей и методов
    • inline у функций
  17. Перегрузка функций, константность
    • ключевое слово const (С/C++) у переменных, аргументов, полей, методов (cv-qualification), указателей
    • ключевое слово mutable
    • перегрузка функций
    • параметры функций по умолчанию
  18. Наследование: детали
    • расположение подобъектов в памяти
    • сортировка и структуры данных C vs ООП
    • private/protected наследование
    • C+11: final у метода и класса, override

Не требуется знать:

  1. Термины "storage duration": automatic, static, dynamic.
  2. Термины "linkage": no linkage, external, internal.
  3. Placement new
  4. Приоритеты и (лево/право)ассоциативность операторов, кроме арифметических (+, -, *, /).