• 函数重载及缺省参数


    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++中习惯于先申明在定义!!!

      

  • 相关阅读:
    使用iptables禁止外网访问tomcat的8080端口
    解决ie浏览器下载apk或ipa变为zip
    'ᄈ'
    centos上安装grafana
    vertica单节点故障恢复 Startup Failed, ASR Required
    vertica审计日志
    centos安装nginx1.17.9
    centos上nginx转发tcp请求
    centos 安装mysql8.0.16
    centos下导出docx为html
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/7647440.html
Copyright © 2020-2023  润新知