- 问题提出:
类C继承自基类A和基类B,现在有一个类C的对象,将其地址分别转换为基类A的指针和基类B的指针,那么这两个指针的值相等吗?
- 答案:
不相等。
- 解释:

由上图可见,派生类对象在内存中是把各个基类相关信息放在一起,然后存放自己的成员。类C对象地址转换为基类A和基类B的指针后它们的值如上图所示。
- 下面是一个验证程序:
- 执行结果:
pa != pb
&a != &b
&a == pa
&b == pb
A.a=1
A.b=2
BASE A
B.c=3
B.d=4
BASE B
A.a=1
A.b=2
DERIVE C
B.c=3
B.d=4
DERIVE C
pa=2293536
pb=2293548
&c.e=2293560
sizeof A=12
sizeof B=12
sizeof C=28
&a != &b
&a == pa
&b == pb
A.a=1
A.b=2
BASE A
B.c=3
B.d=4
BASE B
A.a=1
A.b=2
DERIVE C
B.c=3
B.d=4
DERIVE C
pa=2293536
pb=2293548
&c.e=2293560
sizeof A=12
sizeof B=12
sizeof C=28