0

我对虚拟继承有疑问。我很感兴趣为什么这段代码会打印 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();
}
4

1 回答 1

2

基类按照它们声明的顺序进行初始化:onethen two。虚拟继承意味着它们共享同一个实例A,所以这里只调用了一个变量number

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

于 2013-06-20T17:43:06.930 回答