一、預設引數
1.概念
預設引數是宣告或定義函式時為函式的引數指定乙個預設值;在呼叫該函式時,如果沒有指定實參則採用該預設值,否則使用指定的實參。
2.分類
(1)全預設引數
void funtest(int a = 1, int b = 2, int c = 3)
(2)半預設引數
void funtest(int a, int b, int c = 3)
3. 注意
(1)半預設引數必須從右往左依次來給出,不能間隔給,下面的**就是錯誤的
void funtest(int a = 1, int b, int c = 3)
(2)預設引數不能在函式宣告和定義中同時出現,下面的**就是錯誤的
void funtest(int a = 1, int b, int c = 3);
void funtest(int a = 1, int b, int c = 3)
(3)預設值必須是常量或者全域性變數
(4)把字尾名改為.c,將會編譯錯誤
二、函式過載
1. 概念
函式過載是函式的一種特殊情況,是指在同一作用域
內,不同引數列表的函式,這組函式被稱為過載函式
,可以有一組具有相同函式名,常用來命名一組功能相似的函式,處理實現功能類似資料型別不同的問題,避免了名字空間
的汙染,對於程式的可讀性有很大的好處。
2. 條件
(1)名字必須相同
(2)引數列表一定不同(引數個數不同;引數型別不同;型別的次序)
(3)返回值型別是否相同沒有關係
3. 幾個問題
(1)extern 「c」有什麼作用?
在c++工程中在函式前加extern "c",就是將該函式按照c語言來編譯
extern "c" int add(int left, int right)
(2)c語言中為什麼不能支援函式過載?
在vs編譯器中,編譯.c檔案時,只會給函式名之前加上」_」;,所以加入兩個函式名相同的函式在編譯之後的函式名也照樣相同,編譯器呼叫時會因為不知道到底呼叫哪個而報錯
(3) c++中函式過載底層是怎麼處理的?
在vs編譯器中,編譯.cpp檔案時,雖然兩個函式的函式名一樣,但是他們在符號表中生成的名稱不一樣,例如
int add(int left, int right)
(?add@@yahhh@z)
『?』表示名稱開始,『?』後邊是函式名,「@@ya」表示參數列開始,後邊的3個字元hhh分別表示返回值型別,兩個引數型別;「@z」表示名稱結束; 由於兩個函式生成的符號表中的名稱不一樣,所以是可以編譯通過的
預設引數 函式過載
預設引數 帶有初始值的引數 注 1.非全預設引數,引數的預設值賦值要從最後邊從右向左依次進行 eg int sum int a,int b 1,int c 2 2.實參的匹配是從左向右進行的 eg int sum int a,int b 1,int c 2 sum 10,20 10對應a,20對應b...
c 函式過載和預設引數
函式過載 是c 語言物件導向的特點 多型的一種表現形式 又稱為靜多型 過載的規則 1 函式名相同。2 引數個數不同,引數型別不同,引數順序不同,均可構成過載。3 僅返回值型別不同則不可以構成過載。void func int a ok void func char a ok void func int...
函式過載和函式的預設引數
函式過載 如果同乙個作用域內的幾個函式名字相同但形參列表不同,我們稱之為過載函式。main函式不能過載。返回值不能用來判斷函式是否過載。引數列表不同 引數的個數不同 引數的型別不同 引數的順序不同 void print int a void print double b int print int ...