1.函数重载
对于相同(相似)的函数行为,用一个函数名进行管理;
一个函数名管理多个函数体;
构成函数重载的条件:1、函数名必须一致;2、参数列表不一致(参数列表的个数不一致;参数对应位置的类型不一致)
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 6 int add(int a, int b){ 7 return a + b; 8 } 9 10 int add(int a, int b, int c){ 11 return a + b + c; 12 } 13 14 double add(double a, double b){ 15 return a + b; 16 } 17 18 int main(){ 19 int a = 1, b = 2, e = 10; 20 double c = 1.23, d = 3.65; 21 printf("%d ", add(a, b)); 22 printf("%d ", add(a, b, e)); 23 printf("%lf ", add(c, d)); 24 return 0; 25 }
运行后,会产生如下效果:
2.函数的缺省参数
在函数定义的时候,给形参给出初始的值;当函数调用的时候,就可以不用在传实参,默认使用初始值;
当函数调用的时候给出实参,会用实参去替换掉默认的初始值
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 int add(int a = 1, int b = 2){ 6 return a + b; 7 } 8 9 int main(){ 10 int a = 10; 11 int b = 20; 12 printf("%d ", add()); 13 printf("%d ", add(a, b)); 14 system("pause"); 15 return 0; 16 }
注意:缺省的参数从后往前缺省(可以是 add(int a, int b=1) ; 不可以是 add(int a = 1,int b) )
3. 缺少参数和函数重载组合会产生二义性(二义性: 指的是一个东西在一种环境下会出现两种以上(包含两种)含义,导致难以清楚到底何种意思。)
当运行如下代码时:
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstring> 5 using namespace std; 6 7 int add(int a, int b){ 8 return a + b; 9 } 10 11 int add(int a, int b, int c = 1){ 12 return a + b + c; 13 } 14 15 int main(){ 16 int a = 10; 17 int b = 20; 18 int c = 100; 19 printf("%d ", add(a, b)); 20 system("pause"); 21 return 0; 22 }
缺省参数申明和定义分开(的情况)
要将缺省的参数写在申明中,定义并不需要写,如下:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int add(int a = 1, int b = 2); int main(){ system("pause"); return 0; } int add(int a, int b){ return a + b; }
C++中习惯于先申明在定义!!!