请教,c++虚继承,sizeof大小
#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这四个大小是怎么算的,请教各位。
...全文
相关推荐
深入分析C++中类的大小
本篇文章深入分析了C++中类的大小问题。需要的朋友参考下
深度探索C++对象模型.pdf(清晰完整带书签)
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 对C++对象模型进行深入剖析
C++ sizeof()运算符解析[项目代码]
本文深入探讨了C++中sizeof()运算符的使用及其背后的原理。通过具体代码示例,分析了sizeof()在不同数据类型(如字符串、数组、指针等)上的行为及其结果。文章还讨论了编译器在处理sizeof()时的规则,包括类型推导、内存分配和编译时计算等特性。此外,作者从多个角度解读sizeof()的工作原理,包括基本数据类型与复合数据类型的处理差异,以及宏实现的可能性。最后,文章指出sizeof()在编译时即确定结果,不会在运行时计算表达式值,并强调了其在内存管理中的重要性。
c++考试试卷的文档
学习c++考试试卷的模板,可以很好的借鉴
关于C++中虚拟继承的一些总结分析
虚拟继承在一般的应用中很少用到,所以也往往被忽视,这也主要是因为在C++中,多重继承是不推荐的,也并不常用



