Введение в стандартную библиотеку

ЭКЗАМЕНАЦИОННЫЕ ВОПРОСЫ

по курсу

«Основы программирования на C++»

 

МОДУЛЬ 1

 

Объектная модель

 

1. Структура сложных систем. Сложность программного обеспечения. Пять признаков сложной системы. Основные типы иерархий. Каноническая форма сложной системы. Алгоритмическая и объектно-ориентированная декомпозиции.

2. Основные положения объектной модели: объектно-ориентированный анализ, объектно-ориентированное проектирование, объектно-ориентированное программирование. Составные части объектного подхода, их описание.

3. Понятия класса и объекта с позиции ООП. Операции, типы операций. Методы идентификации классов и объектов. Основы UML: назначение, основные типы диаграмм. Диаграмма классов: обозначение класса, отношения между классами, видимость, классы ассоциаций.

 

Классы

 

4. Понятие типа данных, спецификация базового типа. Классы и объекты в языке C++, спецификация класса. Понятие интерфейса. Поля и методы класса, особенности задания полей класса. Описание класса. Спецификаторы доступа private, protected и public. Глобальные и локальные классы, их особенности. Встроенные (inline) методы. Доступ к элементам класса. Привести пример работы с классом.

5. Описание объектов класса. Константные объекты и методы, mutable. Пример использования. Указатель this. Отличия структур и объединений от классов.

6. Конструкторы. Основные свойства. Конструктор копирования: основные свойства. Конструктор преобразования. Деструкторы: случаи автоматического вызова, основные особенности. Привести примеры использования данных методов.

7. Статические элементы класса: статические данные-члены и статические методы, их свойства. Привести примеры использования. Дружественные функции и классы, их свойства. Привести примеры использования.

8. Перегрузка операций. Примеры допустимых и недопустимых для перегрузки операции. Правила перегрузки. Функции-операции, способы их определения. Перегрузка унарных и бинарных операций, операции присваивания, приведения типа, вызова функции, индексирования, вывода в поток и чтения из потока. Привести примеры перегрузки основных операций.

9. Специальные функции-члены. Указатели на элементы классов: описание, основные особенности. Привести примеры использования.

 

Наследование

 

10. Синтаксис наследования классов. Спецификаторы доступа. Примеры наследования классов. Порядок вызова конструкторов и деструкторов при наследовании. Синтаксис передачи аргументов из конструктора производного класса в конструктор базового класса при простом и множественном наследовании. Копирование объектов производных классов, срезка. Привести примеры работы с конструкторами и операцией присваивания при наследовании.

11. Понятие полиморфизма и его реализация в C++. Указатель на базовый класс и его особенности. Пример использования. Основные свойства виртуальных функций. Чисто виртуальный метод. Абстрактный класс и его свойства. Отличия перегрузки методов от переопределения виртуальных функций. Виртуальный деструктор.

12. Механизмы раннего и позднего связывания. Таблица виртуальных методов vtable, поле ссылки vpointer. Множественное наследование. Основные классы и классы подмешивания. Передача параметров из конструктора производного класса в конструктор базового при множественном наследовании, привести пример. Конфликты идентификаторов и разрешение неоднозначностей. Виртуальное наследование.

13. Гомоморфные иерархии классов. Подстановочный критерий Лискова. Нормальное наследование. Инкапсуляция производных классов. Производящие и уничтожающие функции.

 

Преобразование типов

 

14. Преобразования типов, виды преобразований. Явные и неявные преобразования типов, случаи, когда происходит попытка неявного преобразования. Правила неявных преобразований. Операция приведения типов в стиле C (C-style cast), операции const_cast, static_cast, reinterpret_cast: синтаксис, особенности применения, примеры.

15. Динамическая идентификация и приведение типов, ее назначение. Механизм RTTI. Получение информации о типе с помощью оператора typeid и класса type_info, их свойства, описание и особенности применения, примеры использования. Операция dynamic_cast: синтаксис и особенности применения. Преобразования типа upcast, downcast и crosscast, примеры. Особенности понижающих преобразований, недостатки C-style cast при понижающих преобразованиях.

16. Пользовательские преобразования типов. Реализация пользовательских преобразований. Конструкторы и операторы преобразования. Ключевое слово explicit. Привести примеры.

 

Обработка исключительных ситуаций

 

17. Исключительная ситуация: определение, особенности обработки, альтернативные варианты получения информации об ошибках в функциях, функция abort(). Общий механизм обработки исключений, раскручивание стека. Синтаксис исключений. Примеры.

18. Перехват исключений. Основные действия исполнительной библиотеки C++ после генерации исключения с помощью throw. Механизм поиска обработчика. Список исключений функции. Алгоритм обработки непредусмотренного исключения. Примеры.

19. Исключения в конструкторах и деструкторах. Иерархии исключений. Стандартные исключения, иерархия классов стандартных исключений, их описание. Метод what(), коды и условия ошибок, передача исключений с помощью класса exception_ptr. Примеры.

 

Шаблоны

 

20. Обобщенное программирование. Шаблоны функций. Синтаксис описания функции-шаблона. Инстанцирование шаблона и определение типа для инстанцирования. Перегрузка шаблонов функций. Специализация шаблона. Достоинства и недостатки шаблонов. Привести примеры.

21. Обобщенное программирование. Шаблоны классов. Синтаксис описания шаблона класса. Виды параметров шаблона, параметры по умолчанию, определение методов шаблонного класса. Правила описания шаблонов. Использование шаблонов классов. Привести примеры шаблонов с различными типами шаблонных параметров. Специализация отдельных методов шаблонного класса, специализация целого класса, частичная специализация. Привести примеры.

 

Теория алгоритмов

 

22. Сортировка вставкой: псевдокод алгоритма, инварианты цикла и корректность алгоритма. Анализ алгоритма сортировки вставкой; наихудшее, среднее и наилучшее время работы.

23. Метод декомпозиции: разделение, властвование и комбинирование на примере сортировки слиянием. Псевдокод алгоритма, его корректность. Анализ алгоритмов, основанных на методе декомпозиции, на примере сортировки слиянием.

24. Определение структуры данных, динамического множества, словарных операций и словарей. Хеширование и хеш-таблицы. Таблицы с прямой адресацией, словарные операции. Понятия хеш-таблицы, хеш-функции, хеш-значения, хеширования и коллизии.

25. Хеширование и хеш-таблицы. Разрешение коллизий с помощью цепочек, реализация словарных операций. Анализ хеширования с цепочками, коэффициент заполнения, понятие простого равномерного хеширования, теоремы об оценке математического ожидания количества элементов, которое должно быть проверено алгоритмом поиска с доказательством.

 

МОДУЛЬ 2

 

Новые стандарты C++

 

26. Новые стандарты C++. Новые типы и необработанные строки. Унифицированная инициализация. Сужение. std::initializer_list. Объявления: auto, decltype. Описание фаз вывода типа decltype. Хвостовой возвращаемый тип. Псевдонимы шаблонов: using=. Ключевые слова nullptr и constexpr. Изменения в спецификации исключений. Перечисления с областью видимости. Цикл for, основанный на диапазоне. Привести примеры.

27. Новые стандарты C++. Понятия rvalue и lvalue. Семантика переноса и ссылка rvalue. Необходимость в семантике переноса. Конструктор переноса и операция присваивания с переносом. Принудительное применение переноса, функция std::move(). Примеры.

28. Новые стандарты C++. Универсальные ссылки, их отличие от rvalue-ссылок. Контекст универсальных ссылок. Инициализация универсальных ссылок. Функции std::move() и std::forward(), их назначение, отличия, случаи применения. Свертывание ссылок: правило свертывания, контексты свертывания.

29. Новые стандарты C++. Изменения в классах. Инициализация членов внутри класса. Специальные функции-члены. Явно заданные по умолчанию и удаленные методы. Делегирование конструкторов. Наследование конструкторов. Управление виртуальными методами: override и final. Примеры.

30. Новые стандарты C++. Лямбда-функции. Три формы функциональных объектов. Описание синтаксиса лямбда-функций. Сравнение функций, функторов и лямбда. Примеры использования.

31. Новые стандарты C++. Оболочка function. Назначение, описание, примеры использования. Шаблоны с переменным количеством аргументов. Описание синтаксиса. Пакеты параметров шаблона и функции, распаковка пакетов, рекурсия. Привести примеры.

32. Новые стандарты C++. Вывод типов шаблонов и auto. Случаи использования указателя или ссылки, универсальной ссылки, ни указателя и ни ссылки. Особенности вывода типа auto.

33. Новые стандарты C++. Типы std::optional, std::any, std::variant: описание, особенности, примеры использования.

 

Введение в стандартную библиотеку

 

34. Стандартная библиотека C++. Общие принципы. Пространство имен std и заголовочные файлы. Вспомогательные средства: пары, их основные операции, способы доступа к элементам, конструкторы и операции присваивания, создание по частям, функция make_pair(), сравнение пар. Привести примеры.

35. Стандартная библиотека C++. Общие принципы. Пространство имен std и заголовочные файлы. Вспомогательные средства: кортежи, их основные операции, функции make_tuple() и tie(), кортежи и списки инициализации, ввод-вывод кортежей, преобразование типов tuple и pair. Структурированные привязки. Привести примеры.

36. Стандартная библиотека C++. Общие принципы. Пространство имен std и заголовочные файлы. Вспомогательные средства: свойства и утилиты типов, их предназначение. Основные унарные предикаты, свойства отношений между типами, модификаторы типа: примеры использования, основные особенности. Обертки для ссылок: назначение, примеры.

37. Стандартная библиотека C++. Классы потоков ввода-вывода, общие понятия. Иерархия классов, их назначение и описание, глобальные потоковые объекты, заголовочные файлы. Операторы << и >>, ввод и вывод специальных типов. Привести примеры.

38. Стандартная библиотека C++. Состояние потоков, константы состояния потоков, функции-члены для доступа к состоянию потоков, состояние потока и булевы условия, состояние потока и исключения. Привести примеры.

39. Стандартная библиотека C++. Основные стандартные функции неформатированного ввода-вывода. Их описание и примеры использования. Манипуляторы без аргументов и с аргументами, обзор основных манипуляторов, принципы работы манипуляторов, создание пользовательских манипуляторов без аргументов и с аргументами. Примеры.

40. Стандартная библиотека C++. Форматирование, флаги форматирования, функции и манипуляторы для доступа к ним. Формат вывода булевых значений, ширина, символ-заполнитель и выравнивание, положительный знак и верхний регистр, основы системы счисления, вывод чисел с плавающей точкой, общие определения формата. Интернационализация. Привести примеры использования.

41. Стандартная библиотека C++. Доступ к файлам. Иерархия классов файловых потоков и их описание. Демонстрация работы с файлами. Rvalue и семантика перемещения для файловых потоков. Флаги файлов и их описание. Функции-члены для открытия и закрытия файлов. Функции-члены для позиционирования в потоке.

42. Стандартная библиотека C++. Потоковые классы для работы со строками, их описание. Основные операции над строковыми потоками. Демонстрация использования строковых потоков ввода и вывода. Использование флагов и семантика перемещения. Привести примеры.

43. Стандартная библиотека C++. Связывание потоков ввода и вывода. Нежесткое связывание с помощью функции tie(). Жесткое связывание с помощью потоковых буферов. Перенаправление стандартных потоков.

 

Теория алгоритмов

 

44. Хеширование и хеш-таблицы. Хеш-функции, качество хеш-функции. Метод деления. Метод умножения.

45. Универсальное хеширование. Определение, особенности. Анализ производительности, теорема о средней производительности поиска с доказательством и следствие из нее с доказательством. Построение универсального класса хеш-функций.

46. Хеширование и хеш-таблицы. Открытая адресация. Определение, особенности. Реализация основных словарных операций. Предположение о равномерном хешировании.

47. Хеширование и хеш-таблицы. Линейное, квадратичное исследования и двойное хеширование. Анализ хеширования с открытий адресацией, теоремы об оценке математического ожидания количества исследований с доказательством, следствия из них с доказательством.

48. Хеширование и хеш-таблицы. Идеальное хеширование. Определение, особенности. Теорема о вероятности возникновения коллизий с доказательством, теорема об оценке суммарного размера всех вторичных хеш-таблиц и следствия из нее с доказательством.

49. Графы. Ориентированный и неориентированный графы. Определения инцидентного ребра, смежной вершины, степени вершины, пути, простого пути, подпути, достижимой вершины, цикла, простого цикла, связного неориентированного и сильно связного ориентированного графов, связных и сильно связных компонентов, изоморфных графов, подграфа, полного графа, двудольного графа, леса, (свободного) дерева.

50. Элементарные алгоритмы для работы с графами. Способы представления графов, их описание, преимущества и недостатки.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: