根據我所提到的文本(Herbert Schildt的完整參考文獻),派生類不會繼承好友函數,並且好友函數可能沒有 存儲類說明符。也就是說,它們可能不會被聲明爲靜態或外部。爲什麼?對朋友功能的限制
Q
對朋友功能的限制
4
A
回答
8
派生類不會繼承好友函數嗎? [...]爲什麼?
因爲這會破壞封裝:派生類無法再控制其朋友,所以它無法控制誰有權訪問其內部。
它們可能不會被聲明爲static或extern,爲什麼?
因爲static
將毫無意義(它纔有意義上屬於一類的功能,friend
s爲無功能),以及extern
將再次破壞封裝,因爲該類有效不能控制不再哪些功能有權訪問它:由於是extern
,朋友可以有效地來自不同的編輯部門,這是該班級不知道的。
請參閱Jan的更正答案。
+2
對不起,這個答案的第二部分是完全錯誤的。 'static'對於自由函數是有意義的(使它們在編譯單元中是本地的),並且不包含關鍵字'static'的每個自由函數聲明隱含地包含'extern'。此外,類不與編譯單元相關聯。朋友可以有效地來自*任何*編輯單元,不管它是不同的,都不能被定義。 –
+0
@Jan你是對的。 –
5
- 繼承類沒有繼承炒功能,因爲在做這一點:
- 友元函數本身知道其朋友是類,但它不會神奇地瞭解一個新的子類,所以它不需要成爲它的朋友。
- 由於隱式轉換爲父類,所以仍然可以在派生類上使用該函數。
- 朋友聲明不能包含
static
和extern
,因爲它不是函數簽名的一部分,所以不需要指定函數。我相信函數本身的聲明可以(在類的外面)包含。
相關問題
- 1. C++ - 朋友功能
- 2. 朋友功能問題
- 3. 朋友和繼承功能
- 4. Facebook - 推薦朋友功能
- 5. 朋友功能和模板
- 6. F#朋友功能/類
- 7. 如何使用朋友功能或朋友類?
- 8. Facebook的JavaScript SDK:朋友邀請限制
- 9. 什麼是php中的朋友功能?
- 10. iPhone:告訴朋友功能庫
- 11. 爲朋友功能使用聲明
- 12. Facebook oauth 2.0邀請朋友功能
- 13. 朋友和非成員功能困境
- 14. 將會員功能設爲朋友
- 15. 朋友功能不起作用
- 16. FQL限制:需要外部蜘蛛來交朋友的朋友 - 使用什麼?
- 17. 選擇朋友的朋友sql的性能(但不是我的朋友)
- 18. Facebook朋友的朋友
- 19. SQL表爲朋友,共同朋友,朋友朋友等
- 20. C++:通過朋友類限制對象實例化
- 21. 朋友功能減速無法訪問功能聲明
- 22. 如何通過朋友功能調用私人功能?
- 23. 朋友模板功能,避免虛擬功能/抽象基地
- 24. 作爲朋友功能重載新功能?
- 25. 交友朋友的隨機朋友
- 26. 朋友功能可以創建新對象嗎? C++
- 27. 通過使用聲明對朋友功能是否合法?
- 28. PostgreSQL的:朋友的朋友,但我的那些朋友們
- 29. 如何讓我的朋友和朋友的朋友?
- 30. 如何獲得朋友的朋友的朋友...
把書扔掉,買一個新的。 Herb Schildt的書因爲技術上的不準確而被[普遍誹謗](http://www.cs.technion.ac.il/users/yechiel/CS/BadBooksC+C++.html#SchildtAny)。 –