虚表指针
来源:互联网 发布:linux制作u盘启动盘 编辑:程序博客网 时间:2024/05/16 09:11
class Base;
Base *pBase;
class Base
{
public:
Base()
{
pBase = this;
}
virtual void Fn()
{
cout << "Call Base" << endl;
}
protected:
private:
};
class Derive :public Base
{
//public:
void Fn()
{
cout << "Call Derived" << endl;
}
};
Derive aa;
int _tmain(int argc, _TCHAR* argv[])
{
pBase->Fn();
return 0;
}
在Base类的构造函数中将this指针保存到pbase全局变量中,再定义全局对象aa,即调用derived aa时,要调用基类的构造函数先构造基类部分,然后是子类的部分由这两部分拼接出完整的对象aa,这个this指针指向的当然也就是aa对象,那么我们在main()函数中利用pbase调用fn(),因为pbase实际指向的是aa对象,而aa对象内部的虚表指针指向的是自身的虚表,最终调用的当然是derived类中的fn()函数。只有在子类的构造函数调用完毕后,整个虚表才构建完毕,此时才能真正应用C++的多态性。
换句话说我们不要在构造函数中去调用虚函数,当然如果你只是想调用本类的函数,也无所谓。
- 虚函数表指针、虚基类表指针
- 虚函数表指针、虚基类表指针
- 盗窃虚表指针
- 虚函数表 & 指针
- 虚表指针
- 虚表指针
- 虚表指针初始化
- 如何获取虚表指针
- this指针与虚表
- 获取虚函数表指针
- 虚指针
- 虚指针
- 虚函数、虚指针和虚表
- 虚函数、虚指针和虚表
- 虚函数、虚指针和虚表
- 虚函数、虚指针和虚表
- 虚函数、虚指针和虚表
- 虚函数、虚指针和虚表
- 正则表达式符号解释1
- 戏说Singleton模式
- 判断链表是否带环
- 英文面试自我介绍范文
- 关于~/目录
- 虚表指针
- 如何取得结构变量的偏移地址
- c中的移位操作
- Study-Hard-传输层协议UDP-简析(不断更新)
- 类的构造顺序
- 字符地址是否相等
- 数组指针
- 二进制转换时的最高位处理
- Windows程序的入口是哪里?写出Windows消息机制的流程