- Инкапсуляция и расширяемость типов
- Наследование
- Полиморфизм
- Перегрузка
- Виртуальные функции
- Статические члены класса
- Шаблоны функций
- Шаблоны классов
- Абстрактные классы
Абстрактные классы и чисто виртуальные функции
Абстрактные классы предназначены для создания обобщенных сущностей, на основе которых в дальнейшем предполагается создавать более конкретные производные классы. Абстрактный класс – это класс, который может использоваться лишь в качестве базового класса для некоторого другого класса, поэтому невозможно создать объект типа абстрактного класса
Класс, содержащий хотя бы одну чисто виртуальную функцию, является абстрактным. Поэтому, классы, производные от абстрактного класса, должны реализовать все его чисто виртуальные функции, иначе они также будут абстрактными классами.
Виртуальная функция объявляется как "чистая" с помощью синтаксиса спецификатора-чистоты. Рассмотрим в качестве примера класс CAnimal, который создаётся только для того, чтобы предоставлять общие функции – сами объекты типа CAnimal имеют слишком общий характер для практического применения. Таким образом, класс CAnimal является хорошим кандидатом в абстрактный класс:
class CAnimal |
Здесь функция Sound() является чисто виртуальной, потому что она объявлена со спецификатором чисто виртуальной функции PURE (=0).
Чисто виртуальными функциями являются только такие виртуальные функции, для которых указан спецификатор чистоты PURE, а именно: (=NULL) или (=0). Пример объявления и использования абстрактного класса:
class CAnimal
|
Ограничения на использование абстрактных классов
При вызове конструктором абстрактного класса чистой виртуальной функции (прямо или косвенно) результат будет неопределённым.
//+------------------------------------------------------------------+
|
Однако конструкторы и деструкторы абстрактных классов могут вызывать другие функции-члены.