Sobes.tech
Junior

Czym jest polimorfizm w kontekście języków programowania C/C++?

sobes.tech AI

Odpowiedź od AI

Polimorfizm to właściwość obiektów polegająca na posiadaniu wielu form lub reprezentowaniu kilku typów w hierarchii dziedziczenia. Umożliwia pracę z obiektami różnych klas za pomocą wspólnego interfejsu klasy bazowej.

W C++ polimorfizm realizowany jest na dwa główne sposoby:

  1. Polimorfizm czasu kompilacji (statyczny, ad-hoc):

    • Implementowany za pomocą przeciążania funkcji i operatorów.
    • Wybór konkretnej funkcji lub operatora odbywa się na etapie kompilacji.
    // Przykład przeciążania funkcji
    void print(int a) { /* ... */ }
    void print(double b) { /* ... */ }
    
  2. Polimorfizm czasu wykonania (dynamiczny, podtypowy):

    • Implementowany za pomocą funkcji wirtualnych i wskaźników/odwołań do klasy bazowej.
    • Wybór konkretnej funkcji, która zostanie wywołana, odbywa się w czasie wykonywania programu.
    • Wymaga, aby w klasie bazowej była co najmniej jedna funkcja wirtualna.
    • Używa tabeli funkcji wirtualnych (vtable).
    // Przykład polimorfizmu dynamicznego
    class Base {
    public:
        virtual void show() { /* Implementacja w klasie bazowej */ }
    };
    
    class Derived : public Base {
    public:
        void show() override { /* Nadpisana implementacja */ }
    };
    
    // Użycie
    Base* ptr = new Derived();
    ptr->show(); // Wywołuje Derived::show()
    

Polimorfizm pozwala pisać bardziej elastyczny i rozszerzalny kod, ponieważ nowe klasy mogą być dodawane bez zmiany istniejącego kodu pracującego z klasą bazową.