Should a derived class replace (“override”) a non-virtual function from a base class?
It’s legal, but it ain’t moral. Experienced C++ programmers will sometimes redefine a non-virtual function (e.g., the derived class implementation might make better use of the derived class’s resources for efficiency), or to get around the hiding rule[23.3]. However the client-visible effects must be identical, since non-virtual functions are dispatched based on the static type of the pointer/reference rather than the dynamic type of the pointed-to/referenced object.