c++菱形继承

c++菱形继承

概念:

    两个派生类继承同一个基类,又有某个类继承者两个派生类

    这种继承叫派生继承或钻石继承。

  菱形继承成员重名要加作用域,有些数据会出现重复继承的现象,实际上只需要一份数据就可以,从而造成资源浪费使用虚继承virtual可以解决i问题

class  子类:virtual 继承方式 父类

虚基类 其实底层通过各自虚基类指针指向了同一个一个地址

          

    vbptr0-+

       |

       V

    vbptr1--->vbtable

 

 

c++菱形继承

 

 

 

 

 

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 class annimal
 5 {
 6 public:
 7     int m_Age;
 8     annimal()
 9     {
10         m_Age = 18;
11     }
12 };
13 class sheep:virtual public annimal
14 {
15 public:
16     sheep()
17     {
18         m_Age = 20;
19     }
20 };
21 class dog :virtual public annimal
22 {
23 public:
24     dog()
25     {
26         m_Age = 30;
27     }
28 };
29 
30 class sheepdog: public sheep,public dog
31 {
32 public:
33     sheepdog()
34     {
35         m_Age = 50;
36     
37     }
38 };
39 int main()
40 {
41     annimal p1;
42     sheep p2;
43     dog p3;
44     sheepdog p4;
45     cout << "p1.m_A=" << p1.m_Age << endl;
46     p1.m_Age = 20;
47     cout << "p1.m_A=" << p1.m_Age << endl;
48     return 0;
49 }

 

上一篇:Linux - 系统基础操作


下一篇:设计模式之三原型模式