Partilhar via


Aviso C26433

A função deve ser marcada com override

Diretrizes principais do C++

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

Não é exigido pelo compilador afirmar claramente que uma função virtual substitui sua base. Não especificar override pode causar problemas sutis durante a manutenção se a especificação virtual mudar na hierarquia de classes. Também reduz a legibilidade e torna o comportamento polimórfico de uma interface menos óbvio. Se uma função estiver claramente marcada como override, o compilador pode verificar a consistência da interface e ajudar a detetar problemas antes que eles se manifestem em tempo de execução.

Observações

Esta regra não se aplica aos destruidores. Os destruidores têm suas próprias especificidades de virtualidade.

A regra não sinaliza funções explicitamente marcadas como final, que é em si uma variedade especial de especificador virtual.

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 está correto.

Nome da análise de código: OVERRIDE_EXPLICITLY

Exemplo: Substituição implícita

class Shape {
public:
    virtual void Draw() = 0;
    // ...
};

class Ellipse : public Shape {
public:
    void Draw() { // C26433
        //...
    }
};

Ver também

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