- •Динамические структуры данных. Сравнения статических и динамических структур данных. Область применения динамических структур.
- •Способы реализации динамических структур.
- •Достоинства и недостатки динамических структур.
- •Определение списка, стека, очереди.
- •Реализация динамических структур в stl.
- •Понятие наследования. Базовый и порожденные классы. Ключи доступа.
- •Ненаследуемые методы и операции.
- •Инициализация объекта порожденного класса.
- •Перегрузка функций.
- •Виртуальные методы.
- •Механизм позднего связывания.
- •Определение класса и объектов класса.
- •Элементы классов: поля и методы. Видимость элементов класса.
- •Указатель this.
- •Статические поля и методы класса.
- •Специальные методы класса — конструкторы и деструкторы.
- •Понятие дружественности.
Определение списка, стека, очереди.
Самый простой способ связать множество элементов – сделать так, чтобы каждый элемент ссылался на следующий. Такую динамическую структуру называют однонаправленным (односвязанным) линейным списком. Пример:
struct one_way_list_element
{
int data;
one_way_list_element * next; }
Если каждый элемент структуры содержит ссылку как на следующий, так и на предыдущий, то это двунаправленный (двусвязанный) линейный список. Пример:
struct two_way_list_element
{
int data;
two_way_list_element * previous;
two_way_list_element * next; }
Под стеком понимается структура данных при которой действует принцип LIFO – Last In First Out (последний пришел – первый ушел). Добавление и удаление элементов происходит с одного конца.
Под очередью понимается структура данных при которой действует принцип FIFO – First In First Out (первый пришел – первый ушел). Добавление элементов происходит с конца, удаление выход из очереди) – с начала.
Реализация динамических структур в stl.
Стандартная библиотека шаблонов (STL) (англ. Standard Template Library) — набор согласованных обобщённых алгоритмов, контейнеров, средств доступа к их содержимому и различных вспомогательных функций в C++.
В библиотеке выделяют пять основных компонентов:
Контейнер (container) — хранение набора объектов в памяти;
Итератор (iterator) — обеспечение средств доступа к содержимому контейнера;
Алгоритм (algorithm) — определение вычислительной процедуры;
Адаптер (adaptor) — адаптация компонентов для обеспечения различного интерфейса;
Функциональный объект (functor) — сокрытие функции в объекте для использования другими компонентами.
Динамические структуры:
vector (односвязанный список)
queue (обычная очередь)
deque (двунаправленная очередь, с обоих концов вставляем/удаляем элементы)
[+] — произвольный доступ по индексу к любому элементу
[-] — время на добавление в середину линейно зависит от размера контейнера(=> долго сортируется, а без упорядоченности поиск только перебором)
list (двусвязанная список)
[+] — константные по времени вставка и удаление из середины
[-] — доступ к элементам только последовательный
set (хранилище для уникальных элементов по их ключам, типа словарик)
[+] — внутренняя поддержка упорядоченности (=> быстрый поиск)
[-] — логарифмическая по времени вставка
Принцип наследования и его реализация в С++.
Наследование это один из трех основных принципов ООП (Объектно-Ориентированного Программирования), таких как: Инкапсуляция, Полиморфизм и Наследование. Принцип наследования в ООП реализуется с помощью механизма классов. Служит для наследования классов друг от друга.
Понятие наследования. Базовый и порожденные классы. Ключи доступа.
Это возможность создания иерархии классов, в которой потомки (производные классы, наследники) перенимают элементы своих предков (родителей, базовых классов), могут переопределять их и добавлять новые.
Пример описание наследования:
class base_class { … }
class children_class : [ключ доступа] base_class { ... }
Ключ доступа это модификатор для настройки наследования, по умолчанию он private (в этом случае говорят о защищенном наследовании). Он понижает статуса доступа public и protected эементов базового класса до private, то есть методы и поля базового класса не будут видны снаружи класса-наследника. Ключ public не изменяет статуса доступа элементов базового класса. Ключ protected понижает статус базовых элементов до protected.