Advertencia C26435
La función virtual 'symbol' debe especificar exactamente uno de 'virtual', 'override' o 'final' (c.128)
C++ Core Guidelines
Para mejorar la legibilidad, el tipo de comportamiento virtual debe indicarse claramente y sin redundancia innecesaria. Aunque se pueden usar simultáneamente varios especificadores virtuales, es mejor especificar uno cada vez para resaltar el aspecto más importante del comportamiento virtual. El orden de importancia es el siguiente:
- función virtual sin formato;
- función virtual que invalida explícitamente su base;
- función virtual que invalida su base y proporciona la implementación final en la cadena de herencia actual.
Notas
- Esta regla omite los destructores, ya que tienen reglas especiales con respecto a la virtualidad.
- Las advertencias se muestran en las definiciones de función, no en las declaraciones. Esto puede resultar confuso, ya que las definiciones no tienen especificadores virtuales, pero la advertencia sigue siendo adecuada.
Nombre de análisis de código: SINGLE_VIRTUAL_SPECIFICATION
Ejemplo: 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'.
//...
}
};