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 подскажет развёрнутый ответ в реальном времени.