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