#include <iostream>
using namespace std;
//动物类
class Animal
{
public:
int m_Age;
};
//羊类
class Sheep :public Animal {
};
//驼类
class Tuo :public Animal {
};
//羊驼类
class SheepTuo :public Sheep, public Tuo
{
};
int main()
{
SheepTuo st;
st.Sheep::m_Age = 18;
st.Tuo::m_Age = 28;
//问题1:当菱形继承,两个父类拥有相同数据,需要加以作用域区分
cout << "st.Sheep::m_Age=" << st.Sheep::m_Age << endl;
cout << "st.Tuo::m_Age=" << st.Tuo::m_Age << endl;
//问题2:m_Age只要有一份就可以,菱形继承导致m_Age有两份,资源浪费
return 0;
}
利用虚继承,可以解决菱形继承的问题
#include <iostream>
using namespace std;
class Animal
{
public:
int m_Age;
};
//继承之前,加上关键字virtual 变为虚继承
//Animal类称为虚基类
class Sheep :virtual public Animal {
};
class Tuo :virtual public Animal {
};
class SheepTuo :public Sheep, public Tuo
{
};
int main()
{
SheepTuo st;
st.Sheep::m_Age = 18; //此时只继承了一个m_Age。如果把他比作A。那现在A=18。
st.Tuo::m_Age = 28; //现在A=28。
cout << "st.Sheep::m_Age=" << st.Sheep::m_Age << endl;
cout << "st.Tuo::m_Age=" << st.Tuo::m_Age << endl;
//此时又多了一种访问方式。(st.m_Age)
//因为SheepTuo只继承了一个m_Age,所以不会不明确,不会报错。
cout << "st.m_Age=" << st.m_Age << endl;
return 0;
}