#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的输出感到困惑。
答案 0 :(得分:2)
b = a
使用A(A &a)
为b
调用a
的初始化构造函数a
,这样b
和val
{{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
设置为1
,b
获取此值,并将自己的*val
设置为1
。
然后使用get()
打印两者,在返回之前再次增加每个2
。因此,get
上cout << a.get() << b.get();
的所有val
都会获得int*
。
我不知道为什么int
是{{1}}而不仅仅是{{1}},它只会混淆代码,并且让初学者更难掌握。< / p>