• 第7课 函数参数的扩展


    1.  函数参数的默认值

    (1)C++中可以在函数声明时为参数提供一个默认值(注意是声明,不能在定义中提供

    (2)当函数调用时没有提供参数的值,则使用默认值

    【实例分析】默认参数值初探

    #include <stdio.h>
    
    //默认值只能在函数声明时提供
    int mul(int x = 0); //参数x的默认值为0
    
    int main()
    {
        printf("%d
    ", mul());   //传入默认值0
        printf("%d
    ", mul(-1)); //传入-1
        printf("%d
    ", mul(2)); //传入2
    
        return 0;   
    }
    
    int mul(int x)    //定义中,不能提供默认值,编译器会报错
    {
        return x * x;
    }

    (3)函数参数默认值的规则

      ①声明时,默认值必须从右向左提供

      ②函数调用时如果使用了默认值,则后续参数必须使用默认值

    【编程实验】默认参数的错误示例

    #include <stdio.h>
    
    //默认参数必须从右向左提供,诸如
    //int add(int x = 0,int y = 1,int z)是错误的
    int add(int x, int y = 1, int z = 2);
    
    int main()
    {
        //第2参数y使用了默认值,则后续的z也必须使用默认值
        //诸如add(1, ,3);的调用是错的。
        printf("%d
    ", add(0));      //x = 0, y = 1, z = 2
    
        printf("%d
    ", add(2, 3));   //x = 2, y = 3, z = 2
        printf("%d
    ", add(3, 2, 1));//x = 3, y = 2, z = 1
    
        return 0;   
    }
    
    int add(int x, int y, int z)
    {
        return x + y + z;
    }

    2. C++中的函数占位参数

    (1)占位参数只有参数类型声明,而没有参数名声明,如:int func(int x,int)

    (2)一般情况下,在函数体内部无法使用占位参数

    (3)占位参数的意义

      ①占位参数与默认参数结合起来使用

      ②兼容C语言程序中可能出现的不规范写法

    【编程实验】占位参数与默认参数值

    #include <stdio.h>
    
    //在C中int func()是可以接受任意参数的,所以在后来的调用中可能
    //出现func(1)、func(2, 3)等不同的调用,而这样的代码在C++中是
    //错误的,所以为了兼容C语言这种不规范的写法,可以给func提供两个
    //占用参数如func(int = 0,int = 0),则前面的两种调用就合法了,
    //这样花很少的代价,就可以让C的代码可以在C++中使用。让人感觉仿
    //佛C++也可以像C语言一样,接受任意个参数了!
    
    //占位参数,且默认值为0
    int func(int x = 0, int = 0);
    
    int main()
    {
        printf("%d
    ", func());     //0
        printf("%d
    ", func(1));    //1
        printf("%d
    ", func(2, 3)); //2
    
        return 0;   
    }
    
    //第2个参数为占位参数(没函数名),因此在函数内部也就无法使用
    //这个参数,只起到占位的作用
    int func(int x, int)
    {
        return x;
    }

    3. 小结

    (1)C++中支持函数参数的默认值

    (2)如果函数调用时没有提供参数值,则使用默认值

    (3)参数的默认值必须从右向左提供

    (4)函数调用时如果使用了默认参数,则后续参数必须使用默认值

    (5)C++中支持占位参数,用于兼容C语言中的不规范写法

  • 相关阅读:
    开启chrome默认支持ipv6
    IC6151试用发现的问题
    锁存器(latch)、触发器(Flipflop)、寄存器(register)的区别
    文件管理小习惯:在特定位置创建快捷方式
    采用SPI接口的芯片
    阅读笔记:TI Grounding in mixedsignal systems demystified, Part 1
    IC6151使用小技巧,摸索中。。。
    基于RBAC模型的权限管理系统的设计和实现(转载)
    Cron 表达式说明
    组织结构及授权系统关系
  • 原文地址:https://www.cnblogs.com/5iedu/p/5372414.html
Copyright © 2020-2023  润新知