#include<iostream> using namespace std; class myclass { public: virtual void hello(){cout<<"hello from myclass"<<endl;} virtual void bye(){cout<<"bye from myclass"<<endl;} }; class son:public myclass { public: void hello(){cout<<"hello from my son"<<endl;}; son(){hello();}; ~son(){bye();}; }; class grandson:public son { public: void hello(){cout<<"hello from grandson"<<endl;}; grandson(){cout<<"constructing grandson"<<endl;}; ~grandson(){cout<<"destructing grandson"<<endl;}; }; int main() { grandson gson; son*pson; pson=&gson; pson->hello(); return 0; }
运行结果
1 gson 先创建 son son() 中静态链接 son::hello() 2 gson 创建 3 gson->hello() 动态连接到 grandson::hello() 4 gson 的析构函数 5 gson 中 son 的析构,~son 链接到 myclass() ::bye()
在构造函数和析构函数中调用虚函数时 他们调用的函数是自己的类或基类中定义的函数 不会等到运行时 才决定调用自己还是派生的函数