class D{}; class A : public D{}; class B : public A {}; class C : public A {}; class Base { public: virtual void F1(A *p) { printf("Base A!\n"); } virtual void F1(B *p) { printf("Base B!\n"); } virtual void F1(C *p) { printf("Base C!\n"); } virtual void F1(D *p) { printf("Base D!\n"); } }; class Child : public Base { public: void F1(A *p) { printf("Child A!\n"); } void F1(B *p) { printf("Child B!\n"); } void F1(C *p) { printf("Child C!\n"); } //void F1(D *p) { printf("Child D!\n"); } }; void main() { Child c; D b; c.F1(&b); getch(); }