2016-05-05 9 views
3

をオーバーロード:C++、私はこのように、ヒープを作成してい配列演算子

struct Heap{ 
    int H[100]; 
    int operator [] (int i){return H[i];} 
    //...  
}; 

私はそれから要素を印刷しようとすると、私は次のようにします:

Heap h; 
//add some elements... 
printf("%d\n", h[3]); //instead of h.H[3] 

私の質問ではなく、場合、あります私はそれらを設定したい:

for(int i = 0; i < 10; i++) h[i] = i; 

どうすればいいですか?私はこのようにすることはできません...

ありがとう!

答えて

9

:あなたは、あなたのオペレータがこれに過負荷を変更する必要があります。 1つはconstオブジェクト用で、もう1つは非constオブジェクト用です。 constメンバ関数の戻り値の型は、const&または返されるオブジェクトに応じた値になることがありますが、非constメンバ関数の戻り値の型は参照になります。

struct Heap{ 
    int H[100]; 
    int operator [] (int i) const {return H[i];} 
    int& operator [] (int i) {return H[i];} 
}; 

これにより、配列演算子を使用して非constオブジェクトを変更できます。

Heap h1; 
h1[0] = 10; 

constにアクセスできます。

Heap const h2 = h1; 
int val = h2[0]; 
5

設定する必要がある参照を返すことができます。戻り値の型に&を追加します。

int& operator [] (int i){return H[i];} 
3

参考までにご返却ください。あなたの現在のバージョンでは、元の配列に影響を与えないこのコピーをコピーして編集しています。 operator[]関数のオーバーロードのカップルを提供するのが通例である

int& operator [] (int i){return H[i];} 
関連する問題