我遇到了这个询问其输出的问题。
#include<iostream>
using namespace std;
class A{
public:
int i;
A(int j=3):i(j){}
};
class B:virtual public A{
public:
B(int j=2):A(j){}
};
class C:virtual public A{
public:
C(int j=1):A(j){}
};
class D:public B, public C {
public:
D(int j=0):A(j), B(j+1), C(j+2){}
};
int main()
{
D d;
cout<<d.i;
return 0;
}
我不明白的事情很少。请澄清这些疑问。我无法谷歌搜索,因为我不知道要搜索什么。
Q1。在代码中使用了参数化构造函数。在冒号(:) 之后我们编写父类的构造函数。如何
A(int j=3):i(j){}
用来?因为我不是一个班级。
Q2。在类 D 中,类的构造函数使用构造函数来初始化基类。但是可以看出,所有的构造函数都只修改了类 A 的变量 i。那么这里的构造函数调用顺序是什么。
我知道当我们不调用父类的构造函数时,它是显式调用的并且顺序是众所周知的,但是当我们像这里这样隐式调用构造函数时会怎样。
Q3。尽管初始化了参数,但我们在构造函数中发送的值似乎有所不同。为什么会这样?