Namespaces
Variants

override specifier (since C++11)

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Virtual function
override specifier (C++11)
final specifier (C++11)
Special member functions
Templates
Miscellaneous

Gibt an, dass eine virtuelle Funktion eine andere virtuelle Funktion überschreibt.

Inhaltsverzeichnis

Syntax

Der Bezeichner override , falls verwendet, erscheint unmittelbar nach dem Deklarator in der Syntax einer Memberfunktionsdeklaration oder einer Memberfunktionsdefinition innerhalb einer Klassendefinition.

Deklarator virt-specifier-seq  (optional) pure-specifier  (optional) (1)
Deklarator virt-specifier-seq  (optional) Funktionskörper (2)
1) In einer Member-Funktionsdeklaration kann override in der virt-specifier-seq unmittelbar nach dem Deklarator und vor dem pure-specifier erscheinen, falls verwendet.
2) In einer Member-Funktionsdefinition innerhalb einer Klassendefinition, override kann 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 .

Erklärung

In einer Memberfunktionsdeklaration oder -definition stellt der override -Spezifizierer sicher, dass die Funktion virtuell ist und eine virtuelle Funktion von einer Basisklasse überschreibt. Das Programm ist fehlerhaft (es wird ein Kompilierzeitfehler generiert), falls dies nicht zutrifft.

override ist ein Bezeichner mit spezieller Bedeutung , wenn er nach Member-Funktionsdeklaratoren verwendet wird; andernfalls ist es kein reserviertes Schlüsselwort .

Schlüsselwörter

override

Beispiel

#include <iostream>
struct A
{
    virtual void foo();
    void bar();
    virtual ~A();
};
// Definitionen der Elementfunktionen von struct A:
void A::foo() { std::cout << "A::foo();\n"; }
A::~A() { std::cout << "A::~A();\n"; }
struct B : A
{
//  void foo() const override; // Fehler: B::foo überschreibt A::foo nicht
                               // (Signatur stimmt nicht überein)
    void foo() override; // OK: B::foo überschreibt A::foo
//  void bar() override; // Fehler: A::bar ist nicht virtual
    ~B() override; // OK: `override` kann auch auf virtuelle
                   // spezielle Elementfunktionen angewendet werden, z.B. Destruktoren
    void override(); // OK, Elementfunktionsname, kein reserviertes Schlüsselwort
};
// Definitionen der Elementfunktionen von 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, ruft die Elementfunktion `override()` auf
    int override{42}; // OK, definiert eine Integer-Variable
    std::cout << "override: " << override << '\n';
}

Ausgabe:

B::foo();
B::override();
override: 42
B::~B();
A::~A();

Siehe auch

final Spezifizierer (C++11) deklariert, dass eine Methode nicht überschrieben oder eine Klasse nicht abgeleitet werden kann