菱形继承解决方案 利用虚继承
操作的时共享的一份数据
sheepTuo内部结构
vbptr 虚基类指针 v:virtual b:base p:pointer
指向一张 虚基类表
通过表找到偏移量
找到共有的数据
如图:类Sheep和Tuo保留的只是虚函数指针,只有Animal里才有数据
实例:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class Animal { public: int m_Age; }; //虚基类 Sheep class Sheep:virtual public Animal { }; //虚基类 Tuo class Tuo: virtual public Animal {}; class SheepTuo :public Sheep, public Tuo { }; void test01() { SheepTuo st; st.Sheep::m_Age = 10; st.Tuo::m_Age = 20; cout << st.Sheep::m_Age << endl; //20 因为指向的时同一个地址 cout << st.Tuo::m_Age << endl; //20 cout << st.m_Age << endl; //20 可以直接访问m_Age数据 原因时因为没有二义性了 } int main() { test01(); system("Pause"); return 0; }
结果: