2013-10-08 32 views
3

我用C學習有關friend關鍵字++,我很奇怪,爲什麼有一個非成員函數,並使用friend關鍵字時,你可以讓非成員函數的成員函數?我希望我明確提出了我的問題,謝謝!爲什麼要使用非成員函數?

+0

我能想到的一個常見示例是重載'ostream'運算符。 – 2013-10-08 22:45:32

+1

http://www.gotw.ca/gotw/084.htm –

+0

@JerryCoffin:這是一個很好的參考,但公平地說,Sutter主要是在談論非朋友不成員,而問題是關於_friend_非 - 成員。 –

回答

8

因爲有時候你需要創建一個重載的操作在您的類類型是在右手邊。這必須作爲一項免費功能來實施。經典示例:

ostream& operator<<(ostream& str, my_type const& my) 
{ 
    // print out `my` into `str`---requires `friend` if using 
    // private members of `my_type` 
    return str; 
} 
+1

爲了說清楚,成員函數總是有自己的對象類型作爲第一個參數,但對於cout << ,您希望cout(ostream)作爲第一個參數。所以這不能作爲一個成員函數來實現。同樣適用於重載運算+,使得6個+ OBJ作品。這裏6是第一個不屬於類的參數。 – fayyazkl

相關問題