函式過載為了使函式名字方便使用
在c語言中,函式名必須是唯一的,程式不允許出現同名的函式。在c++中是允許出現同名函式的,這種現象稱為函式過載。
函式過載的目的為了方便的使用函式名
實現函式過載的條件
同乙個作用域
引數個數不同
引數型別不同
引數順序不同
namespace a
void
test
(int a)
void
test
(char b)
//引數型別不同發生過載
void
test
(int a,
char b)
//引數個數不同發生過載
void
test
(char b,
int a)
//引數順序不同發生過載
}namespace c
//int test01(int a) //錯誤
//函式過載無法按返回值區分
}
函式過載和預設引數一起使用時,要注意二義性產生的問題
void
test02
(int a)
void
test02
(int a,
int b =
100)
intmain()
當編譯器能從**中確定唯一函式時,如int temp = fun(); 這不會出錯。然而,我們編寫**時可以忽略函式返回值。那麼這時候,如果乙個函式為void test(int a):和int test(int a);當呼叫test(10);這時編譯器不知道呼叫哪個函式。所以禁止使用返回值作為函式過載條件。
c++為了實現函式過載,編譯器做了一些事情,編譯器會給不同的引數型別取乙個別名,來區分函式,比如void test();編譯器可能會將函式修飾_test,當碰到void test(int a);可能修飾為_test_int,當碰到void test(int a, char b);可能修飾為_test_int_char。這使用「可能」這個字,不同編譯器會產生不同效果
我們可以進行檢視
1.win+r 輸入cmd開啟控制台
2.找到.cpp檔案所在目錄
3.生成彙編檔案 g++ -s test.cpp -o test01.s (test為檔名)
4.檢視內容 type 檔名
C 函式過載的實現原理
對於c 來說,多個函式可以同名,但是這些函式的引數型別必須不一樣,也就是說c 中相同的函式名函式引數不同代表了不同的函式,當你去呼叫這些函式時,編譯器可以根據你的傳入引數的型別去判斷你呼叫的是哪個函式。但是c 編譯器是怎麼實現的呢?先看看c對於函式的處理 執行命令 gcc s main c.c o ...
c 函式過載的實現原理
1.c 問什麼引入函式過載 在c語言中,如果我們寫兩個函式名相同的函式,編譯器會告訴我們,函式重定義的錯誤。我們還會遇到下面這個問題 如果我們寫乙個計算int型別的加法,另乙個計算double型別的加法,我們必須起兩個不同的函式名。而在c 中我們可以解決這兩個問題。我們可以用相同的函式名,只有引數列...
C 語法之函式過載
所謂函式過載是指同乙個函式名可以對應著多個函式的實現。例如,可以給函式名add 定義多個函式實現,該函式的功能是求和,即求兩個運算元的和。其中,乙個函式實現是求兩個int型數之和,另乙個實現是求兩個浮點型數之和,再乙個實現是求兩個複數的和。每種實現對應著乙個函式體,這些函式的名字相同,但是函式的引數...