菱形继承的概念:
两个派生类同时继承一个基类
又有某个类同时继承两个派生类
这种继承被称为菱形继承,或者钻石继承
典型的菱形继承案例:

菱形继承问题:
1羊继承了动物的数据,羊驼同样继承了动物的数据,当草泥马使用数据时,就会产生二义性。<br /> 2草泥马继承了来自动物的数据继承了两份,其实我们因该清楚,这份数据我们只需要一份即可。
示例:
#include<iostream>using namespace std;//(虚基类)动物类class Animal{public:int m_Age=10;};//羊类class Sheep:virtual public Animal{public:// int m_Age=20;};//利用虚继承 解决菱形继承问题//继承之前 加上关键字 virtual 变为虚继承(即两个父类继承的数据是共享的)//Animal类称为 虚基类//驼类class Tuo:virtual public Animal{// int m_Age=30;};class SheepTuo:public Sheep,public Tuo{};void show(){SheepTuo p;p.Sheep::m_Age=18;p.Tuo::m_Age=20;//当菱形继承 两个父类拥有相同的数据时 需要加作用域用来区分。cout<<"sheep="<<p.Sheep::m_Age<<endl;cout<<"Tuo ="<<p.Tuo::m_Age<<endl;//菱形继承会导致数据有两份(即子类继承了两个父类的相同的数据) 造成资源浪费cout<<"SheepTuo="<<p.m_Age<<endl;}int main(){show();return 0;}
总结:
1菱形继承带来的主要问题是子类继承两份相同的数据,导致资源的浪费以及这两份数据是毫无意义的
2利用虚继承可以解决菱形继承的问题。
