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