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

菱形继承在多继承中可能导致数据冗余,浪费资源。通过使用虚继承,可以确保基类的数据只有一份,从而避免此类问题。在C++中,实现虚继承的关键字是`virtual`。

在这里插入图片描述
菱形继承问题:
导致数据拥有两份,资源浪费

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

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

#include<iostream>
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值