1. Public inheritance implies a is-a relationship, that is, a derived class is one of the base classes, and any operation derived classes that can be performed by a base class should also be possible, if the derived class is different from the base class for the implementation of a function, then the function should be set to virtual. If a function in the base class is non-virtual, it should also mean that the derived class should inherit the implementation of the function and should not redefine it.
2. Because the Non-virtual function takes a static binding, if it is redefined, the non-virtual function that is called by the base-class pointer to the derived class object will be the base-class version, which is different from the expectation, so override is set to virtual. Do not override when set to Non-virtual.
Effective C + + clause 36 never redefine inherited non-virtual functions