Compartir a través de


Advertencia C26435

La función virtual 'symbol' debe especificar exactamente uno de 'virtual', 'override' o 'final' (c.128)

C++ Core Guidelines

C.128: Las funciones virtuales deben especificar exactamente uno de los valores siguientes: "virtual", "override" o "final"

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

Consulte también

C.128: Las funciones virtuales deben especificar exactamente uno de los valores siguientes: "virtual", "override" o "final"