为什么这段代码的输出是22
Why is the output of this code is 22?
#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;
}
我很难解决这个问题。我对 *val 如何为两个对象提供 22 的输出感到困惑。
b = a
使用a
调用初始值设定项构造函数 (A(A &a)
( 来b
,它给出a
和b
的val
1(由于get
影响a
的val
以及返回相同的值来初始化b
的val
(。然后在 cout
语句中调用 get
将 a
和 b
的 val
s 都变为 2,并返回 2。它们彼此相邻打印,因此22
.
很简单。您创建*val
设置为 0
的a
。
然后通过 b = a
创建b
,这将调用复制构造器。复制构造函数调用 a.get()
。
A::get()
将val
指向的值递增 1,然后返回它。所以a
*val
设置为 1
,b
会返回此值,并将自己的*val
设置为 1
。
然后,使用get()
打印两者,在返回之前再次增加每个。所以你从cout << a.get() << b.get();
的两个get
都得到了2
.
我不知道为什么val
是一个int*
而不仅仅是int
它只会混淆代码,并使初学者更难掌握。
相关文章:
- 为什么我的代码在输出中增加了93天
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 在我的代码中,获得最大的Pair Wise产品C++和输出并不总是正确的
- 我无法获取以下代码的输出
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 编译并运行后,输出未出现在 Visual Studio 代码中
- VI工作室代码错误无法打开输出文件主.exe
- 代码编译没有任何输出,入门程序
- 与其他编译器相比,相同的代码在工作室Microsoft提供不同的输出
- 可能我知道为什么这段代码没有给出任何输出吗?
- 从排序数组中删除重复项,具有不同代码方式的相同解决方案具有不同的输出
- Clang 给了我符号更改的警告,但代码仍然产生正确的输出
- 为什么这两个版本的代码给出不同的输出
- 以下与指针相关的代码的输出是什么?
- C++和 Python 中的代码相同,但输出不同
- 为什么我的代码块上没有显示输出?
- C++ 高级代码未给出正确的输出
- (C++)分解这个简单的输入/输出代码:
- 错误的输出代码
- 奇怪的输出(代码块codebblocks -16.01mingw-setup.exe)