关于多继承的问题
#include <iostream>
using namespace std;
class A
{
int a;
int b;
};
class B
{
int a;
};
class C:public A,public B
{
int a;
};
int main()
{
C c;
A *a=&c;
B *b=&c;
cout < <(((int)&a==(int)&b)?1:0) < <endl; //1
cout < <(int)a-(int)b < <endl; //2
system( "pause ");
return 0;
}
请问输出什么?为什么?
[解决办法]
1.指针a的地址&a,和指针b的地址&b显然不同,所以为0
2.对一个多重派生对象,将其地址指定给“最左端(也就是第一个)base class的指针”,情况将和单一继承时相同,因为二者都指向相同的起始地址。…………至于第二个或后继的base class的地址指定操作,则需要将地址修改过:加上(或减去,如果downcast的话)介于中间的base class subobject(s)大小————《深度探索C++对象模型》中文版P114
//伪码
a=&c;
b=(B*)( ( (char*)&c)+sizeof(A));