Partager via


Avertissement C26435

La fonction virtuelle 'symbol' doit spécifier exactement l’une des valeurs 'virtual', 'override' ou 'final' (c.128)

C++ Core Guidelines

C.128 : Les fonctions virtuelles doivent spécifier exactement l’une des fonctions virtuelles, remplacées ou finales

Pour améliorer la lisibilité, le type de comportement virtuel doit être indiqué clairement et sans redondance inutile. Même si plusieurs spécificateurs virtuels peuvent être utilisés simultanément, il est préférable de spécifier un à la fois pour souligner l’aspect le plus important du comportement virtuel. L’ordre d’importance suivant est apparent :

  • fonction virtuelle simple ;
  • fonction virtuelle qui remplace explicitement sa base ;
  • fonction virtuelle qui remplace sa base et fournit l’implémentation finale dans la chaîne d’héritage actuelle.

Notes

  • Cette règle ignore les destructeurs, car ils ont des règles spéciales concernant la virtualité.
  • Les avertissements s’affichent sur les définitions de fonction, et non sur les déclarations. Il peut être confus, car les définitions n’ont pas de spécificateurs virtuels, mais l’avertissement est toujours approprié.

Nom de l’analyse du code : SINGLE_VIRTUAL_SPECIFICATION

Exemple : spécificateur redondant

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

class Circle : public Ellipse {
public:
    void Draw() override final { // C26435, only 'final' is necessary.
        //...
    }
    virtual void DrawCircumference() final { // C26435, should be neither 'virtual' nor 'final'.
        //...
    }
};

Voir aussi

C.128 : Les fonctions virtuelles doivent spécifier exactement l’une des fonctions virtuelles, remplacées ou finales