通过应用超载下标操作员来意外输出
unexpected output by applying overloaded subscript operator
我的数组过载的下标[],在我尝试测试它的主要功能中,我感到困惑,没有得到我期望的输出。我期望0、0、0、0,但我得到16、9、4、1!这是我的程序:
// main.cpp
#include <iostream>
#include <stdexcept>
using namespace std;
class Arr{
private:
int a, b, c, d;
public:
Arr(){a = b = c = d = 0;}
int &operator[](int index){
switch (index) {
case 1:
return a;
case 2:
return b;
case 3:
return c;
case 4:
return d;
default:
throw range_error("bad index");
}
}
};
int main(){
Arr arr;
for(int i = 1; i <= 4; i++)
arr[i] = i * i;
for(int i = 4; i > 0; i--)
cout << arr[i] << ", ";
}
在您的main
功能中您创建一个Arr
的对象arr
。此时,调用构造函数,并且成员变量a, b, c, d
设置为0
。接下来,在for
循环中,成员变量a, b, c, d
设置为1, 4, 9, 16
,因为operator[]
方法将引用(int &
(返回到成员变量。这意味着arr[1]
是对成员变量a
的引用。当更改arr[1]
时,a
也会更改。在下一个for
循环中,值以相反的顺序打印。
相关文章:
- 字符串比较中的意外输出
- 来自 decltype 的意外输出类型
- 字符数组到十六进制字符串的转换 - 意外输出
- 使用 boost::regex 从目录中获取带有一些正则表达式的文件名称时出现意外输出
- 使用后序遍历递归的深度优先搜索会产生意外输出
- C++的意外输出
- 贝金纳C++练习解决方案的意外输出
- 无效* 转换获得意外输出
- 以下程序的意外输出
- 意外输出:矢量矢量(功率集)
- 基本 int 数组提供意外输出
- 线程的意外输出
- 减法中的意外输出
- 带有左移操作员C 的意外输出
- C strncpy意外输出
- 意外输出..函数绑定在虚拟表中的发生方式
- 星号的意外输出
- 已编译的 protobuf 文件的意外输出路径
- 打印对象矢量的意外输出
- 递归函数用于计算 n 个数字之和的意外输出