重载括号运算符[]来获取和设置

Sag*_*Low 52 c++ indexing overloading square-bracket

我有以下课程:

class risc { // singleton
    protected:
        static unsigned long registers[8];

    public:
        unsigned long operator [](int i)
        {
            return registers[i];
        }
};
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我已经实现了方括号运算符"get".
现在我想实现它的设置,即:risc[1] = 2.

怎么做到呢?

And*_*ard 71

试试这个:

class risc { // singleton
protected:
    static unsigned long registers[8];

public:
    unsigned long operator [](int i) const    {return registers[i];}
    unsigned long & operator [](int i) {return registers[i];}
};
Run Code Online (Sandbox Code Playgroud)

  • 你也可以返回一个`const long&`.如果它不是本机类型,那么这种方式将是首选,但对于像`long`这样的类型,可以按值返回它. (12认同)
  • int 不应该替换为 size_t 吗? (2认同)

Nav*_*een 10

您需要从您的引用返回一个引用,operator[]以便该类的用户使用它来设置该值.所以函数签名就是unsigned long& operator [](int i).