Архив категории ‘Основы объектно-ориентированного программирования’

Шаблоны классов

    На этом шаге мы рассмотрим описание и использование шаблонов классов.     Напомним, что шаблон семейства функций определяет потенциально неограниченное множество родственных функций. Он имеет следующий вид: template <список_параметров_шаблона> определение_функции     Здесь угловые скобки являются неотъемлемым элементом определения. Список параметров шаблона должен быть заключен именно в угловые скобки.     Аналогично определяется шаблон семейства классов: template […]

Шаблоны функций (окончание)

    На этом шаге мы закончим рассматривать шаблоны функций.     Перечислим основные свойства параметров шаблона. Имена параметров шаблона должны быть уникальными во всем определении шаблона. Список параметров шаблона функций не может быть пустым, так как при этом теряется возможность параметризации и шаблон функций становится обычным определением конкретной функции. В списке параметров шаблона функций может быть […]

Шаблоны функций

    На этом шаге мы рассмотрим определение и использование шаблонов функций.     Цель введения шаблонов функций - автоматизация создания функций, которые могут обрабатывать разнотипные данные. В отличие от механизма перегрузки, когда для каждой сигнатуры определяется своя функция, шаблон семейства функций определяется один раз, но это определение параметризуется. Параметризовать в шаблоне функций можно тип возвращаемого функцией […]

Локальные классы

    На этом шаге мы рассмотрим описание и использование локальных классов.     Класс может быть определен внутри блока, например внутри тела функции. Такой класс называется локальным. Локализация класса предполагает недоступность его компонентов вне области определения класса (вне тела функции или блока, в котором он описан или определен).     Локальный класс не может иметь статических данных, […]

Абстрактные классы (окончание)

    На этом шаге мы закончим рассмотрение абстрактных классов.     По сравнению с обычными классами абстрактные классы пользуются "ограниченными правами". Перечислим эти ограничения. Как говорилось, невозможно создать объект абстрактного класса. Абстрактный класс нельзя употреблять для задания типа параметра функции или в качестве типа возвращаемого функцией значения. Абстрактный класс нельзя использовать при явном приведении типов. В […]

Абстрактные классы

    На этом шаге мы рассмотрим использование абстрактных классов.     Абстрактным классом называется класс, в котором есть хотя бы одна чистая (пустая) виртуальная функция. Чистой виртуальной называется компонентная функция, которая имеет следующее определение: virtual тип имя_функции (список_формальных_параметров) = 0;     В этой записи конструкция "= 0" называется "чистый спецификатор". Пример описания чистой виртуальной функции: virtual […]

Виртуальные функции (окончание)

    На этом шаге мы подведем итоги по использованию виртуальных функций.     Виртуальными могут быть не любые функции, а только нестатические компонентные функции какого-либо класса. После того как функция определена как виртуальная, ее повторное определение в производном классе (с тем же самым прототипом) создает в этом классе новую виртуальную функцию, причем спецификатор virtual может не […]

Виртуальные функции. Статическое и динамическое связывание

    На этом шаге мы рассмотрим организацию доступа к методам дочерних классовч ерез указатели на базовые классы.     Вернемся к упомянутому на предыдущем шаге примеру с фигурой в виде базового класса с названием figure. Пусть в этом классе определена компонентная функция void show(). Так как внешний вид фигуры в базовом классе еще не определен, то […]

Виртуальные функции

    На этом шаге мы рассмотрим поведение невиртуальных компонентных функций при наследовании.     К механизму виртуальных функций обращаются в тех случаях, когда в базовый класс необходимо поместить функцию, которая должна по-разному выполняться в производных классах. Точнее, по-разному должна выполняться не единственная функция из базового класса, а в каждом производном классе требуется свой вариант этой функции. […]

Множественное наследование. Виртуальные базовые классы

    На этом шаге мы рассмотрим использование виртуальных базовых классов.     Чтобы устранить дублирование объектов непрямого базового класса при множественном наследовании, этот базовый класс объявляют виртуальным. Для этого в списке базовых классов перед именем класса необходимо поместить ключевое слово virtual. Например, класс X будет виртуальным базовым классом при таком описании: class X { ... f(); […]