Partager via


Spécificateur de substitution

Vous pouvez utiliser le mot clé d' override pour indiquer les fonctions membres qui remplacent une fonction virtuelle dans une classe de base.

function-declaration override;

Notes

override est contextuel et a un ordre particulier uniquement lorsqu'il a utilisé après une déclaration de fonction membre ; sinon, il ne s'agit pas d'un mot clé réservé.

Exemple

Utilisation override d'éviter le comportement négligent d'héritage dans votre code.L'exemple suivant indique où, sans utiliser override, le comportement de la fonction membre de la classe dérivée ne peut avoir été prévu.Le compilateur n'émet aucune erreur de ce code.

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

};

Lorsque vous utilisez override, le compilateur génère des erreurs au lieu de créer en mode silencieux de nouvelles fonctions membres.

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

Pour spécifier que les fonctions ne peuvent pas être substituées et que les classes ne peuvent pas être héritées, utilisez le mot clé d' final .

Voir aussi

Référence

Spécificateur final

Mots clés C++

Autres ressources

C++ Type Names