C26435 SINGLE_VIRTUAL_SPECIFICATIONC26435 SINGLE_VIRTUAL_SPECIFICATION

« Fonction doit spécifier un seul de 'Virtual', 'override' ou 'final' ».“Function should specify exactly one of 'virtual', 'override', or 'final'.”

Instructions C++ CoreC++ Core Guidelines

C.128 : Les fonctions virtuelles doivent spécifier exactement un des virtuel, override, ou finalC.128: Virtual functions should specify exactly one of virtual, override, or final

Pour améliorer la lisibilité du type de comportement virtuel doit être établi clairement et sans les redondances inutiles.To improve readability the kind of virtual behavior should be stated clearly and without unnecessary redundancy. Même si les spécificateurs virtuels peuvent être utilisés simultanément, il est préférable spécifier l’une à la fois pour mettre en évidence l’aspect le plus important de comportement virtuel.Even though virtual specifiers can be used simultaneously, it is better to specify one at a time to emphasize the most important aspect of virtual behavior. L’ordre suivant d’importance est évident :The following order of importance is apparent:

  • simple méthode virtuelle ;plain virtual method;
  • méthode virtuelle qui substitue explicitement de base ;virtual method which explicitly overrides its base;
  • méthode virtuelle qui substitue sa base et fournit l’implémentation finale dans la chaîne d’héritage en cours.virtual method which overrides its base and provides the final implementation in current inheritance chain.

NotesNotes

  • Cette règle ignore les destructeurs car ils ont des règles particulières concernant virtuality.This rule skips destructors since they have special rules regarding virtuality.
  • Avertissements s’affichent dans les définitions de méthode, pas les déclarations.Warnings show up on method definitions, not declarations. Cela peut prêter à confusion, car les définitions n’ont pas les spécificateurs virtuels, mais l’avertissement est toujours légitime.This may be confusing since definitions do not have virtual specifiers, but the warning is still legitimate.

Exemple : Spécificateur redondantExample: Redundant specifier

class Ellipse : public Shape {
public:
    void Draw() override {
        //...
    }
};

class Circle : public Ellipse {
public:
    void Draw() override final { // C26435, only 'final' is necessary.
        //...
    }
};

Voir aussiSee Also

C.128 : Les fonctions virtuelles doivent spécifier exactement un des virtuel, override, ou finalC.128: Virtual functions should specify exactly one of virtual, override, or final