-1


サブスクリプション演算子をオーバーロードしようとしていますが、たとえばクラスがEであるなどの問題に直面しています。最初に行ったことは次のとおりです。

int E::operator[](int n){
    if(n<length && n>0)
        return data[n];
    else
        return 0;

}

E ( A )のオブジェクトがあり、A[0] を返したいとします。この演算子は正常に動作します。
私がやりたかった2番目のことは、やりたいかどうかですA[0] = 4
ここで何を実装する必要がありますか? 代入演算子? またはサブスクリプションオペレーター?
どうすればいいのかアドバイスをいただきたいです、ありがとうございます!

4

2 に答える 2

2

要素への参照を返す必要があります。つまり、

int& E::operator[](size_t n)
{
   if ( n >= length)
      throw std::out_of_range("Index out of range");
   return data[n];
}
于 2013-07-31T07:50:00.667 に答える
1

通常、添字演算子は 2 つのオーバーロードで記述されます。1 つは読み取り用、もう 1 つは書き込み用です。これにより、const コンテキストで読み取ることができます。

書き込みオーバーロード:

int& E::operator[](size_t index)
{
    if( index >= lenght )
        throw std::out_of_range("Subscript out of range");
    else
        return data[n];
}

オーバーロードの読み取り: (const cualified であることに注意してください)

int E::operator[](size_t index) const
{
    if( index >= lenght )
        throw std::out_of_range("Subscript out of range");
    else
        return data[n];
}
于 2013-07-31T08:40:58.720 に答える