c++菱形继承
概念:
两个派生类继承同一个基类,又有某个类继承者两个派生类
这种继承叫派生继承或钻石继承。
菱形继承成员重名要加作用域,有些数据会出现重复继承的现象,实际上只需要一份数据就可以,从而造成资源浪费使用虚继承virtual可以解决i问题
class 子类:virtual 继承方式 父类
虚基类 其实底层通过各自虚基类指针指向了同一个一个地址
vbptr0-+
|
V
vbptr1--->vbtable
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 }