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