多层继承当中构造函数对虚函数表指针的初始化
来源:互联网 发布:无翼鸟漫画下载软件 编辑:程序博客网 时间:2024/04/30 10:58
#include <iostream>using namespace std;/* 三个空类,A为基类,B继承A,C继承B; 每个类都有自己的独立的虚函数表,只不过A的虚函数表里只有show()的地址 B的有两项(show和show2), C的有三项(show,show2,show3)。 三个类的sizeof都是4, 它存的是指向虚函数表的指针(vptr) 可以用 *(unsigned int *)this 获得它里边存的虚函数表的地址。 */class A{public:A(){//执行这句之前,虚函数表指针指向类A的虚函数表cout<<"vptr="<<hex<< *(unsigned int*)this<<endl;}virtual void show(){}};class B : public A{public:B(){//1.先调用基类的构造函数,vptr指向类A的虚函数表; //2.调用类B的构造,vptr指向类B的虚函数表cout<<"vptr="<<hex<< *(unsigned int*)this<<endl;}virtual void show2(){}};class C: public B {public:C(){//1. 调用类A的构造,vptr指向类A的虚函数表//2. 调用类B的构造,vptr指向类B的虚函数表//3. 调用类C的构造,vptr指向类C的虚函数表cout<<"vptr="<<hex<< *(unsigned int*)this<<endl;}virtual void show3(){}};int main(int argc,char* argv[]){cout<<"-------------------------------"<<endl;A a;cout<<"-------------------------------"<<endl;B b;cout<<"-------------------------------"<<endl;C c;return 0;}
执行结果如下,a变量的vptr初始化了一次,c变量的vptr初始化了3次,效率较低。
- 多层继承当中构造函数对虚函数表指针的初始化
- 关于cpp构造函数当中使用memset初始化的陷阱
- 关于cpp构造函数当中使用memset初始化的陷阱
- 关于cpp构造函数当中使用memset初始化的陷阱
- java继承当中都有一些什么样的构造函数规则?
- 构造函数中指针参数的初始化
- 多层派生的构造函数
- 多层继承中的虚函数
- Java继承,在构造函数内对父类初始化的问题
- 虚继承对构造函数的影响
- 构造函数的初始化表
- 构造函数的初始化
- 构造函数的初始化
- 构造函数的初始化
- 对通过拷贝构造函数对 对象初始化的理解
- 继承类中带参数构造函数的初始化问题
- C++类继承构造函数的语法 & initialization list初始化
- 构造函数的继承
- websphere部署war报错:发生 IWAE0022E Exception
- 栈基本功能
- 使用Framelayout+linnerlayout实现按钮置于底部
- C语言volatile关键字
- Vmware Tools 安装
- 多层继承当中构造函数对虚函数表指针的初始化
- 开源 免费 java CMS - FreeCMS-数据对象-link
- 理解WebKit和Chromium: Chromium for Android
- U盘Linux系统安装指南
- Poj 2540 Hotter Colder (半平面求交求可行域)
- UVA10815 Andy's First Dictionary
- 在VS2005中使用mscomm控件
- 折半插入排序
- Android 刻度尺