现在的位置: 首页 > 综合 > 正文

多重继承及类型转换

2013年07月09日 ⁄ 综合 ⁄ 共 648字 ⁄ 字号 评论关闭


一般将一种类型的指针转换成另外一种类型并不会改变它的值。但是为了支持多重继承,在某些情况下,c++必须改变类指针的值。

 

例如

class CA : public IX,

                public IY

{

};

 

由于CA同时继承了IXIY ,因此在可以使用IX IY指针的地方均可以使用指向CA的指针。

void foo(IX*
pIX);

void bar(IY*
pIY);

 

int main()

{

      CA*
pA = new CA;

      foo(pA);

      bar(pA);

 

      delete
pA;

      return
0;

}

 

Foo需要一个指向合法的IX的虚拟函数表的指针。

Bar则需要一个指向IY虚拟函数表的指针。

IXIY的虚拟函数表中的内容是不一样的。编译器将同一指针传给foobar是不可能的。必须对CA的指针进行修改以便它指向一个合适的vabl指针。

 

 

从图可以看出,

CAthis指针指向IX的虚拟函数表。所以可以不改变CAthis指针用它来代替IX指针。

CAthis指针没有指向IY的虚拟函数表指针。所以在将指向类CA的指针传给一个接收IY指针的函数之前,其值必须修改。编译器将把IY虚拟函数表指针 的偏移量(IY)加到CA this指针上。

 

IY* pC = pA;

与下面类似的代码:

IY* pC = (char*)pA + IY;

 

 本文地址:http://www.cnblogs.com/fangyukuan/archive/2010/05/30/1747516.html


抱歉!评论已关闭.