1

そのため、作成中のクラスに対して 2 つのバージョンのブラケット演算子を作成する必要があります。

詳細: クラスには、文字列の配列であるプライベート変数があります。operator[] のバージョンは、一方が const でなければならず、他方がそうでないという点で異なります。

これら 2 つのバージョンが実際にどのように異なるのか、また呼び出されたときにどのように区別できるのか、少しわかりません。

今書いてるやつ

string& MyClass::operator[](unsigned int index);

単にインデックスの文字列を返します。

私の質問は、1 つの const と 1 つの非 const を持つことのポイントは何ですか? そして、それらは互いにどのように異なりますか?

編集:これらを書かなければならないので、各関数内のコードは同じですか?

4

1 に答える 1

3

オーバーロードされた正しいバージョンは次のとおりです。

  1. 非 const MyClass インスタンスへのアクセス

    std::string& MyClass::operator[](unsigned int index);

  2. const または temp MyClass インスタンスへのアクセス

    const std::string& MyClass::operator[](unsigned int index) const;

後者は、定数インスタンス参照を介したアクセスでは、返されたstd::string参照を変更できないことを保証しますが、結果を返すことはできます。

実装では、少なくとも新しい (既定の) 文字列値を現在不明なインデックス値のコンテナーに追加できることを考慮する必要がある場合があります。また、アクセスのために不明なインデックス値を処理する方法const(空の文字列を返す、例外をスローするなど)を決定する必要があります。 .)。

于 2013-04-23T20:57:34.640 に答える