Aviso C26435
A função virtual 'symbol' deve especificar exatamente um dos 'virtual', 'override' ou 'final' (c.128)
Diretrizes Principais do C++
Para melhorar a legibilidade, o tipo de comportamento virtual deve ser declarado de maneira clara e sem redundância desnecessária. Embora vários especificadores virtuais possam ser usados simultaneamente, é melhor especificar um de cada vez para enfatizar o aspecto mais importante do comportamento virtual. A seguinte ordem de importância é aparente:
- função virtual simples;
- função virtual que substitui explicitamente sua base;
- virtual que substitui sua base e fornece a implementação final na cadeia de herança atual.
Observações
- Essa regra ignora os destruidores, pois eles têm regras especiais sobre virtualidade.
- Avisos aparecem em definições de função, não em declarações. Isso pode ser confuso, já que definições não têm especificadores virtuais, mas o aviso ainda é apropriado.
Nome da análise de código: SINGLE_VIRTUAL_SPECIFICATION
Exemplo: especificador redundante
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'.
//...
}
};