- •1. Основы ооп. Понятие инкапсуляции, наследования и полиморфизма.
- •Ограничение на наследование
- •2. Класс в ооп и его основные компоненты.
- •Объявление класса
- •3. Перегрузка функций.
- •4. Уровни доступа к элементам класса.
- •5. Область видимости объектов, скрытие имен.
- •6. Динамическая память, функции работы с памятью.
- •7. Динамическая память, операции работы с памятью.
- •9. Передача аргументов в функцию по умолчанию.
- •10. Понятие класса, общая структура.
- •Объявление класса
- •11. Характеристика элементов-данных класса.
- •12. Характеристика методов класса. Использование операции привязки «::»
- •13. Указатель «this». Пример явного использования.
- •14.Функции-друзья класса.
- •15. Функции-конструкторы. Явный и косвенный вызов конструктора.
- •16. Функции-деструкторы.
- •17. Методы класса с атрибутом «const».
- •18. Статические методы и данные. Атрибут «static»
- •19. Указатели на компоненты класса
- •20. Наследование. Базовый и производный классы.
- •21.Инициализация объектов при наследовании
- •22. Указатели на производный и базовый классы. Формат явного преобразования указателей на базовый класс.
- •23.Виртуальный базовый класс
- •24.Консруктор во множественном наследовании
- •25.Виртуальные функции. Переопределение виртуальной функции.
- •26.Понятие абстрактного класса
- •29. Перегрузка методами класса
- •34.Итераторы
- •35.Алгоритмы
- •36. Потоковые классы.
- •37.Управление выводом. Манипуляторы и флажки.
- •38. Файловые потоки.
- •39.Шаблоны функций
- •40.Шаблоны классов.
- •46. Указатель типа «void».
- •48. Операция «typeid»
14.Функции-друзья класса.
Дружественная функция - это функция, которая, не являясь компонентой класса, имеет доступ к его защищенным и собственным компонентам. Служит для расширения интерфейса класса. Описана в теле класса со спецификатором friend. friend имя_функции( список_формальных_параметров);
Дружественная функция не получает указателя this при вызове. Объекты класса должны передаваться дружественным функциям через механизм параметров. Вызывать дружественные функции как компонентные нельзя. Дружественная функция не может быть компонентой класса, для которого она дружественная. Она может быть глобальной. Функция - не член класса, - имеющая доступ к его закрытой части, называется другом этого класса. Дружественная функция имеет доступ ко всем компонентам класса вне зависимости от их области видимости. Дружественная функция класса может быть обычной внешней функцией программы, а может - компонентной функцией другого класса. Дружественная функция становится расширением интерфейса класса, и этот интерфейс реализует взаимодействие объекта с другими объектами программы. Помимо дружественной функции любой класс может быть дружественным другому классу. Для этого в классе предоставляющего дружбу нужно описать дружественный класс со спецификатором friend. Все компоненты класса предоставляющего дружбу доступны в дружественном классе, на него не влияют спецификаторы доступа. При этом описание дружественности не взаимно.
15. Функции-конструкторы. Явный и косвенный вызов конструктора.
Конструкторы предназначены для инициализации элементов данных объектов.
Описание конструктора: идентификатор_конструктора (список параметров) {тело конструктора}
Идентификатор конструктора должен совпадать с именем класса. У конструктора не указывается тип возвращаемого значения (даже void).
Для класса Massiv конструктор может быть объявлен так:
Massiv (int *b, int m)
{ n=m;
for (int i=0; i<n; i++)
a[i]=b[i];}
Конструктор может иметь значения параметров по умолчанию.
Правила использования конструкторов:
- если конструктор не вызывается явно, то он вызывается автоматически при создании объекта с использованием значений параметров по умолчанию;
- если конструктор не описан явно, он генерируется транслятором автоматически.
Вызывать конструктор можно так:
имя_класса имя_объекта = имя_конструктора (список фактических параметров);
имя_конструктора имя_объекта (список фактических параметров);
Конструктор выделяет память для объекта и инициализирует данные-члены класса.
Конструктор имеет ряд особенностей:
Для конструктора не определяется тип возвращаемого значения. Даже тип void не допустим.
Указатель на конструктор не может быть определен и соответственно нельзя получить адрес конструктора.
Конструкторы не наследуются.
Конструкторы не могут быть описаны с ключевыми словами virtual, static, const, mutable, volatile.
Конструктор всегда существует для любого класса, причем, если он не определен явно, он создается автоматически. По умолчанию создается конструктор без параметров и конструктор копирования. Если конструктор описан явно, то конструктор по умолчанию не создается. По умолчанию конструкторы создаются общедоступными (public).
В классе может быть несколько конструкторов, но только один с умалчиваемыми значениями параметров. Перегрузка чаще всего используется для передачи конструктору аргументов, предназначенных для инициализации данных- членов класса. Параметром конструктора не может быть его собственный класс, но может быть ссылка на него (T&). Без явного указания программиста конструктор всегда автоматически вызывается при определении (создании) объекта. В этом случае вызывается конструктор без параметров. Для явного вызова конструктора используются две формы:
имя_класса имя_объекта(фактические_параметры);
имя_класса(фактические_параметры);
Первая форма допускается только при не пустом списке фактических параметров. Она предусматривает вызов конструктора при определении нового объекта данного класса:
Существует два способа инициализации данных объекта с помощью конструктора. Ранее мы рассматривали первый способ, а именно передача значений параметров в тело конструктора. Второй способ предусматривает применение списка инициализаторов данного класса. Этот список помещается между списком параметров и телом конструктора. Каждый инициализатор списка относится к конкретному компоненту и имеет вид: имя_данного (выражение)
По умолчанию создается также конструктор копирования вида T::T(const T &), где T - имя класса. Конструктор копирования вызывается всякий раз, когда выполняется копирование объектов, принадлежащих классу. В частности он вызывается: когда объект передается функции по значению; при построении временного объекта как возвращаемого значения функции; при использовании объекта для инициализации другого объекта. Конструктор с одним аргументом может выполнять неявное преобразование типа своего аргумента в тип класса конструктора.