Sdílet prostřednictvím


Upozornění C26433

Funkce by měla být označena override

C++ Core Guidelines

C.128: Virtuální funkce by měly přesně určovat jednu z virtuálních, přepisovaných nebo konečných

Kompilátor to nevyžaduje, aby jasně uvedl, že virtuální funkce přepíše její základ. Nezadání override může způsobit drobné problémy během údržby, pokud se virtuální specifikace někdy změní v hierarchii tříd. Zároveň snižuje čitelnost a ztěžuje polymorfní chování rozhraní méně zřejmé. Pokud je funkce jasně označená jako override, kompilátor může zkontrolovat konzistenci rozhraní a pomoci odhalit problémy předtím, než se projeví v době běhu.

Notes

Toto pravidlo se nevztahuje na destruktory. Destruktory mají vlastní specifika virtuality.

Pravidlo neoznačí funkce explicitně označené jako final, což je sama o sobě zvláštní škálou virtuálních specifikátorů.

Upozornění se zobrazují u definic funkcí, ne deklarací. Může to být matoucí, protože definice nemají virtuální specifikátory, ale upozornění je stále správné.

Název analýzy kódu: OVERRIDE_EXPLICITLY

Příklad: Implicitní přepsání

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

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

Viz také

C.128: Virtuální funkce by měly přesně určovat jednu z virtuálních, přepisovaných nebo konečných