双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

请教,c++虚继承,sizeof大小

ddweidong ddweidong 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include <iostream>

/*
* 带有数据成员的基类
*/
struct CBaseClass
{
CBaseClass( size_t i ) : m_val( i ) {}

size_t m_val;
};
/*
* 虚拟继承体系
*/
struct CSubClassV1 : public virtual CBaseClass
{
CSubClassV1( size_t i ) : CBaseClass( i ) {}
};

struct CSubClassV2 : public virtual CBaseClass
{
CSubClassV2( size_t i ) : CBaseClass( i ) {}
};
struct CSubClassV3 : public virtual CBaseClass
{
CSubClassV3( size_t i ) : CBaseClass( i ) {}
};
struct CDiamondClass1 : public CSubClassV1, public CSubClassV2
{
CDiamondClass1( size_t i ) : CBaseClass( i ), CSubClassV1( i ), CSubClassV2( i ) {}
};
struct CDiamondClass2 : public CSubClassV1, public CSubClassV2, public CSubClassV3
{
CDiamondClass2( size_t i ) : CBaseClass( i ), CSubClassV1( i ), CSubClassV2( i ), CSubClassV3(i) {}
};

struct CDiamondSubClass1 : public CDiamondClass1
{
CDiamondSubClass1( size_t i ) : CBaseClass( i ), CDiamondClass1( i ) {}
};
struct CDiamondSubClass2 : public CDiamondClass1, public CDiamondClass2
{
CDiamondSubClass2( size_t i ) : CBaseClass( i ), CDiamondClass1( i ), CDiamondClass2(i) {}
};

int main( int argc, char *argv[] )
{
/*
* 类体系中的尺寸.
*/
std::cout << "sizeof( CBaseClass1 ) = " << sizeof( CBaseClass ) << std::endl;
std::cout << std::endl;
std::cout << "sizeof( CSubClassV1 ) = " << sizeof( CSubClassV1 ) << std::endl;
std::cout << "sizeof( CSubClassV2 ) = " << sizeof( CSubClassV2 ) << std::endl;
std::cout << "sizeof( CDiamondClass1 ) = " << sizeof( CDiamondClass1 ) << std::endl;
std::cout << "sizeof( CDiamondClass2 ) = " << sizeof( CDiamondClass2 ) << std::endl;
std::cout << "sizeof( CDiamondSubClass1 ) = " << sizeof( CDiamondSubClass1 ) << std::endl;
std::cout << "sizeof( CDiamondSubClass2 ) = " << sizeof( CDiamondSubClass2 ) << std::endl;
std::cout << std::endl;

return 0;
}


环境:win7 64位, vs2010
下面图片是他们继承的层次示意图,红色的数字是运行的结果

我不明白的是 CDiamondClass1、CDiamondClass2、CDiamondSubClass1、CDiamondSubClass2这四个大小是怎么算的,请教各位。
...全文

相关推荐

评论 11
收藏 已收藏
分享
返回顶部
ddweidong
C++ 语言 65,214 成员 250,514 内容