#include<iostream>
#include<string>
using namespace std;
class animal {
public:
int m_Age; //动物类有一个年龄属性
};
class Sheel :virtual public animal { //继承了基类:动物类 羊类也有一个年龄属性
};
class camel :virtual public animal { //继承了基类:动物类 骆驼也有一个年龄属性
};
class alpaca : public Sheel, public camel { //继承了骆驼和羊,这是一个羊驼类,他菱形继承了其他两个类的属性
};
void test() {
alpaca mie;
mie.m_Age = 5;
cout << "年龄是:" << mie.m_Age << endl; //这样就出错了,因为羊驼的实例
//mie不知道这个age到底是谁的,所以,虚继承就派上用场了
}
int main() {
test();
}
虚继承(virtual)会将成员做成指针,vbptr(virtual base pointer).最后以地址+偏移的方式指向仅有的m_Age地址,这样数据就成了独一份了.