在重载数组索引运算符 []
时,我无法理解 Array obj;
和 Array* obj = new Array;
之间的区别>。当我有指向该对象的指针时,我在 VS 2010 上收到这些错误消息。
错误 C2679:二进制“=”:未找到采用“int”类型右手操作数的运算符(或没有可接受的转换)
在尝试匹配参数列表“(Array, int)”时可能是“Array &Array::operator =(const Array &)”
#include <iostream>
class Array
{
int arr[10] ;
public:
int& operator[]( int index )
{
return arr[index] ;
}
};
int main()
{
//Array* obj = new Array; Error
Array obj; // Correct
for( int i=0; i<10; ++i )
obj[i] = i;
getchar();
return 0;
}
有人可以解释这两种运算符重载实例之间的基本原理吗?谢谢。
最佳答案
对于Array *obj
,obj[i]
等同于*(obj+i)
,因此它的计算结果为一个 Array
对象。
你必须做
int main()
{
Array* obj = new Array;
for( int i=0; i<10; ++i )
(*obj)[i] = i;
getchar();
return 0;
}
关于c++ - 数组下标运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4952851/