应用重载的下标运算符的意外输出

时间:2018-02-19 10:49:40

标签: c++

我为我的数组重载了下标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] << ", ";
}

1 个答案:

答案 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循环中,值将以相反的顺序打印。