有这么复制构造的吗

题目描述

补全类 Magic 的定义,使得其输出符合下文的规定。

关于输入

关于输出

见样例输出

核心技巧

  • 注意关注复制构造函数调用的时机。

参考答案

#include <iostream>

class Magic {
public:
    int value;
    Magic() = default;
    Magic(int value) : value{value} {}
    Magic(const Magic& other) : value{other.value + 2} {}
};

class Magic2 {
public:
    Magic m;
    Magic2() = default;
    Magic2(int value) : m{value} {}
    Magic2(const Magic2& m2) = default;
};

void print(Magic o) {
    std::cout << o.value << std::endl;
}

int main() {
    Magic a(5);
    Magic b = a;
    print(b);

    Magic d;
    d = a;
    std::cout << d.value << std::endl;

    Magic2 e(8);
    Magic2 f = e;
    print(f.m);

    f = e;
    print(f.m);
}