通过应用超载下标操作员来意外输出

unexpected output by applying overloaded subscript operator

本文关键字:意外 输出 操作员 下标 应用 超载      更新时间:2023-10-16

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