Sobes.tech
Back to questions
Junior — Middle
93

Как отличить статический полиморфизм от динамического в объектно-ориентированном программировании?

Companies where asked
LestaGames

Answer from AI

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*

Таким образом, ключевое отличие — время выбора конкретной реализации: компиляция для статического и выполнение для динамического.