首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于多继承的有关问题

2012-02-20 
关于多继承的问题#includeiostreamusingnamespacestdclassA{intaintb}classB{inta}classC:publicA

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

热点排行