父类和子类中存在同一个成员变量

父类和派生的子类存在同一个成员变量名,是如何分配内存空间的?
在vs编译器中可以将源文件配置好后,看到内存布局:具体方法就是在vs的c++项目的属性中,添加/d1 reportAllClassLayout,注意添加到C/C++项目下的命令行中,不要放在链接器下的命令行中,否则会报错而且看不到内存布局。

这样上面这个问题就可以直接看到了:

#include "stdafx.h"

class Base
{
    int a;
    int b;
public:
    void CommonFunction();
};

class derived: public Base
{
private:
    int a;
};

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

结果如下:

1>  testCppClass.cpp
1>  class Base  size(8):
1>      +---
1>   0  | a
1>   4  | b
1>      +---
1>  
1>  
1>  
1>  class derived   size(12):
1>      +---
1>      | +--- (base class Base)
1>   0  | | a
1>   4  | | b
1>      | +---
1>   8  | a
1>      +---
1>  
1>  
1>  
1>Manifest:
1>  正在删除文件“Debug\testCppClass.exe.embed.manifest”。
1>LinkEmbedManifest:
1>  testCppClass.vcxproj -> D:\Users\Documents\Visual Studio 2010\Projects\testCppClass\Debug\testCppClass.exe
1>FinalizeBuildStatus:
1>  正在删除文件“Debug\testCppClass.unsuccessfulbuild”。
1>  正在对“Debug\testCppClass.lastbuildstate”执行 Touch 任务。
1>
1>生成成功。
1>
1>已用时间 00:00:01.97
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========

可以看的很清楚派生类中并没有对父类中的属性进行覆盖,所以只要使用的仍然是父类指针,而不是子类的虚表指针,在子类中仍然能够对两个相同的名称的不同成员变量进行访问。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值