fangyukuan

永无止境的追求...追求卓越!!!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::


一般将一种类型的指针转换成另外一种类型并不会改变它的值。但是为了支持多重继承,在某些情况下,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


posted on 2010-05-30 17:48  fangyukuan  阅读(1700)  评论(0编辑  收藏  举报