赞
踩
虚函数表是一块连续的内存,每个内存单元中记录一个JMP指令的地址。
于是顺序如下:
1.构造父类;
2. 将子类虚函数表地址给子类对象;
3. 初始化列表进行初始化;
4. 构造函数本体;
- 构造父类的时候,也是这样一个步骤;
- 最终的 虚函数表地址,被最外面的子类的 虚函数表地址 所覆盖;
class base { public: virtual void func() { cout << "base::func()" << endl; } base() { func(); cout << "base()" << endl; } }; class person : public base { public: int *a; virtual void func() { cout << "person::func()" << endl; } person():a(0) { func(); cout << "person()" << endl; } ~person() { func(); cout << "~person()" << endl; } }; int main() { person p1; return 0; }
person
类,先去构造父类base
类:base
类,先将父类base
类 的 虚函数表地址 放在寄存器中;Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。