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