菱形继承的问题及解决办法

菱形继承的问题及解决办法_第1张图片
菱形继承问题:
导致数据拥有两份,资源浪费

解决方式:
用虚继承解决,只有一份数据

PS:
虚继承:
加关键字 virtual
class stby:virtual public Food

#include
using namespace std;

//菱形继承

//食物类
class Food
{
public:
    int m_Age;
};

//加关键字 virtual 变成虚继承; Food 变为 虚基类
//草莓类 
class stby:virtual public Food
{

};

//牛油果类
class acd:virtual public Food
{

};

//水果类
class Fruit:public stby,public acd
{

};

void test01()
{
    Fruit fruit;

    fruit.stby::m_Age = 3;
    fruit.acd::m_Age = 6;
    //当菱形继承时,当两个父类拥有相同的数据,要加作用域进行区分。
    cout << "stby::m_Age:" <<fruit.stby::m_Age <<endl;
    cout << "acd::m_Age :" <<fruit.acd::m_Age <<endl;

    //菱形继承导致数据拥有两份,资源浪费
    //利用虚继承可以解决问题
    //继承之前加上关键字 virtual 变为虚继承

    //发生虚继承不用加作用域,只有一份数据
    cout<<"m_Age :"<<fruit.m_Age<<endl;

}

int main()
{
    test01();
    return 0;
}

你可能感兴趣的:(学习笔记)