Что такое чисто виртуальный метод в C++?

«Что такое чисто виртуальный метод в C++?» — вопрос из категории ООП, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Чисто виртуальный метод (pure virtual method) — это метод, объявленный в базовом классе с синтаксисом = 0, который не имеет реализации в этом классе. Его цель — определить интерфейс, который обязаны реализовать все производные классы.

class Shape { // Абстрактный базовый класс
public:
    // Чисто виртуальный метод - интерфейс для вычисления площади
    virtual double area() const = 0;

    // Виртуальный деструктор - обязателен для полиморфных базовых классов
    virtual ~Shape() = default;
};

class Circle : public Shape {
    double radius;
public:
    Circle(double r) : radius(r) {}
    // Обязательная реализация чисто виртуального метода
    double area() const override {
        return 3.14159 * radius * radius;
    }
};

Ключевые моменты:

  • Класс, содержащий хотя бы один чисто виртуальный метод, становится абстрактным классом.
  • Нельзя создать экземпляр абстрактного класса: Shape s; // Ошибка компиляции.
  • Производный класс должен переопределить (override) все чисто виртуальные методы, иначе он также останется абстрактным.
  • Чисто виртуальные методы позволяют создавать полиморфные интерфейсы и обеспечивают контракт для наследников.