How we learn C++ ? (3)——函数重载

11 篇文章 2 订阅

这是一个非常重要的点

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数。

这些同名函数的 形参列表(参数个数 或 类型 或 顺序)必须不同常用来处理实现功能类似数据类型不同的问题

或者说,给一个名字赋予第二层意义,一词多义,有点内涵那意思

1.首先C语言不允许定义同名的函数,但是C++可以,原因就涉及到了函数重载

函数重载的要求:函数名相同,参数不同(参数类型不同,参数个数不同)

例子:

定义三个函数名相同的函数,在C++中可以构成函数重载

这三个函数的函数名一样,但是类型不同

int ADD(int left, int right) {

	return left + right;

}

double ADD(double left, double right) {

	return left + right;

}

long ADD(long left, long right) {

	return left + right;

}

它们的类型分别是int,double,long。

而且个数不同也能构成函数重载。

下面来打印玩一下(刚开始玩打印很正常,但是工作中很少用)

int main(void) {

	cout << ADD(1,2) << endl;
	cout << ADD(1.2, 2.2) << endl;
	cout << ADD(40l, 40l) << endl;

	return 0;
}

结果:

 

感觉是调用的是一个函数,但其实不止一个,因为这个函数被重载了,所以有三层定义。

实际上调用的是 1:int类型的     2:double类型的    3:long类型的。

2.一些其他问题:

缺省算不算重载 ?

//NO.1
int ADD(int left, int right) {

	return left + right;
}

//NO.2
int ADD(int left = 1, int right = 2) {

	return left + right;
}

注意 : NO.1和NO.2两个不算重载,因为构成重载的条件是参数的类型不同或者个数不同,以上均不满足  。重载只看类型

但是

//NO.2
int ADD(int left = 1, int right = 2) {

	return left + right;
}

//NO.3
double ADD(double left, double right) {

	return left + right;
}

NO.2和NO.3是构成重载的,因为满足了重载的条件

函数重载的要求:函数名相同,参数不同(参数类型不同,参数个数不同)

综上所述,缺省和重载没有关系!

2.1 int和char怎么区分

int ADD(int left = 10, int right = 20) {

	return left + right;
}

char ADD(char left, char right) {

	return left + right;
}

int main() {

	cout << ADD() << endl;
	//cout << ADD(1,2) << endl;	//(1,2)字面量常量,
	//默认给十进制,十六进制等等,给的整形默认算常量

	//如果调用char
	cout << ADD('1', '2') << endl;	//char类型打印,自动按%c,字符类型→	→	→	→	→	↓
	//传字符才调用char类型的																↓
	//																					↓
	//char类型的字符只是显示表面,深入剖析的话在内存中,它存储在4byte中,是它对应的ASCII码值	↓
	//ASCII码值还是整形,只不过是1byte													↓
	//char类型存的值是‘49’,‘50’.	←	←	←	←	←	←	←	←	←	←	←	←	←	←		
	//对应的是c。c在ASCII码值中是99	←	←	←	←	←	←	←	←	←	←	←	←	←	←


	return 0;
}

总结:1.char和int都是表示整形的,整形一般都是用来表示大小,只不过int是4byte,char是1byte
    2.char的1byte是用来表示ASCII码值的字母,多个字母可以表示英文,就能表示文字了
    

2.2        有三个值,但是缺省了一个,传的时候只传了两个

void lost(int a, int b, int c = 1) {

}

void lost(int a, int b) {

}

//以上构成函数重载,函数名相同,参数或者个数不同 

int main() {

	lost(1, 2, 3);
	lost(1,2);
	//↑是编不过去的,
	
	
	return 0;
}

总结:1. 有多个重载函数“lost”实例与参数列表匹配
    2. 编译器不能识别要调用哪一个“lost”对重载函数的调用不明确
    3. 构成重载但是调用的时候埋了一个坑

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值