Freigeben über


override-Bezeichner

Sie können die Außerkraftsetzung Schlüsselwort (keyword) verwenden, um Memberfunktionen festzulegen, die eine virtuelle Funktion in einer Basisklasse überschreiben.

Syntax

function-declaration override;

Hinweise

Außerkraftsetzung ist kontextsensitiv und hat eine besondere Bedeutung nur, wenn sie nach einer Memberfunktionsdeklaration verwendet wird. Andernfalls handelt es sich nicht um eine reservierte Schlüsselwort (keyword).

Beispiel

Verwenden Sie Außerkraftsetzung , um versehentliches Vererbungsverhalten in Ihrem Code zu verhindern. Das folgende Beispiel zeigt, wo das Verhalten der Memberfunktion der abgeleiteten Klasse möglicherweise nicht beabsichtigt wurde, ohne außer Kraft zu setzen. Der Compiler gibt keinen Fehler für diesen Code aus.

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

Wenn Sie die Außerkraftsetzung verwenden, generiert der Compiler Fehler, anstatt neue Memberfunktionen im Hintergrund zu erstellen.

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()
};

Um anzugeben, dass Funktionen nicht außer Kraft gesetzt werden können und dass Klassen nicht geerbt werden können, verwenden Sie die endgültige Schlüsselwort (keyword).

Siehe auch

final-Bezeichner
Schlüsselwörter