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 }