Condividi tramite


Identificatore override

È possibile utilizzare la parola chiave di override per definire le funzioni membro che eseguono l'override di una funzione virtuale in una classe base.

function-declaration override;

Note

override è sensibile al contesto e ha un significato speciale solo quando utilizzava dopo una dichiarazione di funzione membro, in caso contrario, non è una parola chiave riservata.

Esempio

Utilizzo override impedire comportamento non intenzionale di ereditarietà nel codice.Di seguito viene illustrato dove, senza utilizzare override, il comportamento della funzione membro della classe derivata non può essere sia.Il compilatore non genera errori del codice.

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) override; // DerivedClass::funcC(double) has a different
                                               // parameter type than BaseClass::funcC(int), so
                                               // DerivedClass::funcC(double) is a new member function

};

Quando si utilizza override, il compilatore genera errori invece automaticamente di creare nuove funzioni membro.

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

Per specificare che le funzioni non possono essere sottoposte a override e le classi che non possono essere ereditate, utilizzare la parola chiave di finale.

Vedere anche

Riferimenti

Identificatore final

Parole chiave C++

Altre risorse

C++ Type Names