C++函数重载

/* 函数重载
 * 定义:同一作用域内函数名相同参数列表不同的函数,称为重载函数
 * 注意:
 *		1.main()函数不支持重载
 *		2.函数重载与返回值无关
 *		3.函数重载只关注形参类型、数量,与有无函数名无关
 *		4.函数重载与类型别名无关,类型别名并非新类型,因此原类型名和类型别名不构成重载
 *		5.顶层const形参与非顶层const形参不构成重载
 *		6.基于指针或引用的底层const形参与普通指针或引用形参构成重载
 *			(常量形参只能匹配常量版,非常量形参优先匹配非常量版)
 *		7.局部作用域内声明的函数将导致全局作用域的同名函数被隐藏,无法构成重载
 *			(原因:c++语言先查找名字后检查类型)
 *		8.带默认实参的函数与其同名函数重载时要十分谨慎。
 */
// 1.函数重载与返回值无关
int func1(int a, int b);
double func1(int a, int b);	//error:虽然二者返回值不同但构成重载
double func1(double a, double b);	//ok:构成重载

// 2.函数重载只关注形参类型、数量,与有无函数名无关
int func2(int a, int b);
double func2(double, double);	//ok:构成重载

// 3.函数重载与类型别名无关,类型别名并非新类型,因此原类型名和类型别名不构成重载
using uint = unsigned int;	//等同于typedef unsigned int uint;
int func3(unsigned int a, unsigned int b);
int func3(uint a, uint b);	//error:不构成重载

// 4.顶层const形参与非顶层const形参不构成重载
int func4(int a, int b);
int func4(const int a, const int b);	//error:不构成重载

// 5.基于指针或引用的底层const形参与普通指针或引用形参构成重载
void func5(int *a, int *b); //非常量优先匹配
void func5(const int *a, const int *b);	//ok:构成重载,只能匹配常量

// 6.局部作用域内声明的函数将导致全局作用域的同名函数被隐藏,无法构成重载
//全局作用域
int func6(int a, int b);
void func(){
	//局部作用域
	void func6(double a, double b);
	int a = 0, b = 1;
	func6(a, b);  //只能匹配func6(double a, double b),全局的func6被隐藏
}

//7.带默认实参的函数与其同名函数重载时要十分谨慎
int func7();
int func7(int a = 0, int b = 1);
int func_(){
	func7();	//error:虽构成重载但是无法匹配到唯一的函数
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值