C++多继承的子类sizeof问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 06:15:00
为什么下面中对象ir与ic的大小不同,它们的大小是如何计算的,谢谢!
class R{};
class Ir1:public R{char r1[16];};
class Ir2:public R{};
class Ir3:public R{};
class Ir4:public R{};
class Ir5:public R{};

class I:public Iv1,Iv2,Iv3,Iv4
{
};

class C1{char c1[16];};
class C2{};
class C3{};
class C4{};
class C5{};
class Ir:public Ir1,public Ir2,public Ir3,public Ir4
{
};
class Ic:public C1,public C2,public C3,public C4
{
};
void main()
{
Ir ir;
cout<<endl<<"sizeof(ir):"<<sizeof(ir);//输出19
Ic ic;
cout<<endl<<"sizeof(ic):"<<sizeof(ic);//输出18
}

难得糊涂

汗……不懂

因为Ir的几个父类还有个共同的父类R。
这样Ir的大小就是17+2=19,17是继承自Ir1大小,由于Ir2,3,4相同所以只要一个是1,1,2,3,4的父类R占1个,所以是19;
Ic的父类Ic1是17,2,3,4相同只要1个就是1,所以是18.