過載概念:同乙個識別符號在不同的上下文有不同的意義;
函式過載:
–同乙個函式名定義不同的函式;
–當函式名和不同的引數搭配時,表達的意思也不同;
–由函式名和函式引數列表決定的,與返回值無關係;
函式過載至少滿足以下條件:
–引數個數不同
–引數型別不同
–引數順序不同
編譯器呼叫函式過載時的原則:
①將所有同名函式作為候選者
②嘗試查詢可行的候選函式(以下幾種同時進行)
–通過函式名精確查詢;
#include
intfunc
(int a,
int b)
intgunc
(int a,
int b)
intmain()
–通過預設引數能夠匹配實參;
#include
intfunc
(int a,
int b,
int c)
intfunc
(int a,
int b)
intmain()
–通過預設型別能夠轉換實參;
#include
intfunc
(int a,
int b,
int c)
intfunc
(int a,
int b)
intmain()
③匹配失敗
–最終尋找到的可行候選函式不唯一,具有二義性;
–所有的候選引數皆不匹配,函式未定義;
函式過載與函式指標
–當使用過載函式名對函式指標進行賦值時
–根據過載規則挑選與函式指標引數列表一致的候選者;
–嚴格匹配候選者的函式型別與函式指標的函式型別;
#include
intfunc
(int a)
intfunc
(int a,
int b)
intfunc
(const
char
*a)typedef
int(
*punc)
(int a)
;int
main()
c++編譯器優先使用c++方式進行編譯,利用extern關鍵字強制讓c++編譯器用c的方式去編譯;
格式:extern
"c"#ifdef __cplusplus
//c++內建的巨集,只要是c++編譯方式就有這個巨集,實現c和
extern
"c"//c++皆可以編譯該檔案
#endif
內聯函式和函式過載
內聯函式 巨集可以避免函式呼叫帶來的開銷,但存在兩個問題 1 巨集沒有作用域,沒有型別檢測,另外定義巨集時,需要時刻注意加括號,除此之外,當傳入變數自增時,會出現不可避免的錯誤。2 c 中巨集不能作為類的成員函式,因為預處理器不能訪問類成員。內聯函式主要為了替代巨集,另外,類中的成員函式預設加了in...
過載函式 內聯函式
兩個以上的函式,具有相同的函式名,但是形參的個數或者型別不同,編譯器會根據實參型別及個數的最佳匹配來自動確定呼叫哪乙個函式。int add int x,int y float add float x,float y int add int x,int y,int z float add float ...
C 函式三(內聯函式和函式過載)
內聯函式,是為了解決程式中函式呼叫的效率問題。函式過載允許程式設計師定義函式時使用相同的函式名,以不同資料型別的資料作為形參,實現相似功能的函式。在呼叫函式時,系統要將程式當前的一些狀態資訊 斷點資訊儲存到堆疊中,同時轉到被調函式的 處去執行函式體語句,這些引數儲存與引數恢復的過程需要時間和空間開銷...