#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
来自黑马视频,我只是在这做笔记