
菱形继承问题:
导致数据拥有两份,资源浪费
解决方式:
用虚继承解决,只有一份数据
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;
}
菱形继承在多继承中可能导致数据冗余,浪费资源。通过使用虚继承,可以确保基类的数据只有一份,从而避免此类问题。在C++中,实现虚继承的关键字是`virtual`。

7262

被折叠的 条评论
为什么被折叠?



