Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Za pomocą słowa kluczowego zastąpienia można wyznaczyć funkcje składowe, które zastępują funkcję wirtualną w klasie bazowej.
Składnia
function-declaration override;
Uwagi
zastępowanie jest wrażliwe na kontekst i ma specjalne znaczenie tylko wtedy, gdy jest używane po deklaracji funkcji składowej; w przeciwnym razie nie jest to zastrzeżone słowo kluczowe.
Przykład
Użyj przesłonięcia , aby zapobiec nieumyślnemu zachowaniu dziedziczenia w kodzie. W poniższym przykładzie pokazano, gdzie bez użycia przesłonięcia zachowanie funkcji składowej klasy pochodnej mogło nie być zamierzone. Kompilator nie emituje żadnych błędów dla tego kodu.
class BaseClass
{
virtual void funcA();
virtual void funcB() const;
virtual void funcC(int = 0);
void funcD();
};
class DerivedClass: public BaseClass
{
virtual void funcA(); // ok, works as intended
virtual void funcB(); // DerivedClass::funcB() is non-const, so it does not
// override BaseClass::funcB() const and it is a new member function
virtual void funcC(double = 0.0); // DerivedClass::funcC(double) has a different
// parameter type than BaseClass::funcC(int), so
// DerivedClass::funcC(double) is a new member function
};
W przypadku użycia przesłonięcia kompilator generuje błędy zamiast dyskretnie tworzyć nowe funkcje składowe.
class BaseClass
{
virtual void funcA();
virtual void funcB() const;
virtual void funcC(int = 0);
void funcD();
};
class DerivedClass: public BaseClass
{
virtual void funcA() override; // ok
virtual void funcB() override; // compiler error: DerivedClass::funcB() does not
// override BaseClass::funcB() const
virtual void funcC( double = 0.0 ) override; // compiler error:
// DerivedClass::funcC(double) does not
// override BaseClass::funcC(int)
void funcD() override; // compiler error: DerivedClass::funcD() does not
// override the non-virtual BaseClass::funcD()
};
Aby określić, że nie można zastąpić funkcji i nie można dziedziczyć klas, użyj końcowego słowa kluczowego.