第7课 函数参数的扩展

1.  函数参数的默认值

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

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

        

【实例分析】默认参数值初探  7-1.cpp

#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)函数参数默认值的规则

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

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

     

【编程实验】默认参数的错误示例  7-2.cpp

#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语言程序可能出现的不规范写法

【编程实验】函数占位参数函数默认参数  7-3.cpp

#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语言中的不规范写法

原文地址:https://www.cnblogs.com/hoiday/p/10088726.html