簡體   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