zoukankan      html  css  js  c++  java
  • c++ vitual继承

    为了解决多继承下的二义性而设计的vitrul继承

    class Base
    {
    public:
        Base(void);
        ~Base(void);
    };
    
    Base::Base(void)
    {
        printf("Base::Base():%p
    ",this);
    }
    
    class ChildFirst :
        /*vitual*/ public Base
    {
    public:
        ChildFirst(void);
        ~ChildFirst(void);
    };
    
    ChildFirst::ChildFirst(void)
    {
        printf("ChildFirst::ChildFirst()
    ");
    }
    
    class ChildSencond :
        /* vitrual */public Base
    {
    public:
        ChildSencond(void);
        ~ChildSencond(void);
    };
    
    
    ChildSencond::ChildSencond(void)
    {
        printf("ChildSencond::ChildSencond()
    ");
    }
    
    
    class GrandChild :public ChildFirst, ChildSencond
    {
    public:
        GrandChild(void);
        ~GrandChild(void);
    };
    
    GrandChild::GrandChild(void)
    {
        printf("GrandChild::GrandChild()
    ");
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        GrandChild grandChild;
        return 0;
    }

    这样的话,Base::()Base()会被调用两次而且两次地址不同。

    输出

    Base::Base():0x0015ff0f

    ChildFirst::ChildFirst()

    Base::Base():0x0015ff10

    ChildSecond::ChildSecond()

    GrandChild::GrandChild()

    .为解决上述问题,请把注释了virtual打开,注意写法,vitual是直接继承的那里写的。

    打开后的输出为:

    Base::Base():0x0015000f

    ChildFirst::ChildFirst()

    ChildSecond::ChildSecond()

    GrandChild::GrandChild()

  • 相关阅读:
    记一次在线阅卷系统设计开发总结
    卡座录音经验汇总
    TEAC 6030S 统调
    空白磁带SONY TDK 万胜,3大品牌空白磁带,入门必读
    cnetos 7 mysql 从data还原数据库
    java的BigDecimal比较大小
    nginx配置静态访问txt文件
    小程序筛选
    买分产整合
    开窗函数
  • 原文地址:https://www.cnblogs.com/zhidao-chen/p/3836064.html
Copyright © 2011-2022 走看看