成员数据的初始化

题目描述

补全类 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;
    }
}