Avertissement C26433
La fonction doit être marquée avec
override
C++ Core Guidelines
Il n’est pas nécessaire au compilateur d’indiquer clairement qu’une fonction virtuelle remplace sa base. L’absence de override
spécification peut entraîner des problèmes subtils pendant la maintenance si la spécification virtuelle change jamais dans la hiérarchie de classes. Elle réduit également la lisibilité et rend le comportement polymorphe d’une interface moins évident. Si une fonction est clairement marquée comme override
, le compilateur peut vérifier la cohérence de l’interface et aider à repérer les problèmes avant qu’ils se manifestent au moment de l’exécution.
Notes
Cette règle n’est pas applicable aux destructeurs. Les destructeurs ont leurs propres spécificités de virtualité.
La règle n’indique pas explicitement les fonctions marquées comme final
étant , qui est elle-même une variété spéciale de spécificateur virtuel.
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 correct.
Nom de l’analyse du code : OVERRIDE_EXPLICITLY
Exemple : substitution implicite
class Shape {
public:
virtual void Draw() = 0;
// ...
};
class Ellipse : public Shape {
public:
void Draw() { // C26433
//...
}
};