Sobes.tech
Junior

Какво е полиморфизъм в контекста на езиците за програмиране C/C++?

sobes.tech AI

Отговор от AI

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

В C++ полиморфизмът се реализира по два основни начина:

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

    • Реализира се чрез презареждане на функции и оператори.
    • Изборът на конкретната функция или оператор става по време на компилация.
    // Пример за презареждане на функции
    void print(int a) { /* ... */ }
    void print(double b) { /* ... */ }
    
  2. Динамичен, време на изпълнение, полиморфизъм (подтипов полиморфизъм):

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

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