EasyООП
Что такое abstract class vs concrete class?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Concrete class — можно создать объект (есть реализация всех методов). Abstract class — нельзя создать объект, есть хотя бы одна pure virtual функция; служит интерфейсом для производных.
class Shape { // abstract
public:
virtual double area() const = 0;
virtual ~Shape() = default;
};
class Circle : public Shape { // concrete — переопределил все pure virtual
double r_;
public:
double area() const override { return 3.14 * r_ * r_; }
};
// Shape s; // ошибка: абстрактный
Shape* p = new Circle; // OK: указатель на абстрактный
Circle c; // OK: concrete- Производный класс, не переопределивший все pure virtual, остаётся абстрактным;
- Идиома: abstract класс как «pure interface» (все методы pure virtual, без данных) для контрактов;
- Design principle: program to interface, not implementation — используйте abstract class как тип в API.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.