2010-05-04 64 views
3

給出一個簡單的類,重載 '[]' 操作員工作:與運營商[]和operator =

class A 
{ 
    public: 
    int operator[](int p_index) 
    { 
     return a[p_index]; 
    } 

    private: 
    int a[5]; 
}; 

我想完成以下任務:

void main() 
{ 
    A Aobject; 

    Aobject[0] = 1; // Problem here 
} 

我怎麼能過載在這種情況下,賦值'='操作符與'[]'操作符一起使用?

回答

16

您不要超載=運營商。你返回一個參考。

int& operator[](int p_index) 
{ 
    return a[p_index]; 
} 

確保提供const版本,以及:

const int& operator[](int p_index) const 
{ 
    return a[p_index]; 
} 
+2

+1。另外,你可能想要在const上重載:'int operator [](int p_index)const' – 2010-05-04 15:53:49

+2

在const版本中,你可以返回一個普通的'int'而不是'const int&'。 – 2010-05-04 16:08:19

+1

@David,如果你想接受它的地址,這可能不是一個好主意。 'foo = &a[0];'被'a'爲常量'A'。 – 2010-05-04 16:37:27

5

讓它返回一個參考:

​​

請注意,您還需要一個const版本,它不回值:

int operator[](int p_index) const 
{ 
    return a[p_index]; 
} 
0

這裏的問題是你正在返回包含在可變參數a中的值。

主要是你試圖分配int變量不可用。

你會看到編譯錯誤「error C2106:'=':左操作數必須是l值」就像這樣。

表示該值不能分配給不可用的變量。

請將運算符[]重載函數的返回類型更改爲引用或指針,它將正常工作。