bugprone-derived-method-shadowing-base-method

Finds derived class methods that shadow a (non-virtual) base class method.

In order to be considered “shadowing”, methods must have the same signature (i.e. the same name, same number of parameters, same parameter types, etc). Only checks public, non-templated methods.

The below example is bugprone because consumers of the Derived class will expect the reset method to do the work of Base::reset() in addition to extra work required to reset the Derived class. Common fixes include:

This is also a violation of the Liskov Substitution Principle.

struct Base {
  void reset() {/* reset the base class */};
};

struct Derived : public Base {
  void reset() {/* reset the derived class, but not the base class */};
};