Derived class method hides a virtual base
class method instead of overriding it
This defect occurs
when a derived class method has the same name and number of parameters
as a virtual base class method but:
The parameter lists differ in at least one parameter type.
The parameter lists differ in the presence or absence of qualifiers such
as const.
The derived class method hides the virtual base
class method instead of overriding it.
You might inadvertently hide the base class method instead of overriding it with the derived class method.
If the base class method is hidden and you use a derived class object to call the method with the base class parameters, the derived class method is called instead. For the parameters whose types do not match the arguments that you pass, a cast takes place if possible. Otherwise, a compilation failure occurs.
To override a base class virtual method with a derived class method, declare the methods by
using identical parameter lists. For instance, change the parameter type or add a
const qualifier if required.
In C++11 and later, you can declare intended overriding methods in the derived
class by using the specifier override. When you declare the
derived class methods by using the specifier override, the
compilation fails if the parameter lists of the base class method and the derived
class method are different. The derived class methods cannot hide base class methods
inadvertently and overriding of the base class virtual methods is ensured.
Otherwise, add the line using
to the derived class declaration. You can then access the base class method using an
object of the derived class.Base_class_name::method_name
| Group: Object oriented |
| Language: C++ |
| Default: On for handwritten code, off for generated code |
Command-Line Syntax: VIRTUAL_FUNC_HIDING |
| Impact: Medium |