Mediumполиморфизм

Чем static polymorphism отличается от dynamic polymorphism?

1Постановка

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

2Решение

Dynamic polymorphism — через virtual функции и указатели/ссылки: выбор метода в runtime через vtable. Static polymorphism — через шаблоны и CRTP: выбор метода в compile-time.

// Dynamic: runtime dispatch, есть vtable overhead
struct Animal { virtual void speak() = 0; virtual ~Animal() = default; };
void makeSpeak(Animal& a) { a.speak(); }   // косвенный вызов

// Static: compile-time dispatch, инлайнится
template<class T>
void makeSpeak(T& a) { a.speak(); }        // прямой вызов, T::speak
  • Dynamic: heterogeneous collections, runtime flexibility, separable compilation; минусы — overhead, нет inlining;
  • Static: нет overhead, типобезопасность; минусы — code bloat, compile time растёт;
  • Выбор: для UI/plugins — dynamic; для containers/algorithms — static.

С C++20 concepts улучшают static polymorphism читаемостью.

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

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

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