当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
多重继承及类型转换
发布时间:2010/6/10 10:39:44 来源:城市学习网 编辑:ziteng
  一般将一种类型的指针转换成另外一种类型并不会改变它的值。但是为了支持多重继承,在某些情况下,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;
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved