Как присвоить значение левой стороне с помощью оператора перегрузки []? - PullRequest
2 голосов
/ 14 июля 2011

Я сделал следующий код: -

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 ]

5 голосов
/ 14 июля 2011

Чтобы использовать [] в качестве lvalue, ваш перегруженный [] должен вернуться по ссылке.

Можно ли вернуть ссылку на частного участника?
Да , это прекрасно.
Большинство классов STL делают это, если вы видите STL.
Правило заключается в том, что вы должны возвращать ссылку const своему частному участнику, если вы не хотите, чтобы пользователь изменял содержимое, или если вы хотите, чтобы пользователи могли изменять его, вы можете вернуть ссылку non const.

Вы в основном скрываете (Абстрагируете) детали своего класса от пользователя класса, делая их private, но вы все равно предоставляете функциональность, позволяющую изменять отдельные элементы.

4 голосов
/ 14 июля 2011

Все верно, но вот пример:

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];
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...