• 第7课


    第7课 - 函数参数的扩展

    1. 函数参数的默认值

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

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

     1 #include <stdio.h>
     2 
     3 //默认值只能在函数声明时提供
     4 int mul(int x = 0); //参数x的默认值为0
     5 
     6 int main()
     7 {
     8     printf("%d
    ", mul());   //传入默认值0
     9     printf("%d
    ", mul(-1)); //传入-1
    10     printf("%d
    ", mul(2)); //传入2
    11 
    12     return 0;   
    13 }
    14 
    15 int mul(int x)    //定义中,不能提供默认值,编译器会报错
    16 {
    17     return x * x;
    18 }
    默认参数值初探

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

        ① 参数的默认值必须从左向右提供

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

      

     1 #include <stdio.h>
     2 
     3 //默认参数必须从右向左提供,诸如
     4 //int add(int x = 0,int y = 1,int z)是错误的
     5 int add(int x, int y = 1, int z = 2);
     6 
     7 int main()
     8 {
     9     //第2参数y使用了默认值,则后续的z也必须使用默认值
    10     //诸如add(1, ,3);的调用是错的。
    11     printf("%d
    ", add(0));      //x = 0, y = 1, z = 2
    12 
    13     printf("%d
    ", add(2, 3));   //x = 2, y = 3, z = 2
    14     printf("%d
    ", add(3, 2, 1));//x = 3, y = 2, z = 1
    15 
    16     return 0;   
    17 }
    18 
    19 int add(int x, int y, int z)
    20 {
    21     return x + y + z;
    22 }
    默认参数的错误示例

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

      (1)占位参数只有参数类型声明,而没有参数名声明

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

      (3)函数占位参数的意义

        ① 占位参数与默认参数结合起来使用,使得C的代码经过简单的修改可以方便的在C++中使用

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

         

        在C 语言中两者是不等价的,前者是接收任意个参数,后者是不接收参数;在C++ 中两者是等价的,都是不接收参数。

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

    3. 小结

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

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

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

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

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

  • 相关阅读:
    Google Analytics的Gif请求数据解读
    还原当年创业:屌丝逆袭后的华丽转身 (zz)
    减去脂肪,轻身上阵 (zz)
    离婚,感谢 (转载)
    delphi如何调用.NET webservice
    如何修改远程登陆3389端口
    软件中的2038问题讨论
    去掉cxgrid上面的分组的灰色栏
    从MDF文件恢复Sql Server2000数据库
    CxGrid的一些使用方法
  • 原文地址:https://www.cnblogs.com/shiwenjie/p/7124455.html
Copyright © 2020-2023  润新知