ostream& operator<<(ostream& os, const PT& p)
{
os << "(" << p.x << "," << p.y << ")";
}
PT
是一個結構和x
,y
是其成員。
有人可以解釋一下上面的行是什麼。不能用cout
打印想要的文字?難度中的ostream
我遇到了this site這段代碼。
ostream& operator<<(ostream& os, const PT& p)
{
os << "(" << p.x << "," << p.y << ")";
}
PT
是一個結構和x
,y
是其成員。
有人可以解釋一下上面的行是什麼。不能用cout
打印想要的文字?難度中的ostream
我遇到了this site這段代碼。
這提供了輸出PT的方法。現在,你可以使用這個:
PT p;
std::cout << p;
這被翻譯成
operator<< (std::cout, p);
打電話符合您超載,所以它的工作原理,與上事半功倍打印在括號中的x和y的值用戶的一部分。事實上,它不一定是cout
。它可以是任何「是」std::ostream
。有很多東西可以繼承,也就是說,它們也是std::ostream
,所以這也適用於它們。 std::ofstream
,對於文件I/O,就是一個例子。
您發現的樣本有一件事不能做,但應該是return os;
。如果不這樣做,則不能說std::cout << p << '\n';
,因爲打印p
的結果不會返回cout
供您用來打印換行符。
你的意思不是寫這個 - ostream&operator <<(ostream&os,const PT&p){os <<「(」<< p.x <<「,」<< p.y <<「)」;我們可以寫這個 - std :: cout << p – VenkateshJN
@ user1460207,你已經重載了'operator <<'。通常,當你說'std :: cout << p;'時,它不知道如何輸出'PT'。現在你告訴它,每當它試圖打印一個「PT」時,它應該打印'「(」+ pt.x +「,」+ pt.y +「)」'。否則,你必須格式化所有用來輸出像這樣的PT的語句,這非常冗餘。 – chris
明白了:)。非常感謝! – VenkateshJN
這是custom overload的operator<<
。
這意味着你可以這樣做:
PT p = ...;
std::cout << p << "\n";
或本:
PT p = ...;
std::stringstream ss;
ss << p << "\n";
std::cout << ss;
或很多其他有用的東西。
但是,應該指出,你引用的代碼將無法正常工作。它需要返回os
。
爲什麼需要寫這行:std :: cout << ss – VenkateshJN
它是什麼原因返回os? – VenkateshJN
@ user1460207,這與'cout << ss'無關。這是一個照顧,因爲'std :: stringstream'已經做了你在這裏做的。感興趣的部分是'ss << p',其中'cout'不是'ostream&',而是'ss'。它證明它不僅僅是'cout'。至於返回,它可以級聯調用:'cout << p1 <<''<< p2;'。你將需要'cout'來輸出p1之後的東西。 – chris
它允許運營商將PT對象附加到流中。看起來該對象具有添加了逗號分隔符的元素x和y。
該運算符< <重載用於輸出PT類的對象。
這裏:
ostream& operator<<(ostream& os, const PT& p)
第一個參數是對於其中p將附加輸出流。 它返回參考到OS的鏈接是這樣的:
cout << pt << " it was pt" << endl;
嗯,首先人的這個代碼包含一個錯誤。 :-( –
什麼問題? - 返回操作系統缺失? – VenkateshJN
是的,就是這樣。 –