C++之 函数提高(Function ability improved)

本文介绍了C++中函数的高级特性,包括如何设置函数默认参数以简化调用,以及函数占位参数的概念,强调了占位参数在调用时的必要性。此外,详细阐述了函数重载的条件,如参数个数、类型或顺序的不同,并给出了相关示例。同时,文章提请注意函数重载的一些规则,如返回值不能作为重载依据,以及默认参数在函数重载中的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1 函数提高

1.1 函数默认参数

1.2 函数占位参数

1.2.1 示例1

1.2.2 示例2

1.3 函数重载

1.3.1 参数个数不同

1.3.2 参数类型不同

1.3.3 参数顺序不同

1.4 注意事项

1.4.1 函数的返回值不可以作为函数重载的条件

1.4.2 引用作为函数参数

1.4.2.1 示例1

1.4.2.2 示例2

1.4.3 函数重载遇到默认参数


1 函数提高

1.1 函数默认参数

在c++中,函数的形参列表中的形参可以有默认值

语法:

 返回值类型 函数名 ( 参数/参数=默认值);

例:

对于函数Add1

 int Add1(int x, int y)
 {
     return x + y;
 }

对参数加上默认值

 int Add2(int x, int y = 5)// 使y默认为5
 {
     return x + y;
 }

注意:

  • 如果我们自己传入数据,则用我们自己的数据,否则用默认值

     Add2(a);// 用默认值
     Add2(a.b);// 用b的值
  • 如果某个位置已经有了默认值,则从此位置开始从左到右所有参数都必须有

img

  • 函数的声明和实现只能有一个存在默认参数

    声明有默认参数

 int Add3(int x = 5, int y = 5); // 函数声明
 ​
 int Add3(int x,int y)// 函数实现/定义
 {
     return x + y;
 }

实现/定义有默认参数

 int Add4(int x, int y); // 函数声明
 ​
 int Add4(int x = 5, int y = 5)// 函数实现/定义
 {
     return x + y;
 }

1.2 函数占位参数

在C++中,函数的形参列表可以有占位参数,用来做占位,调用函数时必须填补该位置

语法:

 返回值类型 函数名 (函数类型) 
 如 int fun(int);

1.2.1 示例1

 int Add(int x, int y,int )
 {
     return x + y;
 }

形参列表里x与y是函数实现的主体,剩下一个是占位参数

在主函数中

 int main()
 {
     Add(10, 10, 10); // 形参列表最后有个int类型,必须补上个int
     return 0;
 }

1.2.2 示例2

不过,占位参数也是个参数,也可以有默认参数

 int Add(int x, int y, int = 10) // 最后的int=10即默认参数
 {
     return x + y;
 }

此时在主函数里调用函数时,就不用填补了,非要填补也可以,虽然没啥用

1.3 函数重载

概述:在C++中,函数名相同,提高复用性

条件:全部满足

  • 同一个作用域

  • 函数名称相同

  • 函数参数 个数不同/类型不同/顺序不同满足其一

1.3.1 参数个数不同

 void fun() // 0个
 {
     cout << "fun 的调用" << endl;
 }
  
 void fun(int a) // 1个
 {
     cout << "fun(int a)的调用" << endl;
 }

1.3.2 参数类型不同

 void fun(int a) // 整型
 {
     cout << "fun(int a)的调用" << endl;
 }
 ​
 void fun(float b) // 浮点型
 {
     cout << "fun(float b)的调用" << endl;
 }

1.3.3 参数顺序不同

 void fun(int a, float b) // int 在前,float在后
 {
     cout << "fun(int a, float b)的调用" << endl;
 }
 ​
 void fun(float b, int a) // float在前,int在后
 {
     cout << "fun(float b, int a)的调用" << endl;
 }

1.4 注意事项

1.4.1 函数的返回值不可以作为函数重载的条件

 void fun1() 
 {
     cout << "fun1 的调用" << endl;
 }
 int fun1()  // error
 {
     cout << "fun1 的调用" << endl;
 }

img

1.4.2 引用作为函数参数

1.4.2.1 示例1
 void func(int &a) // 相当于int &a = a;
 {
     cout << "func(int &a) 的调用" << endl;
 }
 ​
 void func(const int &a)
 {
     cout << "func(const int &a) 的调用" << endl;
 }

一种参数是int&a,一种是const int&a

 int main()
 {
     int a = 5;
     func(a);
     return 0;
 }

创建变量a后调用

img

结果是第一种

1.4.2.2 示例2

而如果在主函数中不创建变量,直接传递整型数字过去

     func(5);// 相当于const int &a = 10;

img

则是第二种

1.4.3 函数重载遇到默认参数

 void func1(int a, int b = 10) // 默认值b=10
 {
     cout << "func1(int a, int b = 10)的调用" << endl;
 }
 ​
 void func1(int a)
 {
     cout << "func1(int a) 的调用" << endl;
 }

无论哪个函数,均只需接受一个参数即可,因此无法调用,编译不通过

img

而如果再加1个参数,使参数达到2个,则一定可以通过,而且是调用第一个func

     func1(5,20);

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值