zoukankan      html  css  js  c++  java
  • 多重继承及类型转换


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


  • 相关阅读:
    Java内存模型(JMM)是什么?JMM 通过控制主内存与每个线程的本地内存之间的交互,来提供内存可见性保证
    【普及组_在线赛】班级聚会(reuntion)
    面试官:你对Redis缓存了解吗?面对这11道面试题是否有很多问号?
    【华为云技术分享】浅谈产品模型(Profile)在程序设计中的作用
    【华为云技术分享】LiteAI四大绝招,解锁物联网智能设备AI开发难关
    【华为云技术分享】漫谈Huawei LiteOS五大内核模块
    科技感满满,华为云DevCloud推出网页暗黑模式
    赶在520之前,程序员如何用Python送上最特别的“我爱你”表白
    【华为云技术分享】从部署和运维说说DLI(1)
    【2017.11.25普及组模拟】The Farthest House题解
  • 原文地址:https://www.cnblogs.com/fangyukuan/p/1747516.html
Copyright © 2011-2022 走看看