MediumООП

Чем polymorphic класс отличается от non-polymorphic?

1Постановка

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

2Решение

Polymorphic класс — имеет хотя бы одну virtual функцию (или наследует такой): есть vtable, объекты содержат vptr, dynamic_cast/typeid работают. Non-polymorphic — без virtual: нет vtable, sizeof = сумма членов (+padding).

struct Poly {                 // polymorphic
    virtual void f() {}
    virtual ~Poly() = default;
};
struct Plain { int x; };      // non-polymorphic

Poly* p = /* ... */;
auto* d = dynamic_cast<Derived*>(p);  // OK для polymorphic
// dynamic_cast на Plain — compile-ошибка
typeid(p).name();   // runtime-тип для polymorphic, статический для Plain
  • Нужна dynamic dispatch через указатель на базу → polymorphic;
  • Класс используется конкретно или через шаблоны → non-polymorphic (экономит память, позволяет inlining);
  • Mixed подход: polymorphic интерфейс для plugin boundary, non-polymorphic реализация внутри.

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

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

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