ostream& operator<<(ostream& os, const PT& p)
{
os << "(" << p.x << "," << p.y << ")";
}
PT
は構造体でx
、y
はそのメンバーです。
上記の行が正確に何をするのか、誰か説明してください。を使用して目的のテキストを印刷できませんcout
か?
このサイトからこのコード スニペットを見つけました。
のカスタム オーバーロードですoperator<<
。
これは、次のことができることを意味します。
PT p = ...;
std::cout << p << "\n";
またはこれ:
PT p = ...;
std::stringstream ss;
ss << p << "\n";
std::cout << ss;
または他の多くの便利なもの。
ただし、引用したコードは正しく動作しないことに注意してください。返す必要がありますos
。
これにより、PT を出力する方法が提供されます。これで、次のように使用できます。
PT p;
std::cout << p;
これはの呼び出しに変換されます
operator<< (std::cout, p);
これはオーバーロードと一致するため、動作し、x と y の値を角かっこで囲み、ユーザーの負担を軽減します。実際、そうである必要はありませんcout
。「である」ものなら何でもかまいませんstd::ostream
。それから継承するものはかなりあります。つまり、それらもstd::ostream
s であるため、これはそれらでも機能します。std::ofstream
、ファイル I/O は一例です。
あなたが見つけたサンプルが実行しないことの 1 つですが、実行する必要があるのはreturn os;
. そうしないと、改行を印刷するために使用する印刷std::cout << p << '\n';
結果がp
返されないため、何とも言えません。cout
この演算子<< PTクラスのオブジェクトを出力するためのオーバーロード。
ここ:
ostream& operator<<(ostream& os, const PT& p)
最初のパラメータは、 pが追加される出力ストリーム用です。これは、次のようにチェーンするためのosへの参照を返します。
cout << pt << " it was pt" << endl;
<< 演算子が PT オブジェクトをストリームに追加できるようにします。オブジェクトには、コンマ区切りで追加された要素 x と y があるようです。