C++函數重載遇到了函數默認參數情況


一、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相比多了很多的特性,但是在這些的特性中又會存在一個相互沖突的部分,函數重載與函數默認參數就是其中一個。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM