C26433 OVERRIDE_EXPLICITLYC26433 OVERRIDE_EXPLICITLY

Función debe marcarse con overrideFunction should be marked with override

C++ Core GuidelinesC++ Core Guidelines

C.128: Funciones virtuales deben especificar exactamente uno de virtual, invalidación, o finalC.128: Virtual functions should specify exactly one of virtual, override, or final

No es necesario por compilador para declarar claramente que una función virtual invalida su base.It is not required by compiler to clearly state that a virtual function overrides its base. No se especifica 'override' puede causar problemas sutiles durante el mantenimiento si la especificación virtual cambia en algún momento en la jerarquía de clases.Not specifying ‘override’ can cause subtle issues during maintenance if the virtual specification ever changes in the class hierarchy. Esto también reduce la legibilidad y hace un comportamiento polimórfico de la interfaz menos obvio.This also decreases readability and makes interface’s polymorphic behavior less obvious. Si la función está claramente marcada como 'override', habilita el compilador comprobar la coherencia de la interfaz y ayudar a detectar problemas antes de que se manifiestan en tiempo de ejecución.If function is clearly marked as ‘override’, it enables compiler to check consistency of the interface and help to spot issues before they manifest themselves at runtime.

NotasNotes

  1. Esta regla no es aplicable a los destructores.This rule is not applicable to destructors. Los destructores tener sus propios especificidades con respecto a virtuality.Destructors have their own specifics regarding virtuality.
  2. La regla no marca las funciones marcadas explícitamente como 'final', que es un tipo especial de virtual (especificador).The rule doesn’t flag functions explicitly marked as ‘final’, which is itself a special kind of virtual specifier.
  3. Las advertencias se muestran en las definiciones de función, no las declaraciones.Warnings show up on function definitions, not declarations. Esto puede resultar confuso, puesto que las definiciones no tener especificadores virtuales, pero la advertencia es que todavía.This may be confusing since definitions do not have virtual specifiers, but the warning is still legit.

Ejemplo: Sustitución implícitaExample: Implicit overriding

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

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

Vea tambiénSee Also

C.128: Funciones virtuales deben especificar exactamente uno de virtual, invalidación, o finalC.128: Virtual functions should specify exactly one of virtual, override, or final