EasyООП

Что такое pure virtual функция и абстрактный класс?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Pure virtual функция: virtual void f() = 0; — у базового класса нет реализации, каждый конкретный производный обязан её переопределить. Класс с хотя бы одной pure virtual — абстрактный, объект создать нельзя.

class Shape {
public:
    virtual double area() const = 0;   // pure virtual
    virtual ~Shape() = default;
};
// Shape s;   // ошибка: абстрактный класс

class Circle : public Shape {
    double r_;
public:
    double area() const override { return 3.14 * r_ * r_; }
};
Shape* p = new Circle;   // OK: указатель на абстрактный
  • Производный класс, не переопределивший все pure virtual, остаётся абстрактным;
  • Pure virtual с телом (= 0 { ... }) — редкость, для общей реализации через Base::f();
  • Абстрактные классы задают интерфейсы, подобно интерфейсам в Java/C#.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.