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