1

だから私はc++の宿題の割り当てをコーディングしていて、フォーマットされた出力メソッド(toString)をオーバーロードされた出力/挿入演算子に置き換えてほしいという最後の部分があります。100%正直に言うと、彼がこれによって何を意味するのか私にはわかりません。少し調べて、オーバーロードされた挿入演算子を使用してサンプルコードを見つけましたが、それをコードに組み込む方法が見つからないようです。私は間違った場所を見ているかもしれないと思いますが。私のtoStringは次のとおりです。

string Movie::toString() const {
    ostringstream oS;
    oS << "\n\n====================== Movie Information\n"
    << "\n             Movie Title:\t" << title << "  (" << releaseYear << ")"
    << "\n    US Rank & Box Office:\t" << usRank << "\t$" << usBoxOffice
    << "\nNon-US Rank & Box Office:\t" << nonUSRank << "\t$" << nonUSBoxOffice
    << "\n World Rank & Box Office:\t" << worldRank << "\t$" << worldBoxOffice
    << "\n";
    return oS.str();
}

私が言ったように、「オーバーロード」が何を意味するのかわからないので、何らかの理由でこれが問題を直接解決するのに十分な情報ではない場合は、彼が何を意味するのかを簡単に説明してください。オーバーロードされた出力演算子を使用した現在の出力。ありがとうございました

編集:これは私が持っている次の質問です。https://stackoverflow.com/questions/14924621/c-overloaded-output-operator-cont

4

2 に答える 2

6

関数をオーバーロードするということは、同じ名前で異なるパラメータータイプを持つ他の関数を提供することを意味します。演算子もオーバーロードされる可能性があります。多くの演算子には、と呼ばれるオーバーロード可能な対応する関数があります。operator??ここ??で、は演算子自体です。たとえば、2つのオブジェクトがxありy、クラスタイプTがの場合、をオーバーロードできますoperator+。演算子をオーバーロードすると、その演算子を型で使用することに何らかの意味を与えることができます。だから今あなたはすることができますx + y

ストリーム挿入演算子は<<です。それはあなたがするときに使うものですstd::cin << "hello";-それはストリームに挿入されます。この演算子は、上記でオーバーロードされたのと同じよう+に、オーバーロードすることもできます。オーバーロードする必要のある関数はと呼ばれoperator<<ます。

次のような二項演算子をオーバーロードする方法は2つあります<<(2つのオペランドが必要なため、左側に1つ、右側に1つありますleft << right)。1つは、それをタイプのメンバーにし、タイプのleft単一のパラメーターを与えることですrightleftもう1つは、のタイプとのタイプの2つのパラメーターを持つ非メンバー関数にすることですright。のタイプはにleftなりますのでstd::ostream、クラスを変更することはできません(標準で提供されているため)。したがって、オプション2を選択する必要があります。

したがって、無料の関数は次のようになる必要があります。

std::ostream& operator<<(std::ostream& os, const Movie& movie) {
  // Insert everything you want into `os`
  return os;
}

これで、この関数は、左側と右側でを実行<<するたびに呼び出されます。std::ostreamMovie

于 2013-02-17T17:48:15.333 に答える
3

あなたのタスクはoperator <<、オブジェクトの文字列表現を出力ストリームに書き込むことができるオーバーロードを書き込むことを意図していると思います。

std::ostream& operator <<(std::ostream& os, const Movie& movie) {
    os << "\n\n====================== Movie Information\n"
       << "\n             Movie Title:\t" << movie.title << "  (" << movie.releaseYear << ")"
       << "\n    US Rank & Box Office:\t" << movie.usRank << "\t$" << movie.usBoxOffice
       << "\nNon-US Rank & Box Office:\t" << movie.nonUSRank << "\t$" << movie.nonUSBoxOffice
       << "\n World Rank & Box Office:\t" << movie.worldRank << "\t$" << movie.worldBoxOffice
       << "\n";
    return os;
}

また、組み込み型の場合と同じように、この演算子を使用します。

Movie m;

// Do something with m

cout << m;      // Write m to the standard output
于 2013-02-17T17:44:48.037 に答える