2011-07-14 46 views
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; 
} 

我不知道用operator[]到值设置为L.H.S。 请指导我如何设置xobj[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]; 
    } 
}; 
+0

非常感谢。这是我的下一个疑问,你在此之前已经给出了解决方案。 – Abhineet

5

要使用[]作为左值的重载[]应参考返回。

是不是好返回参照私有成员?
,这是完全正常的。
大多数STL类的做,如果你看到的STL。
的规则是,你应该返回const引用您的私人会员,如果你不希望用户修改的内容有,或者如果你想允许用户修改它,你可以返回一个non const参考。

您基本上隐藏(摘要)类的用户的类的细节,使其成为private,但您仍然提供了可以修改单个元素的功能。

+0

但是这里'bFlag'是一个私人数据成员。我们可以参考私人数据成员吗? – Abhineet

+1

abhineet,回答你的评论:“是”:-) –

相关问题