2011-05-26 28 views
0
friend ostream& operator<<(ostream& os, MyClass& obj); 

我擁有電子幾個問題:
1.爲什麼我需要寫「朋友」?
2.爲什麼我需要在'operator','os'和'obj'之前寫'&'?ostream的超載

+1

重複的排序http://stackoverflow.com/questions/236801/should-operator-be-implemented-as-a-friend-or-as-a-member-function – SteveMc 2011-05-26 16:19:23

回答

0

& in MyClass&使參數參考到MyClass對象,而不是對象本身。 (與其他類似)

引用是輕量級傳遞的,並且您對obj所做的任何更改都會影響原始對象。如果沒有&,您將指示編譯器在調用中構建全新的MyClass,並在返回時銷燬它,並丟棄對內部狀態所做的任何更改。

ostream&的回報通常用於返回相同的ostream &那是,所以你可以編寫cout << "hello " << 42 << endl;移鏈,並讓他們的行爲你期望的方式通過。 (您可能使其返回不同的東西 - C++可以很容易地完全混亂與人們的預期 - 但不這樣做。)

+1

不**返回* *(MyClass的引用或對象),它**接受** MyClass。 – 2011-05-26 16:42:40

+0

@Rob哎呀!大腦失敗。固定 - 謝謝。 – crazyscot 2011-05-26 17:04:42

0

。爲什麼我需要寫'朋友'?

ostream改變左參數(改變流的狀態),因此按照一般操作符重載語義應被實現爲左操作數類型的構件。但是,其左操作數是來自標準庫的流,當您爲自己的類型實現輸出和輸入操作時,不能更改標準庫的流類型。這就是爲什麼你需要爲你自己的類型實現這些運算符作爲非成員函數。