- 论坛徽章:
- 0
|
class A{
public:
int a;
};
class B:virtual public A{
public:
int b;
};
class C:virtual public A{
public:
int c;
};
class D:public B, public C{
public:
int d;
};
int main()
{
D sam;
A *pa = &sam;
B *pb = &sam;
C *pc = &sam;
printf("sizeof A %d\n", sizeof(A));
printf("sizeof B %d\n", sizeof(B));
printf("sizeof C %d\n", sizeof(C));
printf("sizeof D %d\n", sizeof(D));
printf("pa: %p\n&sam: %p\n", pa,&sam);
printf("pb: %p\n", pb);
printf("pc: %p\n", pc);
printf("*pc: %p\n", *pc);//?
printf("*pb: %p\n", *pb);//?为什么不指向同一个虚基类?
printf("&sam.a %p\n", &sam.a);
printf("&sam.b %p\n", &sam.b);
printf("&sam.c %p\n", &sam.c);
printf("&sam.d %p\n", &sam.d);
return 0;
}
输出结果 sizeof A 4
sizeof B 12
sizeof C 12
sizeof D 24
pa: 0012FF60
&sam: 0012FF4C
pb: 0012FF4C
pc: 0012FF54
*pc: 00404314//?为什么*pc *pb不指向同一个虚基类?
*pb: 0040431C//?为什么不指向同一个虚基类?
&sam.a 0012FF60
&sam.b 0012FF50
&sam.c 0012FF58
&sam.d 0012FF5C
=====================
我猜的是B和C类的对象都有一个指针指向基类子对象A,既然是虚继承,应该只有一个A。
所以猜*pc 和*pb应该指向同一处(唯一的A类子对象)
问题如上注释,我也不大深刻了解对象模型,求助大家是什么原因?谢谢了
(希望回答的不要是“自己翻翻深度探索C++对象模型”书)
[ 本帖最后由 bert1984 于 2008-11-11 01:24 编辑 ] |
|