c++ - 数组下标运算符重载

标签 c++ operator-overloading

在重载数组索引运算符 [] 时,我无法理解 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 *objobj[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/

相关文章:

c++ - 重载括号运算符作为成员函数

c++ - 如何在 C++ 中使用旧的 iostream.h (Visual Studio 2010)

c++ - C/C++ : source file after preprocessing-Diab compiler?

c++ - 当使用无效表达式时,概念是否应该编译失败?

c++ - 重载运算符上的 bad_lexical_cast 异常 ">>"

C++ Overload Operator = for Pointers 不能正常工作/编译

c++ - C++ 中 operator new[] 的参数值

c++ - 错误 C2552 : 'pairs' : non-aggregates cannot be initialized with initializer list

c++ - 在 C++ 中定义构造函数的更好方法是什么?初始化列表或 Ctor 主体中的初始化?

c++ - 指针数组的问题