1.菱形继承概念
- 两个派生类继承同一个基类
- 又有某个类同时继承两个派生类
- 这种继承被称为菱形继承,或者钻石继承
- 菱形继承带来的主要问题是子类继承两份相同的数据,导致资源浪费以及毫无意义
- 利用虚继承可以解决菱形继承问题
#include<iostream>
using namespace std;
#include<string>
//动物类
class Animal
{
public:
int m_age;
};
//利用虚继承解决菱形继承的问题
//加virtual变为虚继承,Animal类称为虚基类
//羊类
class Sheep :virtual public Animal
{
};
//驼类
class Tuo :virtual public Animal
{
};
//羊驼类
class SheepTuo :public Sheep, public Tuo
{
};
void test1()
{
SheepTuo st;
st.Sheep::m_age = 18;
st.Tuo::m_age = 28;
//当菱形继承,两个父类拥有相同数据,需要加以作用于区分
cout << "st.Sheep::m_age=" << st.Sheep::m_age << endl; //18
cout << "st.Tuo::m_age=" << st.Tuo::m_age << endl; //28
cout << "st.m_age=" << st.m_age << endl;
//这份数据我们知道 只有一份就可以,菱形继承导致数据有两份,资源浪费
}
//同名静态成员函数处理
int main()
{
test1();
system("pause");
return 0;
}