成员数据的初始化
题目描述
补全类 Bet
的定义,使程序符合下文规定的输入输出行为。
关于输入
共 n 行,第 i 行为一个整数 ai。
关于输出
共 n 行,第 i 行为 ai 重复三遍,用逗号分隔,第四个数为 ai+1。
核心技巧
Alef
类不可默认构造。因此,必须在Bet
类的构造函数的初始化列表中提及。部分同学尝试只在构造函数体内编写alef = Alef(value);
,这是赋值而不是初始化。- 使用复制构造函数进行初始化时,所有成员对象也会进行复制构造初始化。
易错点提示
- 在初始化列表中编写
: alef{alef}
相当于用未初始化的alef
成员复制初始化alef
,这也是错误的。
参考答案
#include <iostream>
class Alef {
public:
int value;
Alef(int value) : value{value} {}
Alef(const Alef& a) : value{a.value + 1} {}
};
class Bet {
public:
Alef alef;
int value;
Bet(int value) : alef(value), value{value} {}
};
int main() {
int n;
while (std::cin >> n) {
Bet a1(n);
Bet a2 = a1;
std::cout << a1.value << "," << a1.alef.value << ","
<< a2.value << "," << a2.alef.value << std::endl;
}
}