Warnung C26433

Funktion sollte mit override

C++ Core Guidelines

C.128: Virtuelle Funktionen sollten genau eine der virtuellen Funktionen, außer Kraft setzen oder endgültig angeben.

Es ist nicht erforderlich, dass der Compiler eindeutig angibt, dass eine virtuelle Funktion ihre Basis überschreibt. Wenn sich die virtuelle Spezifikation jemals in der Klassenhierarchie ändert, kann dies override zu subtilen Problemen während der Standard Tenance führen. Es verringert auch die Lesbarkeit und macht das polymorphe Verhalten einer Schnittstelle weniger offensichtlich. Wenn eine Funktion eindeutig als overridegekennzeichnet ist, kann der Compiler die Konsistenz der Schnittstelle überprüfen und Probleme erkennen, bevor sie sich zur Laufzeit manifestieren.

Hinweise

Diese Regel gilt nicht für Destruktoren. Destruktoren haben ihre eigenen Virtualitätsspezifischen.

Die Regel kennzeichnet keine explizit als gekennzeichneten finalFunktionen, die selbst eine besondere Vielfalt von virtuellen Bezeichnern sind.

Warnungen werden für Funktionsdefinitionen und keine Deklarationen angezeigt. Es kann verwirrend sein, da Definitionen keine virtuellen Bezeichner haben, aber die Warnung ist immer noch korrekt.

Codeanalysename: OVERRIDE_EXPLICITLY

Beispiel: Implizites Überschreiben

class Shape {
public:
    virtual void Draw() = 0;
    // ...
};

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

Siehe auch

C.128: Virtuelle Funktionen sollten genau eine der virtuellen Funktionen, außer Kraft setzen oder endgültig angeben.