C++虚函数对象模型剖析
来源:互联网 发布:淘宝如何增加粉丝 编辑:程序博客网 时间:2024/06/05 00:09
测试环境:VS2013
C++中的类对象模型有简单的,也有复杂的。今天尝试着剖析一下,以加深对继承,虚函数等的理解。
从最简单的继承开始
class Base{public:int b;};class Derive : public Base{public:int d;};int main(){ cout << sizeof(Derive) << endl;Derive d1;d1.b = 0x01;d1.d = 0x02;return 0;}定义一个基类Base类,将其成员变量设为公有,为了方便修改。定义一个派生类Derive类,继承自Base类。在main中输出派生类的大小,创建一个Derive类对象,对它的成员数据分别赋值以方便在内存中进行区分。运行程序输出8 个字节,我们可以依据这个数值通过&d1将内存中的d1截取出来:
可以看出d1的对象模型:
这个就作为练手。剩下的说的就不那么详细了。
继承+虚函数
class Base{public:virtual void fun1(){}virtual void fun2(){}public:int b;};class Derive : public Base{public:virtual void fun1(){}virtual void fun2(){}virtual void fun3(){}public:int d;};int main(){cout << sizeof(Derive) << endl;Derive d1;d1.b = 0x01;d1.d = 0x02;return 0;}输出12:
虚函数+多重继承
class Base{public:virtual void fun1(){cout << "Base::fun1()" << endl;}virtual void fun2(){cout << "Base::fun2()" << endl;}public:int b;};class C : public Base{public:virtual void fun1(){cout << "C::fun1()" << endl;}public:int c;};class Derive : public C{public:virtual void fun2(){cout << "Derive::fun2()" << endl;}virtual void fun3(){cout << "Derive::fun3()" << endl;}public:int d;};int main(){cout << sizeof(Derive) << endl;Derive d1;d1.b = 0x01;d1.c = 0x0c;d1.d = 0x02;d1.fun1();d1.fun2();d1.fun3();return 0;}输出16:
菱形继承+虚函数
class Base{public:virtual void fun0(){cout << "Base::fun0()" << endl;}virtual void fun1(){cout << "Base::fun1()" << endl;}virtual void fun2(){cout << "Base::fun2()" << endl;}public:int b;};class C1 : public Base{public:virtual void fun1(){cout << "C1::fun1()" << endl;}public:int c;};class C2 : public Base{public:virtual void fun1(){cout << "C2::fun1()" << endl;}public:int c;};class Derive : public C1, public C2{public:virtual void fun2(){cout << "Derive::fun2()" << endl;}virtual void fun3(){cout << "Derive::fun3()" << endl;}public:int d;};int main(){cout << sizeof(Derive) << endl;Derive d1;d1.C1::b = 0x01;d1.C1::c = 0x1c;d1.C2::b = 0x01;d1.C2::c = 0x2c;d1.d = 0x02;d1.C1::fun0();d1.C1::fun1();d1.C1::fun2();d1.C2::fun0();d1.C2::fun1();d1.C2::fun2();d1.fun3();return 0;}
1 0
- C++虚函数对象模型剖析
- C++对象模型(剖析虚函数表)
- 剖析C++对象模型
- 【C++】虚函数在不同继承方式中的对象模型
- 深度剖析C++模型对象
- C-main函数剖析。
- C++多继承虚函数类内部模型结构剖析
- 深入探索C++对象象模型--拷贝构造函数、对象模型
- C++对象模型之虚函数表
- C++ 虚函数的对象模型
- 深入C++对象模型&虚函数表
- 多态、虚函数表、对象模型
- 【C++对象模型】之虚函数详解
- Objective-C对象模型
- Objective-C对象模型
- objective C 对象模型
- C ++ 对象模型
- Objective-C 对象模型
- c++对象模型研究3:数据
- Mysql新增字段到大数据表导致锁表
- java web filter总结
- linux open 函数O_DIRECT标志位使用说明
- Spring事务管理的几种实现
- C++虚函数对象模型剖析
- spring mvc常用处理方法的返回方式
- POJ1861
- 起步
- spring mvc 的文件的上传 -- 后续跟进
- 理工科科研结果展示怎样让PPT高大上?
- Mina Logging Filter日志过滤器知识介绍
- android webview 加载重定向页面时点击无法回退,导致重复加载当前页面问题的解决方案
- BZOJ 1794 Ioi2008 Linear Garden