#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地址,这样数据就成了独一份了.

发表回复

后才能评论