2013亚马逊面试题--虚继承的内存模型分析

发表于:2013-1-18 09:36

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:wangqiulin123456    来源:51Testing软件测试网采编

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

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

  ● 虚继承和虚基类

  ● 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()
{
}

51/512345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号