虚拟公共继承?需要帮助理解代码

virtual public inheritance? Need help understanding code

本文关键字:帮助 助理 代码 继承 虚拟      更新时间:2023-10-16

我对虚拟继承有疑问。我很感兴趣为什么这个代码打印1000(来自"二"类)而不是3(来自"一"类)

这是代码:

#include <iostream>
using namespace std;
class A {
protected:
    int number;
public:
    A (int a=0) {number=a;}
};
class one:virtual public A {
public:
    one (int a=3) {number=a;}
    void print()  {cout<<number<<endl;}
};
class two :virtual public A {
public:    
    two (int a=1000) {number =a;}
    void print() { cout<<number<<endl; }
};
class B:public one,public two {
public:
    void print() { cout<<number<<endl; }
};
int main () {
    B A;
    A.print();
}

基类按照声明的顺序初始化:one然后two。虚拟继承意味着它们共享A的同一实例,因此这里只有一个名为number的变量。

初始化one会将3分配给number,然后初始化two会将1000分配给它。因此,初始化整个对象后,它最终会得到值1000。