设为首页 加入收藏

TOP

多重继承及类型转换
2014-11-10 16:45:09 】 浏览:7717
Tags:多重 继承 类型 转换

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


  例如 :


  class CA : public IX,


  public IY


  {


  };


  由于CA同时继承了IX和IY ,因此在可以使用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虚拟函数表的指针。


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


  从图可以看出,CA的this指针指向IX的虚拟函数表。所以可以不改变CA的this指针用它来代替IX指针。


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


  IY* pC = pA;


  与下面类似的代码:


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


  编辑特别推荐:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VC++与Matlab混合编程的快速实现 下一篇06年9月计算机等级考试二级C++笔..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目