2011-07-14 45 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,回答你的評論:「是」:-) –

相關問題