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


  • 相关阅读:
    VUE项目爬坑---3、vue route的编程式导航
    js的getBoundingClientRect的用法
    iphone真机开发流程之--证书申请
    提交App到Apple Store(Xcode4)
    iPhone应用提交流程:如何将App程序发布到App Store?
    反编译Apk得到Java源代码
    jquery mobile 自定义图标
    Phonegap通过JS访问本地接口的两种方法
    jQuery插件开发
    Android_HTML解析器_jsoup
  • 原文地址:https://www.cnblogs.com/fangyukuan/p/1747516.html
Copyright © 2011-2022 走看看