過載函式是函式的一種特殊情況,為方便使用,c++允許在同一範圍中宣告幾個功能類似的同名函式,
但是這些同名函式的形式引數(指引數的個數、型別或者順序)必須不同,也就是說用同乙個運算子完成不同的運算功能。
舉個例子
我們要寫個求絕對值的函式,因為資料型別不同,導致我們要寫乙個 整形 和乙個 浮點型 一共兩個名字不同的求絕對值函式,使用的時候也需要根據變數型別的不同而進行選擇
(上面一行所說的前提是在沒有或不用函式過載的情況下,並非所有語言都有函式過載這一功能)
但通過函式過載,我們可以把兩個函式都命名為同乙個名字
把這兩個功能相似的函式通過函式過載為兩個名字相同的函式,方便了函式呼叫
值得注意的是,函式過載以 函式引數 作為判斷 兩個同名的函式 是否是 兩個不同的函式的依據
so,改函式的函式型別識別符號是沒有用的
//像上面的兩個函式,當在 mian 函式中呼叫 abs 函式時錯誤示例
intabs(int a)
double
abs(int a)
int系統就會因為不知道呼叫哪個函式而報錯main()
函式過載規則:
還有一種特殊情況也是要注意的
那就是使用預設形參的過載函式
//這麼寫的時候,編譯器編譯的時候肯定會「懵逼」錯誤示例
#include using
namespace
std;
int test(int x, int y=5
)int test(int
x)int
main()
這種寫法會產生歧義,編譯器也不知道你要呼叫的是哪乙個函式
最後,把兩個功能完全不同的兩個函式命名為同乙個名字,這樣子是會被拉出去祭天的
/*補充:函式過載僅僅是語法層面的,本質上它們還是不同的函式,占用不同的記憶體,入口位址也不一樣函式簽名:函式簽名(function signature),函式簽名包含了乙個函式的資訊,包括函式名、它的引數型別、它所在的類和命名空間及其他資訊。摘要:計算 x + y 的值
*/#include
using
namespace
std;
int test(int x, int
y)int test(int x, double
y)int
main()
函式簽名用於識別不同的函式,就像簽名用於識別不同的人一樣,函式的名字只是函式簽名的一部分。
C 入門基礎 函式過載
在生活中我們也會遇到 函式過載 你鼓起勇氣捧起鮮花向你心儀已久的女神表白,你將花用雙手遞給女神,含情脈脈對女神說 我喜歡上你了!這時女神大呼流氓反手乙個耳光就跑走了,周圍圍觀的群眾紛紛豎起大拇指直呼內行,而這時的你還不知道自己說錯了什麼話,會被女神直呼流氓。生活中的 函式過載 就是一詞多義,在c 中...
JAVA基礎 建構函式與函式過載
簡單粗暴的解釋 1 建構函式 必須與該類名稱相同!屬於new建立就會開始的操作。不設定時,系統會預設建立空的建構函式。2 函式過載 僅僅只有引數不同而已,其它都一樣。因為定義為乙個相同的函式名後功能效果大同小異。例項應用 package liyawen class person 類名和建構函式要一致...
c 基礎9 函式,函式過載和運算子過載
一.函式 1.函式過載,函式覆蓋,函式隱藏三者的區別,概念 函式過載 在乙個類中,函式與函式的函式名相同,引數型別或者引數的個數不同 函式覆蓋 在基類和派生類中,基類的函式必須是虛函式,兩個類中的函式與函式的函式名相同,引數型別和個數也完全相同 函式隱藏 在基類和派生類中,基類的函式必須不是虛函式,...