Aviso C26435

A função virtual 'symbol' deve especificar exatamente um dos 'virtual', 'override' ou 'final' (c.128)

Diretrizes Principais do C++

C.128: funções virtuais devem especificar exatamente uma das seguintes opções: virtual, substituição ou final

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

Confira também

C.128: funções virtuais devem especificar exatamente uma das seguintes opções: virtual, substituição ou final