读书人

关于多继承的有关问题

发布时间: 2012-02-20 21:18:23 作者: rapoo

关于多继承的问题
#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));

读书人网 >C语言

热点推荐