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


  • 相关阅读:
    计算器算法的简单实现
    [备忘]如何在Asp.net MVC,非Controller中获取当前Request,Session,Response等请求信息
    [Easy UI ]DataGrid 首次进入页面时,不加载任何数据
    使用Hyperv搭建oracle11gR2 RAC过程中遇到问题记录
    Win oracle10g 不同目录rman恢复记录
    ORACLE RAC 日常管理[10g,11g]
    win2008 11gRAC 环境 安装步骤记录 【前期配置简略】
    本地登录和远程登陆总结[oracle ,资料收集于网络]
    Oracle10g RAC 修改IP [转载]
    安装DNS Server linux 【转载】
  • 原文地址:https://www.cnblogs.com/fangyukuan/p/1747516.html
Copyright © 2011-2022 走看看