[23.8] Should a derived class redefine ("override") a member function that is non-virtual in a base class?
It's legal, but it ain't moral.
Experienced C++ programmers will sometimes redefine a non-virtual function
for efficiency (e.g., if the derived class implementation can make better use
of the derived class's resources) or to get around the hiding
rule. 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.