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()

  • 相关阅读:
    python开发mysql:索引
    学习笔记之English
    本周学习小结(25/03
    本周学习小结(18/03
    本周学习小结(11/03
    学习笔记之Machine Learning Crash Course | Google Developers
    本周学习小结
    学习笔记之Fluent Python
    Leetcode 4. Median of Two Sorted Arrays
    学习笔记之Python爬虫
  • 原文地址:https://www.cnblogs.com/zhidao-chen/p/3836064.html
Copyright © 2011-2022 走看看