【问题标题】:Overload bracket operators [] to get and set重载括号运算符 [] 以获取和设置
【发布时间】:2012-06-19 11:04:44
【问题描述】:

我有以下课程:

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

    public:
        unsigned long operator [](int i)
        {
            return registers[i];
        }
};

如您所见,我已经为“获取”实现了方括号运算符。
现在我想实现它进行设置,即:risc[1] = 2.

怎么做?

【问题讨论】:

    标签: c++ indexing overloading square-bracket


    【解决方案1】:

    试试这个:

    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];}
    };
    

    【讨论】:

    • 您也可以返回const long&。如果它不是本机类型,那么这种方式将是首选,但对于像 long 这样的类型,可以按值返回它。
    • 工作得很好...谢谢!
    • 请注意,最好在 i 上添加一个测试以确保它是介于 0 和 7 之间的数字。当处理比 long 复杂得多的类型时,您通常会创建一个引用类 (riscDataRef),其中包含必要的信息,以便您对主类进行更改。
    • 不应该用 size_t 替换整数吗?
    • @Andrew unsigned long operator [](int i) const {return registers[i];} 以上会被调用吗?我看到另一个被调用来获取和设置 unsigned long & operator [](int i) {return registers[i];}
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-10-18
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多