【发布时间】:2012-12-19 10:52:28
【问题描述】:
我遇到了这个询问其输出的问题。
#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;
}
我不明白的事情很少。 请澄清这些疑问。我无法谷歌搜索,因为我不知道要搜索什么。
第一季度。在代码中使用了参数化构造函数。在冒号(:)之后我们编写父类的构造函数。如何
A(int j=3):i(j){}
用过吗?因为我不是一个班级。
第二季度。在类 D 中,类的构造函数使用构造函数来初始化基类。但是可以看出,所有构造函数只修改了类 A 的变量 i。 那么这里的构造函数调用顺序是什么。
我知道当我们不调用父类的构造函数时,它是显式调用的并且顺序是众所周知的,但是当我们像这里这样隐式调用构造函数时会怎样。
第三季度。尽管初始化了参数,但我们在构造函数中发送的值似乎有所不同。为什么会这样?
【问题讨论】:
-
i(j)是一个初始化i的成员初始化器。
标签: c++ inheritance constructor virtual