C 函式過載

2021-09-29 13:50:58 字數 1165 閱讀 3273

函式過載是函式的一種特殊情況,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,僅僅返回值不同是不能作為函式過載,這屬於函式重定義 形參表包括 引數的型別 ...