#include<iostream> using namespace std; class Animal { public: Animal() { m_Age = 0; } int m_Age; }; //利用虚继承 解决菱形继承的问题 //继承之前 加上关键字 virtual 变为虚继承 // Animal类称为 虚基类 //羊类 class Sheep:virtual public Animal { public: }; //驼类 class Tuo :virtual public Animal { public: }; //羊驼类 class SheepTuo :public Sheep, public Tuo { }; void test01() { SheepTuo st; st.Sheep::m_Age = 18; st.Tuo::m_Age = 28; //当菱形继承,两个父类有相同数据,需要加以作用域区分 cout << "st.Sheep::m_Age = " << st.Sheep::m_Age << endl; cout << "st.Tuo::m_Age = " << st.Tuo::m_Age << endl; //调用虚继承后 最后的数据也就会只是一份 即 st.Tuo::m_Age = 28,因此不加作用域也可以 //直接访问st.m_Age了 cout << "st.m_Age " << st.m_Age << endl; //这份数据我们知道 只有一份就可以了,菱形继承导致数据有两份,资源浪费 } int main() { test01(); }
v虚继承实质上是两个类对象指针指向同一个m_Age,一个偏移量为8,一个为4
来自黑马视频,我只是在这做笔记