Назад к вопросам
Junior — Middle
92
Как отличить статический полиморфизм от динамического в объектно-ориентированном программировании?
Компании, где спрашивали
LestaGames
Ответ от нейросети
sobes.tech AI
Статический и динамический полиморфизм отличаются временем разрешения вызовов методов:
-
Статический полиморфизм (compile-time polymorphism) реализуется через шаблоны (templates) и перегрузку функций/операторов. Решение о том, какую функцию вызвать, принимается на этапе компиляции.
-
Динамический полиморфизм (runtime polymorphism) достигается с помощью виртуальных функций и наследования. Вызов метода определяется во время выполнения программы через механизм виртуальной таблицы (vtable).
Пример динамического полиморфизма:
class Base {
public:
virtual void show() { std::cout << "Base" << std::endl; }
};
class Derived : public Base {
public:
void show() override { std::cout << "Derived" << std::endl; }
};
Base* obj = new Derived();
obj->show(); // Выведет "Derived"
Пример статического полиморфизма с шаблонами:
template<typename T>
void print(const T& value) {
std::cout << value << std::endl;
}
print(5); // Вызов для int
print("text"); // Вызов для const char*
Таким образом, ключевое отличие — время выбора конкретной реализации: компиляция для статического и выполнение для динамического.