回答
它們是相關的,大多數面向對象的系統的特徵之一是某種多態性,重載也提供了一種多態的形式(特別是一種特殊的多態性形式)。
C++提供的多態性主要集中在三個方面:
- 超載(特設多態的一種形式)
- 模板(也特設多態的一種形式)
- 類繼承(一種形式由於將每個類定義爲一個類型,所以存在亞型多態性)
事實上,這些特徵中的每一個都提供了某種多態性,使得它們相關。
函數重載與面向對象方向中最深層次的想法之一有關:數據類型指示函數或操作符的行爲方式。
一個相關的想法是操作符重載。運算符(例如+或 - )可以應用於不同的數據類型,並且運算符將爲涉及的類型執行正確的操作。
您也可以爲自己的類型編寫操作符函數。
您可以看到運算符以核心語言重載。添加兩個整數並添加兩個浮點數需要不同的機器指令。
C++編譯器根據在表達式類型執行不同的低級例程:
a + b
如果類型的參數變化時,編譯器會生成不同的指令。
再次,這個想法是一個根深蒂固的目標定位:涉及的數據類型決定了函數的行爲。
然而,重載並不是完全實現這個想法。類型信息可能在編譯時不完美。這就是多態性發揮作用的地方。
這不是我倒下了你。但是你錯過了目標。函數可以與多種類型一起工作的想法與OO無關,它是多態的基礎。類型口述行爲也僅僅是C++中類型的一個意外事件,還有OO系統,其中對象指示行爲而不具有類型。你的最後一句話是非常錯誤的,因爲它意味着多態與重載是分開的,而重載實際上是一種多態。另外你專注於運算符重載,但是C++比運算符的重載要多得多。 –
這些是不同的概念。
如上所述,重載是使用類型來確定函數的。
面向對象編程是模擬事物概念中數據和函數的邏輯組織 - 通常是現實世界的事物或其抽象。
尋求解決類似問題的語言通常提供兩種功能,但一種可以自由使用一種工具而不會損害其他功能。
- 1. 面向對象和非面向對象之間的區別javascript
- 2. 數據庫表和麪向對象類之間是否存在關係?
- 3. PHP:面向對象的關係
- 4. JAVA - 兩個對象之間的關係
- 5. Javascript,對象之間的依賴關係
- 6. 在Hibernate之間在同一類的對象之間指定雙向關係
- 7. 兩個域對象之間的多重關係
- 8. Python中的iGraph:VertexDendrogram對象與VertexClustering對象之間的關係
- 9. 關係型數據庫和麪向對象的JavaScript的
- 10. 面向對象的數據庫對象關係數據庫
- 11. 數據對象和頁面的關係
- 12. ORM /如何處理Domain對象和Persistent對象之間的對應關係?
- 13. 如何編寫對象與對象列表之間的關係
- 14. 繼承場景中引用和對象之間的關係
- 15. Java對象和類/接口之間的關係程度?
- 16. 運行線程和線程對象之間的關係
- 17. 在Java對象和類之間的關係
- 18. 類型(元類)和對象(超類)之間的關係
- 19. Ecmascript和窗口對象之間的關係
- 20. 面向對象和系列化
- 21. 關係數據庫和麪向對象環境
- 22. 貯藏模板和麪向對象VS關係數據庫
- 23. 面向對象設計和循環依賴關係
- 24. 在實體和非實體對象之間創建關係
- 25. 保持類之間的雙向關係
- 26. 管理對象間關係
- 27. 關於面向對象和對象的問題
- 28. 關於面向對象和父母/子女關係的概念性問題
- 29. 負載和響應時間之間的關係是什麼?
- 30. 如何創建Rails的has_many_and_belongs_to_many關係的兩個對象之間的關係
不知道爲什麼有人低估了這個問題。這可能不是一個編程問題,但它是一個關於編程的重要概念。也許他們認爲它更適合其他網站。也許http://programmers.stackexchange。com /但我不確定。 –