虚拟继承问题__跪求解释
class X
{public:int a;};
class Y : virtual public X
{public:int b;};
class Z : virtual public X
{};
class A : public Y, public Z
{};
int main(int argc, char *argv[])
{
X x;
Y y;
int a = 0, b = 0, c = 0;
y.b = 3;
y.a = 4;
memcpy(&a, &y, 4);
memcpy(&b, &y + 4, 4);
memcpy(&c, &y + 8, 4);
system("pause"); //在此处加上断点
}
然后debugging,在监视(watch)窗口中察看下列值:
&y 0x0012ff4c
&((y).b) 0x0012ff50
&(*(X*)(&y)) 0x0012ff54
由这些值我可以判断对象y的布局为:
0x0012ff4c ——————————
| 指向X部分的指针 |————
0x0012ff50 —————————— |
| y中的b | |
0x0012ff54 —————————— |
| (虚拟基类)X中的a |<————
——————————
然后我想看看“指向X部分的指针”值是否为“(虚拟基类)X中的a”的地址值-----这就是我在main函数中写了三个memcpy的原因。但是我在监视窗口中添加了三项“a,b,c”,它们的显示结果并不如我所意料:
a 0x00415710(预计应该为:0x0012ff54,即上图中“(虚拟基类)X中的a”的地址)
b 0xfe263ae0(预计应该为:0x00000003,即y.a)
c 0x0041107d(预计应该为:0x00000004,即y.b)
这到底是为什么呢?请高手给指点一二,小弟不胜感激,在此先谢谢了!!