使用virtual虚继承可以让中间的多个子类共享父类的属性,避免相同属性多义性。
下面用动物,羊和驼,羊驼类来演示。
#include<iostream>
using namespace std;
class Animal
{
public:
int m_Age;
};
class Yang : virtual public Animal{};
class Tuo : virtual public Animal{};
class YangTuo : public Yang,public Tuo{};
int main() {
YangTuo yt;
yt.Yang::m_Age = 18;
yt.Tuo::m_Age = 28;
cout << "yt.Yang::m_Age = " << yt.Yang::m_Age << endl;
cout << "yt.Tuo::m_Age = " << yt.Tuo::m_Age << endl;
cout << "yt.m_Age = " << yt.m_Age << endl;
}
从结果可以看到,用virtual虚继承后,所有子类共享同一个m_Age属性,原理就是虚指针指向同一个地址值。