Mit nicht-virtuellen Funktionen erbt man auch deren Implementierung (siehe 9.36). Die sollte man nicht umdefinieren.
Darüberhinaus, kann dann statische Bindung zu Überraschungen führen:
class base { public: void memberfun() { ... } }; class deriv : public base { public: void memberfun() { ... } // Besser nicht !!! }; deriv d; base *bp = &d; bp->memberfun(); // ist base::memberfun