c 函式過載和預設引數

2021-07-29 14:26:20 字數 1312 閱讀 3732

函式過載 是c++語言物件導向的特點–多型的一種表現形式 (又稱為靜多型)。

過載的規則:

1、函式名相同。

2、引數個數不同,引數型別不同,引數順序不同,均可構成過載。

3、僅返回值型別不同則不可以構成過載。

void func(int a); //ok

void func(char a); //ok

void func(int a,char b);//ok

void func(char a,int b);//ok

char func(int a);//error

匹配原則:

1、嚴格匹配,找到則呼叫。

2、通過隱式型別轉換尋求乙個匹配,找到則呼叫。

注:c++允許 int 到 long 和 double ;double 到 int 和 float 的隱式型別轉換。則遇到同時存在的隱式轉 換,會產生二義性錯誤。例:

void func(int a);

void func(float a);

則呼叫過載函式是傳入double型引數就會產生二義性。 func(1.0);

函式過載的底層實現是通過 name mangling(傾軋)技術來實現,即改名函式名,區分引數不同的的同名函式。對於上邊的函式,編譯器在編譯時(所以稱為靜多型)將以上函式的名字可能改為(僅為舉例說明,實際以編譯器為準):func_i(int a) ; func_i_c(int a,char b)等。

補充:

const修飾函式也可構成過載。(const修飾符具體見另一篇)

預設引數是c++提供的另一種機制,為了避免多次呼叫乙個函式同一實參時的重複書寫。

我們在寫函式時,給函式的引數帶上預設值。但注意:預設值只能在函式宣告時設定不能在函式定義時設定。

預設的規則:

1、預設的順序是從右向左依次設定,不能跳躍。

2、函式宣告和函式定義在一體時,預設引數在定義(其實就是宣告)處。宣告在前定義在後,預設在宣告

3、乙個函式,不能既作過載,又作預設引數宣告。因為當你少些乙個引數事,系統無法判別是過載還是預設引數。

例:

void print(int a){};

void print(int a,int b = 100){};

int main()

error:call of overloaded 『print(int a)』 is embiguous print(10);

C 函式過載, 預設引數

在我們的自然語言當中,乙個詞在不同的情景之下可能會有多重不同的含義,但是我們可以通過合理地判斷來確定該詞的真正含義,這種情況,我們可以說該詞被 過載 了.關於函式過載的概念 函式過載其實就是函式的一種特殊的情況,在我們的c 中允許在同一作用域當中宣告幾個功能類似的同名函式,但是這個同名函式的形參列表...

C 預設引數 函式過載

預設引數 預設引數是宣告或定義函式時為函式的引數指定乙個預設值。在呼叫該函式時,如果沒有指定實參則採用該預設值,否則使用指定的實參。例void testfunc int a 0 intmain 預設引數分類 1.全預設引數 void testfunc int a 10,int b 20,int c ...

預設引數和函式過載

一 預設引數 1.概念 預設引數是宣告或定義函式時為函式的引數指定乙個預設值 在呼叫該函式時,如果沒有指定實參則採用該預設值,否則使用指定的實參。2.分類 1 全預設引數 void funtest int a 1,int b 2,int c 3 2 半預設引數 void funtest int a,...