为什么这段代码的输出是22?

时间:2014-10-25 00:01:30

标签: c++

#include <iostream>
using namespace std;

class A {
    int *val;
public:
    A() { val = new int; *val = 0; }
    A(A &a) { val = new int; *val = a.get(); }
    int get() { return ++(*val); }
};

int main() {
    A a,b = a;
    cout << a.get() << b.get();
    return 0;
}

我无法解决这个问题。我对如何为这两个对象输出22的输出感到困惑。

2 个答案:

答案 0 :(得分:2)

b = a使用A(A &a)b调用a的初始化构造函数a,这样bval {{1} 1个(由于get影响a&#39; s val以及返回相同的值来初始化b&#39; s {{ 1}})。然后在val语句中调用get会将cout&{39}和a&#39; s b转为2并返回2 ..并且它们彼此相邻打印,因此val

答案 1 :(得分:0)

很简单。您创建的a *val设置为0

然后通过b创建b = a,它会调用复制构造函数。复制构造函数调用a.get()

A::get()val指向的值递增1,然后返回它。因此a*val设置为1b获取此值,并将自己的*val设置为1

然后使用get()打印两者,在返回之前再次增加每个2。因此,getcout << a.get() << b.get();的所有val都会获得int*

我不知道为什么int是{{1}}而不仅仅是{{1}},它只会混淆代码,并且让初学者更难掌握。< / p>