1
ostream& operator<<(ostream& os, const PT& p)
{
   os << "(" << p.x << "," << p.y << ")";
}

PTは構造体でxyはそのメンバーです。
上記の行が正確に何をするのか、誰か説明してください。を使用して目的のテキストを印刷できませんcoutか?

このサイトからこのコード スニペットを見つけました。

4

4 に答える 4

4

カスタム オーバーロードですoperator<<

これは、次のことができることを意味します。

PT p = ...;
std::cout << p << "\n";

またはこれ:

PT p = ...;
std::stringstream ss;
ss << p << "\n";
std::cout << ss;

または他の多くの便利なもの。

ただし、引用したコードは正しく動作しないことに注意してください。返す必要がありますos

于 2012-06-16T15:19:33.947 に答える
1

これにより、PT を出力する方法が提供されます。これで、次のように使用できます。

PT p;
std::cout << p;

これはの呼び出しに変換されます

operator<< (std::cout, p);

これはオーバーロードと一致するため、動作し、x と y の値を角かっこで囲み、ユーザーの負担を軽減します。実際、そうである必要はありませんcout。「である」ものなら何でもかまいませんstd::ostream。それから継承するものはかなりあります。つまり、それらもstd::ostreams であるため、これはそれらでも機能します。std::ofstream、ファイル I/O は一例です。

あなたが見つけたサンプルが実行しないことの 1 つですが、実行する必要があるのはreturn os;. そうしないと、改行を印刷するために使用する印刷std::cout << p << '\n';結果がp返されないため、何とも言えません。cout

于 2012-06-16T15:19:32.650 に答える
0

この演算子<< PTクラスのオブジェクトを出力するためのオーバーロード。

ここ:

ostream& operator<<(ostream& os, const PT& p)

最初のパラメータは、 pが追加される出力ストリーム用です。これは、次のようにチェーンするためのosへの参照を返します。

cout << pt << " it was pt" << endl;
于 2012-06-16T15:23:24.853 に答える
0

<< 演算子が PT オブジェクトをストリームに追加できるようにします。オブジェクトには、コンマ区切りで追加された要素 x と y があるようです。

于 2012-06-16T15:20:22.570 に答える