Чистая виртуальная функция — это член класса, объявленный в базовом классе только с прототипом и без реализации. Объявляется с использованием синтаксиса = 0 в конце объявления функции.
Класс, содержащий хотя бы одну чистую виртуальную функцию, называется абстрактным классом. Абстрактные классы нельзя инстанцировать напрямую — попытка создать объект абстрактного класса приведёт к ошибке компиляции.
Реализация чистых виртуальных функций должна быть предоставлена в производных классах. Любой производный класс, наследующий от абстрактного, обязан переопределить все чистые виртуальные функции, иначе он сам станет абстрактным.
class Base {
public:
virtual void foo() = 0; // чистая виртуальная функция
};
Base obj; // ошибка компиляции - нельзя инстанцировать абстрактный класс
class Derived : public Base {
public:
void foo() override {
// реализация здесь
}
};
Derived obj; // ок - Derived реализует все чистые виртуальные функции
Если производный класс не реализует все чистые виртуальные функции своего базового класса, он также останется абстрактным и не сможет быть инстанцирован.
Чистая виртуальная функция должна быть объявлена с синтаксисом = 0 и не может иметь никакой реализации в базовом классе.
Новый — ещё не проверен сообществом
Вы