Sdílet prostřednictvím


Upozornění C26435

Virtuální funkce "symbol" by měla přesně specifikovat jednu z "virtuálních", "přepsání" nebo "final" (c.128).

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

Aby se zlepšila čitelnost, měl by být druh virtuálního chování jasně uveden a bez zbytečné redundance. I když lze současně použít více virtuálních specifikátorů, je lepší určit jeden po druhém, aby se zdůraznil nejdůležitější aspekt virtuálního chování. Je zřejmé následující pořadí důležitosti:

  • prosté virtuální funkce;
  • virtuální funkce, která explicitně přepíše její základ;
  • virtuální funkce, která přepíše základ a poskytuje konečnou implementaci v aktuálním řetězci dědičnosti.

Notes

  • Toto pravidlo přeskočí destruktory, protože mají zvláštní pravidla týkající se virtuality.
  • 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 vhodné.

Název analýzy kódu: SINGLE_VIRTUAL_SPECIFICATION

Příklad: Redundantní specifikátor

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'.
        //...
    }
};

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