站长工具 网站改版,潍坊网站建设 58,wordpress+背景透明,商业网点的定义菱形继承概念#xff1a; 1.两个派生类继承同一个基类 2.又有某个类同时继承着两个派生类
这种继承被称为菱形继承#xff0c;或者钻石继承
举个例子#xff1a;
菱形继承问题#xff1a; 1.羊继承了动物的数据#xff0c;鸵同样继承了动物的数据#xff0c;当羊驼使…菱形继承概念 1.两个派生类继承同一个基类 2.又有某个类同时继承着两个派生类
这种继承被称为菱形继承或者钻石继承
举个例子
菱形继承问题 1.羊继承了动物的数据鸵同样继承了动物的数据当羊驼使用数据时就会产生二义性 2.羊驼继承自动物的数据继承了两份其实我们应该清楚比如年龄这份数据我们只需要一份就可以
我们可以利用虚继承解决菱形继承资源浪费的问题 代码如下
#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 {};void test01() {SheepTuo st;st.Sheep::m_Age 18;st.Tuo::m_Age 28;//当菱形继承两个父类拥有相同数据需要加以作用域区分cout st.Sheep::m_Age st.Sheep::m_Age endl;cout st.Tuo::m_Age st.Tuo::m_Age endl;//这份数据我们知道 只要有一份就可以菱形继承导致数据有两份资源浪费,用虚继承解决该问题cout st.m_Age st.m_Age endl;}int main() {test01();return 0;
}