关于虚函数表的一点内容--发布日期:2007-7-26
2008-10-02 18:21
246 查看
还是用图表和代码能说明内容: #include <iostream> using std::cout; using std::endl; class Base { public: //为了便于取地址 int m_data1; int m_data2; int m_data3; public: void mem_fun1(); void mem_fun2(); //注意虽然后面没用到这些虚函数 ,但是要使程序可以编译通过 //需要实现他们,因为建立vtable会出错 virtual void vir_fun1(){} virtual void vir_fun2(){} }; class Derive:public Base { public://为了便于取地址 int m_data1; int m_data3; int m_data4; public: void mem_fun1(); virtual void vir_fun2(){} }; int main() { cout<<"sizeof(Base)=> "<<sizeof(Base)<<endl; cout<<"sizeof(Derive)=> "<<sizeof(Derive)<<endl; Base b; Derive d; cout<<"Address of b=> "<<&b<<endl; cout<<"Address of b.m_data1=> "<<&(b.m_data1)<<endl; cout<<"Address of b.m_data2=> "<<&(b.m_data2)<<endl; cout<<"Address of b.m_data3=> "<<&(b.m_data3)<<endl; cout<<"Address of d=> "<<&d<<endl; cout<<"Address of d.m_data1=> "<<&(d.m_data1)<<endl; cout<<"Address of d.Base::m_data2=> "<<&(d.Base::m_data2)<<endl; cout<<"Address of d.Base::m_data3=> "<<&(d.Base::m_data3)<<endl; cout<<"Address of d.m_data3=>"<<&(d.m_data3)<<endl; cout<<"Address of d.m_data4=>"<<&(d.m_data4)<<endl; system("pause"); return 0; } 运行结果如图: ![]() 基类的大小为16是因为,三个int变量加上一个vptr,对应的Derive的大小就是在此基础上加三个int的大小,各数据成员的地址很清晰,也可以反映对象在内存中的存放情况。 下面两幅图是对象的内存模拟表示,看图应该就很清楚了: ![]() ![]() |
相关文章推荐
- 关于DB_CACHE_SIZE的一点内容
- [原创]关于Google搜索引擎抓录js内容的一点摸索
- 关于mysql日期格式化的一点心得
- 关于日期显示格式字符串的一点理解
- 关于域证书的发布CA和CRL的内容 (Windows 2008 Server R2 SP1)
- 关于ACCESS的日期类型字段比较的一点认识
- 关于ctrip搜索内容的一点尝试
- 关于使用VS2012作ClickOne发布时出现证书错误的一点解决办法
- Android App关于应用程序升级的一点内容
- 关于域证书的发布CA和CRL的内容 (Windows 2008 Server R2 SP1)
- 难得找到的一点关于解释器的内容
- delphi 关于ACCESS的日期类型字段比较的一点认识
- 关于工作流引擎流程轨迹表的效率提高改进内容发布
- MDI,SDI创建过程中的一点不同--发布日期:2007-8-31
- 关于工作总结内容和周期的一点启示
- delphi 关于DateTimePicker的一点问题(同时修改日期和时间的实现)
- [分享] 关于“微软发布便捷更新包”,我个人的一点不负责任的解说
- 查询到的关于PDO的一点内容
- 关于Ad Hoc发布的一点体会
- 关于保护模式必须搞清楚的一点基础内容