基礎 函式過載

2022-06-29 04:06:09 字數 1580 閱讀 2487

過載函式是函式的一種特殊情況,為方便使用,c++允許在同一範圍中宣告幾個功能類似的同名函式,

但是這些同名函式的形式引數(指引數的個數、型別或者順序)必須不同,也就是說用同乙個運算子完成不同的運算功能。

舉個例子

我們要寫個求絕對值的函式,因為資料型別不同,導致我們要寫乙個 整形 和乙個 浮點型 一共兩個名字不同的求絕對值函式,使用的時候也需要根據變數型別的不同而進行選擇

(上面一行所說的前提是在沒有或不用函式過載的情況下,並非所有語言都有函式過載這一功能)

但通過函式過載,我們可以把兩個函式都命名為同乙個名字

把這兩個功能相似的函式通過函式過載為兩個名字相同的函式,方便了函式呼叫 

值得注意的是,函式過載以 函式引數 作為判斷 兩個同名的函式 是否是 兩個不同的函式的依據

so,改函式的函式型別識別符號是沒有用的

//

錯誤示例

intabs(int a)

double

abs(int a)

像上面的兩個函式,當在 mian 函式中呼叫 abs 函式時

int

main()

系統就會因為不知道呼叫哪個函式而報錯

函式過載規則:

還有一種特殊情況也是要注意的

那就是使用預設形參的過載函式

//

錯誤示例

#include using

namespace

std;

int test(int x, int y=5

)int test(int

x)int

main()

這麼寫的時候,編譯器編譯的時候肯定會「懵逼」

這種寫法會產生歧義,編譯器也不知道你要呼叫的是哪乙個函式

最後,把兩個功能完全不同的兩個函式命名為同乙個名字,這樣子是會被拉出去祭天的

/*

摘要:計算 x + y 的值

*/#include

using

namespace

std;

int test(int x, int

y)int test(int x, double

y)int

main()

補充:函式過載僅僅是語法層面的,本質上它們還是不同的函式,占用不同的記憶體,入口位址也不一樣函式簽名:函式簽名(function signature),函式簽名包含了乙個函式的資訊,包括函式名、它的引數型別、它所在的類和命名空間及其他資訊。

函式簽名用於識別不同的函式,就像簽名用於識別不同的人一樣,函式的名字只是函式簽名的一部分。

C 入門基礎 函式過載

在生活中我們也會遇到 函式過載 你鼓起勇氣捧起鮮花向你心儀已久的女神表白,你將花用雙手遞給女神,含情脈脈對女神說 我喜歡上你了!這時女神大呼流氓反手乙個耳光就跑走了,周圍圍觀的群眾紛紛豎起大拇指直呼內行,而這時的你還不知道自己說錯了什麼話,會被女神直呼流氓。生活中的 函式過載 就是一詞多義,在c 中...

JAVA基礎 建構函式與函式過載

簡單粗暴的解釋 1 建構函式 必須與該類名稱相同!屬於new建立就會開始的操作。不設定時,系統會預設建立空的建構函式。2 函式過載 僅僅只有引數不同而已,其它都一樣。因為定義為乙個相同的函式名後功能效果大同小異。例項應用 package liyawen class person 類名和建構函式要一致...

c 基礎9 函式,函式過載和運算子過載

一.函式 1.函式過載,函式覆蓋,函式隱藏三者的區別,概念 函式過載 在乙個類中,函式與函式的函式名相同,引數型別或者引數的個數不同 函式覆蓋 在基類和派生類中,基類的函式必須是虛函式,兩個類中的函式與函式的函式名相同,引數型別和個數也完全相同 函式隱藏 在基類和派生類中,基類的函式必須不是虛函式,...