C++ 函数高级 函数的默认参数 占位参数 函数重载

C++ 函数高级

1. 函数的默认参数

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

  • 语法: 返回值类型 函数名 (参数= 默认值){}
    在这里插入图片描述
    test1中形参没有默认值,调用时要传入参数。test2中形参a
    test2中形参有默认值,调用时如果没有传入参数则使用默认值,如果传入参数则优先使用传入的参数

注意事项

  • 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值
    例如,test3中形参b有默认值,这个位置之后都得有默认值,否则会报错在这里插入图片描述
  • 如果函数声明有默认值,函数实现的时候就不能有默认参数
    在这里插入图片描述函数声明和函数实实现只能一个有默认值

2. 函数占位参数

C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置
语法: 返回值类型 函数名 (数据类型){}
在这里插入图片描述
占位参数有默认值时,调用函数可传可不传参数

3. 函数重载

作用: 函数名可以相同,提高复用性

3.1 函数重载满足条件

  • 同一个作用域下
  • 函数名称相同
  • 函数参数类型不同 或者 个数不同 或者 顺序不同

1)函数类型相同
在这里插入图片描述
提示错误:已有主体,编译器不知道调用哪一个函数。

2)参数个数不同
在这里插入图片描述
test6()和test6(int a),参数个数不同,根据传入不同个数的参数调用不同的函数。

3)参数类型不同
在这里插入图片描述
test6(int a)和test6(float a),参数类型不同,根据传入不同类型的参数调用不同的函数。

4)参数顺序不同
在这里插入图片描述
test6(int a, float b)和test6(float b, int a),参数顺序不同,根据传入不同顺序的参数调用不同的函数。

注意: 函数的返回值不可以作为函数重载的条件
在这里插入图片描述
此时主函数中既可以调用上面是test6,也可以调用下面的test6,只是下面的test6的返回值不接收,但是编译器不知道调用哪个函数,所以系统会提示“函数的返回值不可以作为函数重载的条件”

3.2 函数重载的注意事项

1)引用作为重载条件

在这里插入图片描述

int a = 45;
test7(a);`

这里调用的是test7(int& a)函数,因为a是变量,可读可写;
在这里插入图片描述

test7(45);

这里调用的是test7(const int& a)函数,test7(const int& a)加入了const修饰a,a只是可读。
直接传入45,对test7(int& a)而言,这种传入是不合法的,因为引用必须使用的是一块合法的空间;
但是对于test7(const int& a)函数,加入了const修饰,此时引用使用的是一块临时的合法空间,在编译期内部会自动优化:

int temp = 10;
const int& ref = temp;

对于引用做重载条件时,可以加const(直接传数值),也可以不加const(传入变量)。

2)函数重载碰到函数默认参数

在这里插入图片描述
test8(45)这句代码:既可以调用test8(int a, int b = 45)函数,把45传给a,b使用默认值;也可以调用调用test8(int a)函数,把45传给a。所以下面才会报错“test8调用不明确”
所以,函数重载碰到默认参数出现二义性,应该尽量避免。/要么不要使用默认参数,要么把所有参数的值都传入。

总结
  • 引用可以作为重载条件,需要区分加const和不加的函数调用。
  • 引用加const时,可以直接传入值;没加时,需要传入变量。
  • 函数重载应该尽量避免默认参数会导致二义性的出现,要么不使用默认参数,要么把所有参数都传入实参。

黑马老师

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值