2010-05-04 66 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值”就像这样。

表示该值不能分配给不可用的变量。

请将运算符[]重载函数的返回类型更改为引用或指针,它将正常工作。