前两天逛论坛的时候,看到一个有关虚继承中类的大小(亚马逊二面的面试题)帖子,看了下还真不会,觉得慢慢研究下。大概搞明白为什么了,将自己的一点结果跟大家分享下吧,欢迎拍板。(我的上一篇博客也虚继承有相关解释)
这里就先从以下几个点进行说明吧:
● 虚继承和虚基类
● vs2010下的cl命令
● 内存模型
虚继承和虚基类
虚继承:在继承定义中包含了virtual关键字的继承关系;
虚基类:在虚继承体系中的通过virtual继承而来的基类,需要注意的是:class CSubClass : public virtual CBase {}; 其中CBase称之为CSubClass的虚基类,而不是说CBase就是个虚基类,因为CBase还可以不不是虚继承体系中的基类。
vs2010下的cl命令
微软的VS2010提供了一个新的选项,给用户显示C++对象在内存中的布局。这个选项就是:
/d1reportSingleClassLayout |
具体使用方法如下,在写好相应的cpp文件之后,需要启动VS2010的命令行工具“Visual Studio 2010Command Prompt”,切换到cpp文件所在目录之后,输入如下的命令:
cl [filename].cpp /d1reportSingleClassLayout[className] |
cl当然就是MS的编译器;[filename].cpp就是你所想要查看的class所在的cpp文件(class定义在头文件也没关系,还是只要编译cpp文件即可);而你需要在最后加上[className],也就是你需要查看的class的类名。
【举例】test.cpp文件代码如下:
#include <iostream> class Base class Derived : public Base int main() |