繁体   English   中英

数组下标运算符重载

[英]Array subscript operator overloading

我无法理解Array obj;之间的区别Array obj; Array* obj = new Array; 同时重载数组索引operator [] 当我有一个指向该对象的指针时,我在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;
}

您为Array定义了operator[] ,而不是为Array* 在注释掉的代码中,您将创建一个Array* 实际上,您不能为任何指针类型重载运算符。 []应用于指针会将其视为数组,将数组索引转换为指针算法。 因此,将[]应用于Array*产生一个Array (实际上是一个Array& )。 您不能将int分配给Array因为您没有定义它(也不想定义)。

现代的,编写良好的C ++很少使用关键字new 您不应怀疑您的C ++代码不包含关键字new 每次时你应该怀疑!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM