构造函数中调用virtual 函数
Posted 水果无味~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造函数中调用virtual 函数相关的知识,希望对你有一定的参考价值。
#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()
在构造函数和析构函数中调用虚函数时 他们调用的函数是自己的类或基类中定义的函数 不会等到运行时 才决定调用自己还是派生的函数
以上是关于构造函数中调用virtual 函数的主要内容,如果未能解决你的问题,请参考以下文章
条款09:不要在构造过程和析构过程中调用 virtual 方法
条款09:不要在构造过程和析构过程中调用 virtual 方法
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段