To my surprise the private member function is called directly rom a public context!! What is the moral of the story here? That the private keyword is disrespected when you declare a member function sharing the same name as a public one in a base class? I guess I could go with that, otherwise there'd be ambiguity between private Foo::x and public BaseFoo::x within Foo itself. HOWEVER, should the compiler not at least warn me that it's going to drop my privates (so to speak) in this situation!? Seems a tad shady...Code:class EventHandler { public: virtual void handleEvent( ) { cout << "default handler" } } class MyEventHandler : public EventHandler { private: void handleEvent( ) { cout << "my handler" } } void handleEvents( EventHandler *eh ) { eh->handleEvent( ); } int main() { handleEvents( MyEventHandler() ); }