-1

C++中函數重載和麪向對象之間是否存在關係?重載和麪向對象之間的關係

如果是,那麼這是什麼關係?

+0

不知道爲什麼有人低估了這個問題。這可能不是一個編程問題,但它是一個關於編程的重要概念。也許他們認爲它更適合其他網站。也許http://programmers.stackexchange。com /但我不確定。 –

回答

4

它們是相關的,大多數面向對象的系統的特徵之一是某種多態性,重載也提供了一種多態的形式(特別是一種特殊的多態性形式)。

C++提供的多態性主要集中在三個方面:

  • 超載(特設多態的一種形式)
  • 模板(也特設多態的一種形式)
  • 類繼承(一種形式由於將每個類定義爲一個類型,所以存在亞型多態性)

事實上,這些特徵中的每一個都提供了某種多態性,使得它們相關。

-1

函數重載與面向對象方向中最深層次的想法之一有關:數據類型指示函數或操作符的行爲方式。

一個相關的想法是操作符重載。運算符(例如+或 - )可以應用於不同的數據類型,並且運算符將爲涉及的類型執行正確的操作。

您也可以爲自己的類型編寫操作符函數。

您可以看到運算符以核心語言重載。添加兩個整數並添加兩個浮點數需要不同的機器指令。

C++編譯器根據在表達式類型執行不同的低級例程:

a + b 

如果類型的參數變化時,編譯器會生成不同的指令。

再次,這個想法是一個根深蒂固的目標定位:涉及的數據類型決定了函數的行爲。

然而,重載並不是完全實現這個想法。類型信息可能在編譯時不完美。這就是多態性發揮作用的地方。

+1

這不是我倒下了你。但是你錯過了目標。函數可以與多種類型一起工作的想法與OO無關,它是多態的基礎。類型口述行爲也僅僅是C++中類型的一個意外事件,還有OO系統,其中對象指示行爲而不具有類型。你的最後一句話是非常錯誤的,因爲它意味着多態與重載是分開的,而重載實際上是一種多態。另外你專注於運算符重載,但是C++比運算符的重載要多得多。 –

3

這些是不同的概念。

如上所述,重載是使用類型來確定函數的。

面向對象編程是模擬事物概念中數據和函數的邏輯組織 - 通常是現實世界的事物或其抽象。

尋求解決類似問題的語言通常提供兩種功能,但一種可以自由使用一種工具而不會損害其他功能。

相關問題