如何使用Overload operator []为左侧赋值?

时间:2011-07-14 12:17:31

标签: c++ operator-overloading

我制作了以下代码: -

class A{
     bool bFlag[2];
public:
  A(){
      for(int  i = 0; i < 2; i++)
          bFlag[i] = false;
  }

  bool operator[](int r){ //i know how to assign value to R.H.S using operator[]
      if( r >= 0 || r < 2 ){
          bFlag[r] = true;
          return bFlag[r];
   }
   return false;        
  }   
};

int main(){
    A obj;
    bool x;
    x = obj[0]; //this i know
    //obj[1] = x; //how to do this is my doubt?
    return 0;
}

我不知道使用L.H.S将值设置为operator[]。 请引导我了解如何将x值设置为obj[1]

2 个答案:

答案 0 :(得分:5)

要使用[]作为左值,您的重载[]应该通过引用返回。

是否可以返回对私人会员的引用?
,完全没问题 如果您看到STL,大多数STL课程都会这样做 如果您不希望用户修改其中的内容,或者如果您想允许用户修改它,您可以返回const引用,则应该向私人成员返回non const引用。

您基本上通过使类private从类的用户隐藏(摘要)类的详细信息,但您仍然提供了能够修改单个元素的功能。

答案 1 :(得分:4)

Als是对的,但这是一个例子:

class A{
private:
    int val[10];
public:
    A(){}
    int& operator[](int i) {
        return val[i];
    }
};

这使得可以做像

这样的事情
A a;
a[2] = 2;

你当然应该添加旧方法。优化l值来制作它。

class A{
private:
    int val[10];
public:
    A(){}
    const int operator[](int i) const {
        return val[i];
    }
    int& operator[](int i) {
        return val[i];
    }
};