Абстрактный класс является классом, который может использоваться только в качестве базового для других классов. Абстрактный класс содержит одну или несколько чистых виртуальных функций. Чистая виртуальная функция может рассматриваться как встроенная функция, тело которой определено как =0 (чистый спецификатор). Для чистой виртуальной функции не нужно приводить действительное определение; предполагается, что она переопределяется в производных классах.
К абстрактным классам применимы следующие правила:
• абстрактный класс не может использоваться в качестве типа аргу-мента функции или типа возвращаемого значения;
• абстрактный класс нельзя использовать в явном преобразовании;
• нельзя определить представитель абстрактного класса (локальную/глобальную переменную или элемент данных);
• можно определять указатель или ссылку на абстрактный класс;
• если класс, производный от абстрактного, не определяет все чистые виртуальные функции абстрактного класса, он также является абстрактным.
Например:
class Bird
{
public:
void virtual Sing() = 0;
};
//класс Eagle – также абстрактный
class Eagle : public Bird
{};
// GoldenEagle – не является абстрактным
class GoldenEagle: public Bird
{
void Sign()
{…}
};
Важным примером использования абстрактных классов является предоставление интерфейса с полным отсутствием деталей реализации. Например, операционная система может скрыть детали реализации драйверов устройств за интерфейсом абстрактного класса. |