前两天逛论坛的时候,看到一个有关虚继承中类的大小(亚马逊二面的面试题)帖子,看了下还真不会,觉得慢慢研究下。大概搞明白为什么了,将自己的一点结果跟大家分享下吧,欢迎拍板。(我的上一篇博客也虚继承有相关解释)

  这里先从以下几个点进行说明吧:

  ● 虚继承和虚基类

  ● 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>
using namespace std;

class Base
{
public:
    int a;
    virtual void fcn() {};
};

class Derived : public Base
{
public:
    virtual void fcn2() {};
private:
    int d;
    void fcn3() { }
};

int main()
{
}