Чистые виртуальные функции и абстрактные классы
Чистая виртуальная функция — это виртуальная функция без тела функции. Что значит не иметь функционального тела? Это функция, определенная следующим образом:
имя функции виртуального возвращаемого значения (формальный параметр) = 0;
Как видите, определения виртуального и виртуальной функции одинаковы, с добавлением =0 в конце. Указывает на отсутствие тела функции, это чисто виртуальная функция . Класс, содержащий чистые виртуальные функции, является абстрактным классом . В абстрактном классе есть хотя бы одна чисто виртуальная функция.
Существование абстрактных классов предназначено для обеспечения высокоабстрактного унифицированного интерфейса с внешним миром, а затем использования их различных методов посредством полиморфных функций. Это одна из основных идей объектно-ориентированного проектирования и разработки программного обеспечения C++.
Характеристики абстрактных классов суммируются следующим образом:
1. Абстрактный класс не может создавать экземпляр объекта. Его можно использовать только в качестве базового класса, чтобы позволить производным классам выполнять в нем чистые виртуальные функции, а затем создавать его экземпляры и использовать.
2. Производный абстрактный класс все еще может не полностью выполнять чистые виртуальные функции базового класса и продолжать оставаться производным как абстрактный класс. Пока не дано определение всех чистых виртуальных функций, они становятся конкретным классом, и объект не может быть создан.
3. Поскольку абстрактные классы являются абстрактными и не могут быть воплощены, их нельзя использовать в качестве типов параметров, возвращаемых значений или типов приведения.
4. Продолжая третий пункт, абстрактные классы могут определять указатель или ссылочный тип, указывающий на его производный класс, для достижения полиморфных функций.