函数重载及缺省参数

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\n", add(a, b));
22     printf("%d\n", add(a, b, e));
23     printf("%lf\n", 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\n", add());
13     printf("%d\n", 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\n", 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++中习惯于先申明在定义!!!

  

posted @ 2017-10-10 19:43  ouyang_wsgwz  阅读(658)  评论(0编辑  收藏  举报