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
// ...
}
};