MediumООПvirtual

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

1Постановка

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

2Решение

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

class Shape {
public:
    virtual void describe() {           // обычная virtual — есть default
        std::cout << "a shape";
    }
    virtual double area() const = 0;    // pure virtual — обязаны override
    virtual ~Shape() = default;
};
// Shape s;   // ошибка: абстрактный класс
class Circle : public Shape {
    double area() const override { return 3.14 * r * r; }  // обязаны
};
  • Pure virtual с телом (= 0 { ... }) — редкость, для общей реализации через Base::f();
  • Контракт требует своё поведение → pure virtual; есть разумное default → обычная virtual;
  • override/final (C++11) помогают отловить ошибки переопределения.

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

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

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