Partilhar via


Aviso C26435

A função virtual «símbolo» deve especificar exatamente um dos «virtuais», «substituir» ou «final» (c.128)

Diretrizes principais do C++

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

Para melhorar a legibilidade, o tipo de comportamento virtual deve ser declarado claramente e sem redundância desnecessária. Embora vários especificadores virtuais possam ser usados simultaneamente, é melhor especificar um de cada vez para enfatizar o aspeto mais importante do comportamento virtual. Verifica-se a seguinte ordem de importância:

  • função virtual simples;
  • função virtual que substitui explicitamente a sua base;
  • Função virtual que substitui sua base e fornece a implementação final na cadeia de herança atual.

Observações

  • Esta regra ignora os destruidores, uma vez que eles têm regras especiais em relação à virtualidade.
  • Os avisos aparecem em definições de função, não em declarações. Pode ser confuso, já que as 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'.
        //...
    }
};

Ver também

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