override-Spezifizierer (seit C++11)
Gibt an, dass eine virtuelle Funktion eine andere virtuelle Funktion überschreibt.
Inhalt |
[bearbeiten] Syntax
Der Bezeichner override erscheint, falls verwendet, unmittelbar nach dem Deklarator in der Syntax einer Member-Funktionsdeklaration oder einer Member-Funktionsdefinition innerhalb einer Klassendefinition.
| Deklarator virt-specifier-seq (optional) pure-specifier (optional) | (1) | ||||||||
| Deklarator virt-specifier-seq (optional) function-body | (2) | ||||||||
override in virt-specifier-seq unmittelbar nach dem Deklarator und vor dem pure-specifier, falls verwendet, erscheinen.override in virt-specifier-seq unmittelbar nach dem Deklarator und direkt vor function-body erscheinen.In beiden Fällen ist virt-specifier-seq, falls verwendet, entweder override oder final, oder final override oder override final.
[bearbeiten] Erklärung
In einer Member-Funktionsdeklaration oder -definition stellt der override-Spezifizierer sicher, dass die Funktion virtuell ist und eine virtuelle Funktion einer Basisklasse überschreibt. Das Programm ist ill-formed (ein Kompilierungsfehler wird generiert), wenn dies nicht der Fall ist.
override ist ein Bezeichner mit besonderer Bedeutung, wenn er nach Member-Funktionsdeklaratoren verwendet wird; andernfalls ist es kein reserviertes Schlüsselwort.
[bearbeiten] Schlüsselwörter
[bearbeiten] Beispiel
#include <iostream> struct A { virtual void foo(); void bar(); virtual ~A(); }; // member functions definitions of struct A: void A::foo() { std::cout << "A::foo();\n"; } A::~A() { std::cout << "A::~A();\n"; } struct B : A { // void foo() const override; // Error: B::foo does not override A::foo // (signature mismatch) void foo() override; // OK: B::foo overrides A::foo // void bar() override; // Error: A::bar is not virtual ~B() override; // OK: `override` can also be applied to virtual // special member functions, e.g. destructors void override(); // OK, member function name, not a reserved keyword }; // member functions definitions of struct B: void B::foo() { std::cout << "B::foo();\n"; } B::~B() { std::cout << "B::~B();\n"; } void B::override() { std::cout << "B::override();\n"; } int main() { B b; b.foo(); b.override(); // OK, invokes the member function `override()` int override{42}; // OK, defines an integer variable std::cout << "override: " << override << '\n'; }
Ausgabe
B::foo(); B::override(); override: 42 B::~B(); A::~A();
[bearbeiten] Siehe auch
final-Spezifizierer (C++11) |
deklariert, dass eine Methode nicht überschrieben werden kann oder eine Klasse nicht von ihr abgeleitet werden kann |