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