一、C++中的函數重載
什么是函數重載?
我的理解是:
(1)用一個函數名定義不同的函數;
(2)函數名和不同參數搭配時函數會有不同的含義;
舉例說明:
1 #include <stdio.h> 2 #include <string.h> 3 4 int func(int x) 5 { 6 return x; 7 } 8 9 int func(int a, int b) 10 { 11 return a+b; 12 } 13 14 int func(const char* s) 15 { 16 return strlen(s); 17 } 18 19 int main(int argc,char* argv[]) 20 { 21 printf("func(3) = %d\n",func(3)); 22 printf("func(5,6) = %d\n",func(5,6)); 23 printf("func(\"file cpp\") = %d\n",func("file cpp")); 24 25 return 0; 26 }
運行結果:
分析:
函數的重載在使用時,會根據傳入的參數去選擇執行對應的函數
總結:函數重載至少要滿足下面的一個條件
(1)參數個數不同
(2)參數類型不同
(3)參數順序不同
二、C++中的函數默認參數
舉例說明
1 #include <stdio.h> 2 3 int func(int a, int b = 0) 4 { 5 return (a+b); 6 } 7 8 int main(int argc,char* argv[]) 9 { 10 printf("func(3) = %d\n",func(3)); 11 printf("func(3,2)= %d\n",func(3,2)); 12 13 return 0; 14 }
運行結果:
二、當函數重載與默認參數同時出現時
在剛剛開始學習的時候,分開學習函數重載和默認參數,兩種情況都理解了。但是,突然想到如果這兩個同時出現會會出現一個什么樣的結果呢?
實例代碼:
1 #include <stdio.h> 2 3 int func(int a) 4 { 5 return (a); 6 } 7 8 int func(int a, int b = 0) 9 { 10 return (a+b); 11 } 12 13 int main(int argc,char* argv[]) 14 { 15 printf("func(3) = %d\n",func(3)); 16 printf("func(3,2)= %d\n",func(3,2)); 17 printf("test for temp.cpp\n"); 18 return 0; 19 }
寫完了后,就在想代碼執行后,到底會調用哪一個函數呢?
結果:
編譯出錯,錯誤信息:error: call of overloaded ‘func(int)’ is ambiguous printf("func(3) = %d\n",func(3));
分析:
在C++的編譯器中,如果出現了函數重載和函數帶有默認參數時,編譯是會出錯的。
總結:
由於C++的語言特性,與C相比多了很多的特性,但是在這些的特性中又會存在一個相互沖突的部分,函數重載與函數默認參數就是其中一個。