Назад к вопросам
Junior
116
questionbank

Что такое полиморфизм в контексте языков программирования C/C++?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Полиморфизм — это свойство объектов иметь множество форм или представлять несколько типов в иерархии наследования. Позволяет работать с объектами различных классов через общий интерфейс базового класса.

В C++ полиморфизм реализуется двумя основными способами:

  1. Полиморфизм времени компиляции (статический, Ad-hoc полиморфизм):

    • Реализуется с помощью перегрузки функций и перегрузки операторов.
    • Выбор конкретной реализующей функции или оператора происходит на этапе компиляции.
    // Пример перегрузки функций
    void print(int a) { /* ... */ }
    void print(double b) { /* ... */ }
    
  2. Полиморфизм времени выполнения (динамический, Subtype полиморфизм):

    • Реализуется с помощью виртуальных функций и указателей/ссылок на базовый класс.
    • Выбор конкретной реализующей функции происходит на этапе выполнения программы.
    • Требует наличия хотя бы одной виртуальной функции в базовом классе.
    • Использует таблицу виртуальных функций (vtable).
    // Пример динамического полиморфизма
    class Base {
    public:
        virtual void show() { /* Реализация в базовом классе */ }
    };
    
    class Derived : public Base {
    public:
        void show() override { /* Переопределенная реализация */ }
    };
    
    // Использование
    Base* ptr = new Derived();
    ptr->show(); // Вызывается Derived::show()
    

Полиморфизм позволяет писать более гибкий и расширяемый код, так как новые классы могут быть добавлены без изменения существующего кода, работающего с базовым классом.