函数重载与默认参数小结

本文总结了C++中的函数重载概念,强调了重载函数在类型匹配时的规则,包括严格匹配、内部类型转换和用户定义转换。同时,讨论了默认参数的应用,如何利用默认参数简化函数调用,并指出默认参数的设定规则和注意事项。

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

对于在不同类型上作不同运算而又用同样名字的情况,称之为重载,也就是一物多用
例如:

int abs(int);
long labs(long);
double fabs(double);

若用重载,可以改为:

int abs(int);
long abs(long);
double abs(long);

c++中用一种函数命名技术可以准确判断出该用哪个abs()函数。

abs(-10);//调用int abs(int);
abs(-1000000);//调用long abs(long);
abs(-12.23);//调用double abs(double);

匹配重载函数的顺序

  • 寻找一个严格的匹配,若找到即用这个函数
  • 通过内部转换寻求一个匹配,找到即用此函数
  • 通过用户定义的转换寻求一个匹配,若能查出有唯一的一组转换,即用此函数
    例如:
    重载函数print()的匹配
void print(double);
void print(int);
void fun()
{
	print(1);//匹配void print(int)
	print(1.0);//匹配void print(double)
	print('a');//匹配void print(int);
	print(3.1415f);//匹配void print(double);
}

c++允许int到long,int到double的转换,当实参是整数,而重载函数一为long型参数,一为double型参数时,应该给予一个显式转换

void print(long);
void print(double);

void fun(int a)
{
	print(a);//error,具有二义性
}

应当指明时是print(long(a));还是print(double(a));,以分辨这种混淆的调用

  • 重载函数的参数个数、参数类型或参数顺序三者至少有一种不同,函数返回值可以相同也可以不同

默认参数可以将一系列简单的重载函数合成为一个:

void point(int,int){//...}
void point (int a){return point(a,4);}
void (){return point(3,4);}

void point(int=3,int=4);//可以用此含有默认参数的函数代替

当调用point()时,即调用point(3,4),它是第三个声明的重载函数
当调用point(6)时,即调用point(6,4),它时第二个声明的重载函数
当调用point(7,8)时,即调用第一个声明的重载函数

如果一组函数都允许相同实参个数的调用,将会引起调用的二义性

  • 当又有声明又有定义时,定义中不允许默认参数
  • 允许函数默认参数值,是为了让编程简单
  • 如果一个函数中有多个默认参数,则形参分布中,默认参数应从右至左逐渐定义,调用函数时,只能向左匹配参数
  • 默认值可以是全局变量,全局常量甚至是一个函数,但不可以是一个局部变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值