我对虚拟继承有疑问。 我很感兴趣为什么这段代码打印1000(从类“2”)而不是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();
}
答案 0 :(得分:2)
基类按声明的顺序初始化:one
然后two
。虚拟继承意味着它们共享A
的同一个实例,因此这里只有一个名为number
的变量。
初始化one
将3分配给number
,然后初始化two
为其分配1000。因此,在初始化整个对象之后,它最终得到值1000。