Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用重载运算符[]为左侧赋值?_C++_Operator Overloading - Fatal编程技术网

C++ 如何使用重载运算符[]为左侧赋值?

C++ 如何使用重载运算符[]为左侧赋值?,c++,operator-overloading,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 ){

我制作了以下代码:-

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;
}
A类{
bool-bFlag[2];
公众:
(){
对于(int i=0;i<2;i++)
bFlag[i]=假;
}
布尔运算符[](int r){//我知道如何使用运算符[]为r.H.S赋值
如果(r>=0 | | r<2){
bFlag[r]=真;
返回bFlag[r];
}
返回false;
}   
};
int main(){
obj;
布尔x;
x=obj[0];//这我知道
//obj[1]=x;//我怀疑怎么做?
返回0;
}
我不知道如何使用
运算符[]
将值设置为
L.H.S

请指导我如何将
x
值设置为
obj[1]

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

可以将引用返回给私人成员吗?
是的,非常好。
如果您看到STL,大多数STL类都会这样做。
规则是您应该向您的私人成员返回一个
const
引用。如果您不希望用户修改其中的内容,或者如果您希望允许用户修改内容,您可以返回一个
非const
引用


通过将类的详细信息设置为私有,基本上可以对类的用户隐藏(抽象)类的详细信息,但仍然提供了能够修改单个元素的功能。

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

但是这里
bFlag
是一个私有数据成员。我们可以引用私人数据成员吗?abhineet,回答您的评论:“是的”:-)非常感谢。这是我的下一个疑问,在那之前你已经给出了答案。