- •1. Динамические структуры данных
 - •2. Динамические структуры данных. Линейные списки: Очередь, стек.
 - •3. Динамические структуры данных. Деревья
 - •4. Классы. Описание классов. Описание объектов. Указатель this.
 - •5. Статические элементы класса. Статические поля. Статические методы.
 - •6. Дружественная функция. Дружественный класс.
 - •7. Деструкторы
 - •8. Перегрузка операций. Перегрузка унарных операций
 - •9. Перегрузка бинарных операций
 - •10. Перегрузка операций присваивания
 - •11. Перегрузка операции приведение типа
 - •12. Наследование. Ключи доступа. Простое наследование
 - •13. Виртуальные методы. Алгоритмы позднего связывания
 - •Механизм позднего связывания
 - •14. Множественное наследование
 - •15. Создание произвольного класса на базе основного
 - •16. Обработка исключительных ситуаций. Общий механизм обработки исключений
 - •17. Синтаксис исключений. Перехват исключений
 - •18. Список исключений функций
 - •19. Иерархии исключений
 - •20. Исключения в конструкторах и деструкторах
 - •21. Преобразование типов. Неявные преобразования типов
 - •22. Преобразования типов в выражениях
 - •23. Явные преобразования типов. Операция const_cast. Операция dynamic_cast
 - •Операция const_cast
 - •Операция dynamic_cast
 - •24. Повышающее преобразование. Понижающее преобразование
 - •25. Преобразование ссылок. Перекрестное преобразование
 - •26. Преобразование типа на стадии компиляции. Операция static_cast. Операция reinterpret_cast
 - •27. Динамическое определение типа. Операция type_id. Класс type_info
 - •28. Потоки. Стандартные потоки. Объекты заголовочного файла iostream
 - •29. Правила ввода и вывода величин
 - •30. Форматирование данных. Флаги и форматирующие методы. Манипуляторы
 - •31. Методы обмена с потоками. Класс iоstream
 - •32. Ошибки потоков
 - •33. Базовый класс ios. Методы и операции класса ios
 - •34. Файловые потоки. Классы для работы с файлами: ifstream, ofstream, fstream
 - •35. Строковые потоки. Базовые классы строковых потоков: istringstream, ostringstream, stringstream
 - •36. Потоки и типы, определенные пользователем
 - •37. Строки. Конструкторы и присваивание строк
 - •38. Создание объекта string. Операция присваивания строк
 - •39. Операции класса string
 - •40. Функции работы со строками. Присваивание и добавление частей строк
 - •41. Функции работы со строками. Преобразование строк. Поиск подстрок. Сравнение частей строк
 - •42. Функции работы со строками. Получение характеристик строк
 - •43. Обратные итераторы. Итераторы вставки. Потоковые итераторы
 - •Обратные итераторы
 - •Итераторы вставки
 - •Потоковые итераторы
 - •44. Функциональные объекты. Арифметические функциональные объекты
 
Ответы на вопросы к экзамену по С++ II семестр
1. Динамические структуры данных
Память под данные выделяется либо на этапе компиляции, либо во время выполнения программы с помощью операции new или функции mallос (необходимый объем должен быть известен до распределения памяти).
Если до начала работы с данными невозможно определить, сколько памяти потребуется для их хранения, память выделяется по мере необходимости отдельными блоками, связанными друг с другом с помощью указателей. Такой способ организации данных называется динамическими структурами данных, поскольку их размер изменяется во время выполнения программы. Из динамических структур в программах чаще всего используются линейные списки, стеки, очереди и бинарные деревья. Они различаются способами связи отдельных элементов и допустимыми операциями.
Динамические структуры широко применяют и для более эффективной работы с данными, размер которых известен, особенно для решения задач сортировки, поскольку упорядочивание динамических структур не требует перестановки элементов, а сводится к изменению указателей на эти элементы.
Элемент любой динамической структуры данных представляет собой структуру (в смысле struct), содержащую, по крайней мере, два поля: для хранения данных и для указателя. Поля данных могут быть любого типа: основного, составного или типа указатель. Описание простейшего элемента (компоненты, узла) выглядит следующим образом:
struct Node{
Data d; // тип данных Data должен быть определен ранее
Node *р:
}:
2. Динамические структуры данных. Линейные списки: Очередь, стек.
Однонаправленным (односвязным) списком называется такой способ связывания элементов, когда каждый элемент содержит ссылку на следующий. Если добавить в каждый элемент вторую ссылку — на предыдущий элемент, получится двунаправленный список (двусвязный), если последний элемент связать указателем с первым, получится кольцевой список.
Каждый элемент списка содержит ключ, идентифицирующий этот элемент. Ключ обычно бывает либо целым числом, либо строкой и является частью поля данных. Ключи разных элементов списка могут совпадать.
Над списками можно выполнять следующие операции:
начальное формирование списка (создание первого элемента);
добавление элемента в конец списка;
чтение элемента с заданным ключом;
вставка элемента в заданное место списка (до или после элемента с заданным
ключом);
удаление элемента с заданным ключом;
упорядочивание списка по ключу.
Стек — это частный случай однонаправленного списка, добавление элементов в который и выборка из которого выполняются с одного конца, называемого вершиной стека. Другие операции со стеком не определены. При выборке элемент исключается из стека.
Стек проще всего представить себе как закрытую с одного конца узкую трубу, в которую бросают мячи. Достать первый брошенный мяч можно только после того, как вынуты все остальные.
Очередь — это частный случай однонаправленного списка, добавление элементов в который выполняется в один конец, а выборка — из другого конца. Другие операции с очередью не определены. При выборке элемент исключается из очереди.
Очередь проще всего представить себе, постояв в ней час-другой. В программировании очереди применяются, например, при моделировании, диспетчеризации задач операционной системой, буферизованном вводе/выводе.
