c++多重继承

c++多重继承


二义性问题:
  一般说来,在派生类中对基类成员的访问应该是唯一的,但是,由于多继承情况下,可能造成对基类中某成员的访问出现了不唯一的情况,则称为对基类成员访问的二义性问题。

       通常再实际的是使用情况中,多重继承主要是用来进行接口的使用的。相当于java中的interface关键字。

实际例子:

#include <iostream>

using namespace std;

/**
说明:接口1*/
class Interface_1 {
public:
    virtual
        int add () = 0{};
    virtual 
        int subtract () = 0{};
};

/**
说明:接口2*/
class Interface_2 {
public:
    virtual
        void printf () = 0{};
};

/**
说明:父类*/
class Base {
public:
    int m_iA;
    int m_iB;

public:
    Base ()
    :
    m_iA (10),
    m_iB (5){}
};

/**
说明:子类进行多重继承实现接口*/
class Child :public Base, public Interface_1, public Interface_2{
public:
    int add () {
            return m_iA + m_iB;
    }

    int subtract () {
            return m_iA - m_iB;
    }

    void printf () {
            cout << "子类!" << endl;
    }
};


int main () {

    Child c;

    cout << c.add () << endl;
    cout << c.subtract () << endl;
    c.printf ();

    system ("pause");
}

优化版

#include <iostream>

using namespace std;

/**
说明:接口1*/
class Interface_1 {
public:
    virtual
        int add () = 0{};
    virtual 
        int subtract () = 0{};
};

/**
说明:接口2*/
class Interface_2 {
public:
    virtual
        void printf () = 0{};
};

/**
说明:父类*/
class Base {
public:
    int m_iA;
    int m_iB;

public:
    Base ()
    :
    m_iA (10),
    m_iB (5){}
};

/**
说明:子类进行多重继承实现接口*/
class Child :public Base, public Interface_1, public Interface_2{
public:
    int add () {
            return m_iA + m_iB;
    }

    int subtract () {
            return m_iA - m_iB;
    }

    void printf () {
            cout << "子类!" << endl;
    }
};


int main () {

    Child c;
    Interface_1 *pBase_1 = &c;
    Interface_2 *pBase_2 = &c;

    cout << pBase_1->add () << endl;
    cout << pBase_1->subtract () << endl;
    pBase_2->printf ();

    system ("pause");
}










  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值