Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A função virtual «símbolo» deve especificar exatamente um dos «virtuais», «substituir» ou «final» (c.128)
Diretrizes principais do C++
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'.
//...
}
};