Compartir vía


Advertencia C26433

La función debe marcarse con override

C++ Core Guidelines

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

No es necesario que el compilador indique claramente que una función virtual invalida su base. No especificar override puede causar problemas sutiles durante el mantenimiento si la especificación virtual cambia alguna vez en la jerarquía de clases. También reduce la legibilidad y hace que el comportamiento polimórfico de una interfaz sea menos obvio. Si una función está marcada claramente como override, el compilador puede comprobar la coherencia de la interfaz y ayudar a detectar problemas antes de manifestarse en tiempo de ejecución.

Notas

Esta regla no es aplicable a los destructores. Los destructores tienen sus propias características de virtualidad.

La regla no marca las funciones marcadas explícitamente como final, que es una variedad especial de especificador virtual.

Las advertencias se muestran en las definiciones de función, no en las declaraciones. Puede resultar confuso, ya que las definiciones no tienen especificadores virtuales, pero la advertencia sigue siendo correcta.

Nombre del análisis de código: OVERRIDE_EXPLICITLY

Ejemplo: Invalidación implícita

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

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

Consulte también

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