1 //菱形继承 2 //俩个派生类继承同一个基类 3 //又有某个类同时继承俩个派生类 4 //成为 菱形继承 或者 钻石 继承 5 6 #include <iostream> 7 #include <string> 8 using namespace std; 9 10 //动物类 11 12 class Aninmal 13 { 14 public: 15 int m_Age; 16 }; 17 //利用虚继承 解决菱形继承的 问题 18 // //继承之前 加 virtual vbptr 虚基类指针 19 // Aninmal类称为 虚基类 20 //羊类 21 class Sheep :virtual public Aninmal 22 { 23 24 }; 25 26 27 28 //驼类 29 class Tuo :virtual public Aninmal 30 { 31 32 }; 33 34 //羊驼类 35 class SheepTuo :public Sheep, public Tuo 36 { 37 38 }; 39 void test01() 40 { 41 SheepTuo st; 42 43 st.Sheep::m_Age = 18; 44 st.Tuo::m_Age = 20; 45 //当菱形继承,俩个父类拥有相同的数据,需要加以作用域区分 46 cout << "st.Sheep::m_Age = " << st.Sheep::m_Age << endl; 47 cout << "st.Tuo::m_Age = " << st.Tuo::m_Age << endl; 48 cout << "st.m_Age = " << st.m_Age << endl; 49 50 //这份数据 我们知道 只有一份就可以 菱形继承导致数据两份 资源浪费 51 52 53 54 } 55 int main() 56 { 57 58 test01(); 59 60 61 system("pause"); 62 63 return 0; 64 65 }