class A { public: virtual void f(void) { cout<<"A"<<endl; } }; //-------------------------------------------------------- class B: public A { private: virtual void f(void) { cout<<"B"<<endl; } }; //--------------------------------------------------------int main(void) { A* a = new B; a->f(); // хотелось что-бы не вызывалось т.к. приват в В ((В*)а)->f(); // не компилится, т.к. приват в В // но если иерархия очень // большая, то трудно определить к чему // приводить. return 0; } //-------------------------------------------------------- Консоль: В Есть такие ситуации при создании иерархии классов, когда во всей иерархии используется какой-нибудь метод или поле, а вот в одном классе его не надо использовать. Но при этом скрыть его использование никак нельзя. Кто знает какие-нибудь тонкости..?