• C++多重继承解决方法


    eg1:解决方法:添加作用域标识符,消除成员限定的二义性

    #include
    #include
    #include
    using namespace std;
    class A {
    public:
        void f() 
        {
            cout << "A::f()" << endl;
        }
    };

    class B {
    public:
        void f()
        {
            cout << "B::f()" << endl;
        }
        void g();
    };

    class C : public A, public B 
    {
    public:
        void g();
        void h();
        void f() {
            A::f();
        }
    };
    int main()
    {
        C C1;
        C1.f();
        return 0;
    }
    eg2:解决方法:C++中虚继承:使派生类只保留一份间接基类成员

    class A //间接基类,第一层的类
    {
    protected:
        int m_a;
    };

    class B :virtual public A //直接基类B
    {
    protected:
        int m_b;
        //继承m_a;
    };

    class C :virtual public A //直接基类C
    {
    protected:
        int m_c;
    };

    class D :public C, public B
    {
    public:
        void set(int a)
        {
            //继承m_a;
              //error:  m_a=a;
            //不知道赋值给B 类的还是C类的m_a;
            m_a = a;
            //B::m_a = a;
            //C::m_a = a;
        }
    };
    int main()
    {
        return 0;
    }

     egg:解决方法:C++中虚继承:使派生类只保留一份间接基类成员

    //多重继承 虚继承
    #include
    #include
    using namespace std;

    class A
    {
    public:
        int m_a;
    };

    class B :virtual public A
    {
    public:
        int m_b;
        //虚继承 m_a
    };

    class C :virtual public A
    {
    public:
        int m_c;
        //虚继承 m_a
    };

    class D :virtual public A
    {
    public:
        int m_d;
        //虚继承 m_a
    };


    class E :public C, public B
    {
    public:
        int m_e;
        //虚继承 m_a
        //继承 m_b
        //继承 m_c
        void seta(int a) { m_a = a; }//正确
        void setb(int b) { m_b = b; }//正确
        void setc(int c) { m_c = c; }//正确
        void sete(int e) { m_e = e; }//正确
    };

    int main()
    {
        E e;
        return 0;
    }

     

  • 相关阅读:
    最小生成树(Prim算法与Kruskal算法)
    element-ui使用el-date-picker日期组件常见场景
    ThingsBoard Iot gatway Modbus 连接器配置 第一部分
    20220809模拟
    gitlab--基础--5.3--CICD--gitlab-ci.yml关键字
    Qunar风控安全产品的探索之路
    【数据结构——顺序表】线性表很难嘛?这篇文章能让你轻松掌握顺序表
    .NET程序的 GDI句柄泄露 的再反思
    7.4 通过API枚举进程权限
    python json包
  • 原文地址:https://blog.csdn.net/EveryDayOneHour/article/details/137854822