Warning C26433
Function should be marked with
override
C++ Core Guidelines
C.128: Virtual functions should specify exactly one of virtual, override, or final
It's not required by the compiler to clearly state that a virtual function overrides its base. Not specifying override
can cause subtle issues during maintenance if the virtual specification ever changes in the class hierarchy. It also lowers readability and makes an interface's polymorphic behavior less obvious. If a function is clearly marked as override
, the compiler can check the consistency of the interface, and help to spot issues before they manifest themselves at run time.
Notes
This rule isn't applicable to destructors. Destructors have their own virtuality specifics.
The rule doesn't flag functions explicitly marked as final
, which is itself a special variety of virtual specifier.
Warnings show up on function definitions, not declarations. It may be confusing, since definitions don't have virtual specifiers, but the warning is still correct.
Code analysis name: OVERRIDE_EXPLICITLY
Example: Implicit overriding
class Shape {
public:
virtual void Draw() = 0;
// ...
};
class Ellipse : public Shape {
public:
void Draw() { // C26433
//...
}
};
See also
C.128: Virtual functions should specify exactly one of virtual, override, or final