Sobes.tech
Junior

Czym jest nadpisanie (override) w C++?

sobes.tech AI

Odpowiedź od AI

Przesłanianie (override) jest mechanizmem w programowaniu obiektowym, w którym klasa pochodna zapewnia własną specyficzną implementację wirtualnej funkcji zadeklarowanej w klasie bazowej. Przy wywołaniu takiej funkcji przez wskaźnik lub referencję do klasy bazowej, zostanie wykonana implementacja z rzeczywistego typu obiektu (pochodnego lub bazowego), w zależności od tego, czy funkcja została przesłonięta.

Główne punkty:

  • Dotyczy tylko wirtualnych funkcji.
  • Sygnatura (nazwa, typ zwracany, typy i liczba parametrów) funkcji przesłaniającej w klasie pochodnej musi dokładnie odpowiadać sygnaturze funkcji przesłanianej w klasie bazowej.
  • Słowo kluczowe override (od C++11) jest używane do wyraźnego wskazania zamiaru przesłonięcia funkcji. Kompilator sprawdzi, czy funkcja z klasy bazowej rzeczywiście istnieje z taką sygnaturą i zgłosi błąd, jeśli nie. To pomaga uniknąć literówek i czyni kod bardziej czytelnym.

Przykład:

class Base {
public:
    virtual void print() {
        // Implementacja klasy bazowej
        // ...
    }

    virtual void display(int x) const {
        // Inna funkcja wirtualna
        // ...
    }
};

class Derived : public Base {
public:
    // Przesłonięcie funkcji print z klasy Base
    void print() override {
        // Specyficzna implementacja dla Derived
        // ...
    }

    // To nie jest przesłonięcie, ponieważ brakuje const
    /*
    void display(int x) {
        // Błąd kompilacji z override
        // ...
    }
    */

    // Poprawne przesłonięcie funkcji display z klasy Base
    void display(int x) const override {
        // Specyficzna implementacja dla Derived
        // ...
    }
};