C26433 OVERRIDE_EXPLICITLYC26433 OVERRIDE_EXPLICITLY

Función debe estar marcada con overrideFunction should be marked with override

Directrices de núcleo de C++C++ Core Guidelines

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

No es necesario por compilador para declarar claramente que un método reemplaza su base.It is not required by compiler to clearly state that a method overrides its base. No se especifica 'override' puede causar problemas sutiles durante el mantenimiento si alguna vez cambia la especificación virtual 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 menos obvio comportamiento polimórfico de la interfaz.This also decreases readability and makes interface’s polymorphic behavior less obvious. Si el método está marcado claramente como 'override', habilita el compilador comprueba la coherencia de la interfaz y ayudan a detectar problemas antes de que se manifiestan en tiempo de ejecución.If method 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. Destructores tienen sus propias características con respecto a virtuality.Destructors have their own specifics regarding virtuality.
  2. La regla no marca métodos marcados explícitamente como 'final', que es en sí misma un tipo especial de virtual (especificador).The rule doesn’t flag methods explicitly marked as ‘final’, which is itself a special kind of virtual specifier.
  3. Las advertencias aparecen en las definiciones de método, no las declaraciones.Warnings show up on method definitions, not declarations. Esto puede resultar confuso porque las definiciones de no tener especificadores de virtuales, pero la advertencia es todavía legítimas.This may be confusing since definitions do not have virtual specifiers, but the warning is still legit.

Ejemplo: Reemplazar 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 reemplazo virtual, o finalC.128: Virtual functions should specify exactly one of virtual, override, or final