由于多态原所以无论向上指针类型转换或者向下指针类型转换,则调用成员函数(两个类都实现了)无论调用的是哪个类的函数,遵循下面2个规则:
(1)调用虚函数时,因为是晚绑定(动态绑定),所以根据指针指向的对象的实际类型来决定。
(2)调用非虚函数,因为是早绑定(静态绑定),所以根据指针声明的对象类型来决定。
#include <iostream> #include <windows.h> using namespace std; class C{ public: void display1(){cout<<"c1"<<endl;} virtual void display2(){cout<<"c2"<<endl;} }; class D : public C{ public: void display1(){cout<<"d1"<<endl;} void display2(){cout<<"d2"<<endl;} }; class E : public D{ public: void display1(){cout<<"e1"<<endl;} void display2(){cout<<"e2"<<endl;} }; int main(int argc, char* argv[]) { D *pd = (D*)new C(); pd->display1(); pd->display2(); system("pause"); return 0; }