1. 多重继承的内存布局
struct A
{
int a;
};
struct B:public A
{
int b;
};
struct C:public A
{
int c;
}
struct D
{
int d;
}
多重继承的情况, 如果父类有共同的祖父类,则祖父类对象被拷贝了多次。在该例中,B的内存布局为(假设从上往下为地址增加方向)
int A::a
int B: b
则D的内存布局为
int B::A:;a
int B:;b
int A::a
int C::c
int D::d
如果sizeof各个类的大小,很明显
sizeof(A) = 4;
sizeof(B) = 8;
sizeof(C) = 8;
sizeof(D) = 20
如果有这样的语句
D *pd = new D;
B *pa = pd;
C *pb = pd;
A *pa = pd;
我们分别输出pa,pd,pc和pd的地址试试
pb = 0x8650a10
pc = 0x8650a18
pd = 0x8650a10
注意,这里pd和pb是相同的,都指向pd的开始位置,但是pc和pb不同,pc产生了两个4字节的偏移,即指向D中C对象的存储位置<