Чисто виртуальный метод = 0
Чисто виртуальный метод = 0 объявляет виртуальный
метод без реализации. Такой метод не имеет тела и служит
только для определения интерфейса в базовом классе. Класс,
содержащий хотя бы один чисто виртуальный метод, становится
абстрактным: нельзя создать его объект, но можно использовать
указатель или ссылку на него. Наследники обязаны переопределить
все чисто виртуальные методы, иначе они тоже останутся
абстрактными. Синтаксис объявления включает ключевое слово
virtual, сигнатуру метода и завершающее = 0.
Синтаксис
virtual return_type name(params) = 0;
Пример
Давайте объявим абстрактный класс Shape с чисто
виртуальным методом area, а затем создадим наследника
Rectangle, который переопределяет этот метод:
#include <iostream>
using namespace std;
class Shape
{
public:
virtual double area() = 0;
};
class Rectangle : public Shape
{
private:
double width;
double height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
double area() override
{
return width * height;
}
};
int main()
{
Rectangle res(3.0, 4.0);
cout << res.area() << endl;
return 0;
}
Результат выполнения кода:
12
Пример
Давайте продемонстрируем полиморфизм через указатель на базовый абстрактный класс, вызвав переопределённый метод у объекта наследника:
#include <iostream>
using namespace std;
class Animal
{
public:
virtual void speak() = 0;
};
class Dog : public Animal
{
public:
void speak() override
{
cout << "woof" << endl;
}
};
int main()
{
Animal* ptr = new Dog();
ptr->speak();
delete ptr;
return 0;
}
Результат выполнения кода:
"woof"
Смотрите также
-
ключевое слово
virtual,
которое объявляет виртуальный метод -
спецификатор
override,
который проверяет переопределение метода -
спецификатор
final,
который запрещает дальнейшее переопределение -
понятие
абстрактный класс,
который содержит чисто виртуальные методы