我的数组过载的下标[],在我尝试测试它的主要功能中,我感到困惑,没有得到我期望的输出。我期望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
循环中,值以相反的顺序打印。