here B::disp() is not virtual , so i suggest dont use dynamic binding with B class pointer containing address of any derived object.Code:#include<iostream> using namespace std; class A { public: virtual void disp() { cout<<"A"; } }; class B: public A { public: void disp() { cout<<"B"; } }; class C: public B { public: virtual void disp() { cout<<"C"; } }; int main() { B *a = new C(); a->disp(); getchar(); return 0; }
but still output is C
i guess it has something to do with virtual A::disp() ??