我为我的数组重载了下标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] << ", ";
}
答案 0 :(得分:-1)
在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
循环中,值将以相反的顺序打印。