函式過載是函式的一種特殊情況,c++允許在同一作用域中宣告幾個功能類似的同名函式,這些同名函式的形參列表(引數個數、型別、順序)必須不同,常用來處理實現功能類似而資料型別不同的問題
就像在自然語言中乙個詞有多個意思,需要根據上下文來判斷該詞的真實含義,既該詞被過載了,在c++中編譯器也會根據情況來呼叫同名函式,可以看下面這個例項
int
add(
int a,
int b)
double
add(
double a,
double b)
intmain()
extern "c"的主要作用就是為了能夠正確實現c++**呼叫其他c語言**。加上extern "c"後,會指示編譯器這部分**按c語言的進行編譯,而不是c++的。由於c++支援函式過載,因此編譯器編譯函式的過程中會將函式的引數型別也加到編譯後的**中,而不僅僅是函式名;而c語言並不支援函式過載,因此編譯c語言**的函式時不會帶上函式的引數型別,一般之包括函式名。
這個功能十分有用處,因為在c++出現以前,很多**都是c語言寫的,而且很底層的庫也是c語言寫的,為了更好的支援原來的c**和已經寫好的c語言庫,需要在c++中盡可能的支援c,而extern "c"就是其中的乙個策略。
這個功能主要用在下面的情況:
1、c++**呼叫c語言**
2、在c++的標頭檔案中使用
3、在多個人協同開發時,可能有的人比較擅長c語言,而有的人擅長c++,這樣的情況下也會有用到
總的來說本節知識總結為以下幾個問題:
1.下面兩個函式能形成過載嗎?
void
fun(
int a=10)
void
fun(
int a)
不會形成過載,函式過載跟預設無關,跟型別有關
2.c語言中為什麼不能支援函式過載?
因為c語言的名字修飾規則很簡單,函式名稱一樣會導致編譯器無法分辨
3.c++中函式過載底層是怎麼處理的?
c++利用name mangling(傾軋)技術,來改變函式名,區分引數不同的同名函式
4.c++中能否將乙個函式按照c的風格來編譯?
可以,在函式前面加extern "c"就可以告訴編譯器將該函式按照c語言的規則來編譯
mysql 函式過載 C 方法過載(函式過載)
在講解 c 構造方法 時提到定義構造方法時提到可以定義帶 0 到多個引數的構造方法,但構造方法的名稱必須是類名。實際上,這就是乙個典型的方法過載,即方法名稱相同 引數列表不同。引數列表不同主要體現在引數個數或引數的資料型別不同。在呼叫過載的方法時系統是根據所傳 遞引數的不同判斷呼叫的是哪個方法。例項...
C 函式 函式過載
如果同一作用域內的幾個函式名字相同但形參列表不同,我們稱之為過載函式。void print const char cp void print const int beg,const int end void print const int ia,size t size 這些函式接受的形參型別不一樣,...
C 函式過載
函式過載 overloaded function 在相同的作用域中的兩個函式,如果有相同的名字而形參表不同 注意 如果僅僅函式的返回值不同是不能實現函式過載 void func int int func int error,僅僅返回值不同是不能作為函式過載,這屬於函式重定義 形參表包括 引數的型別 ...