[英]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.