C++学习笔记:函数重载

这里我们介绍一个后边会学到的知识,运算符重载。

是什么意思呢?指我们可以用 + 号,做到 - 号的操作,可以用!=实现==的操作。不过我们平时不这样做,这样做属于滥用运算符重载了。我们一般是将其用于自定义数据类型的运算,比如我们有两个对象,想将两个对象里相同的那个属性值相加。若是分开加的话,当我们的对象太多时候,想两两相加不太显示,就需要用到运算符重载了 

利用函数重载可以设计一系列函数——他们完成相同的工作,但使用不同的参数列表。

函数重载:

条件1:函数名称相同

条件2:函数参数类型不同 或者 函数参数个数不同 或者 函数参数的顺序不同

函数参数列表——也成为函数特征标

#include<iostream>
using namespace std;

//引用作为重载条件
void func1(int& a) {    
	cout << "func1(int& a)的调用" << endl;

}

void func1(const int& a) {	//const int &a = 10;编译器优化,创建一块空间存放他

	cout << "func1(const int& a)的调用" << endl;

}

//这个重载与 const int& a 是等价的
//void func1(int a) {
//	cout << "func1(int a)的调用" << endl;
//}

int main() {
	int a = 10;
	func1(a);                  //此时会调用(int& a),因为a是一个指向int型数据的变量
    func1(10);                 //此时会调用(const int& a),因为10是一个无法改变的常量

	return 0;

}

1.此时函数重载,名称都为func1,需要注意加const和不加const的区别

2.参数为10时候,不调用函数func1(int& a),因为引用本质是指针常量,指向不能改,但是指向内存空间的值可以修改,因此不能被赋常数。

但是当参数变为 const int& a 后,其指向和值都不能修改,因此可以赋予常量10,此时编译器会进行优化,为10创建一块空间存放他。这也是和 int a 等价的原因

此处若 func1(int x)  和  func1(int &x),这样的代码是不允许的。或许你认为可以在此处使用函数重载,特征量看起来不同。

然而,若cout << func1(x);  则会出现二义性

#include<iostream>
using namespace std;

void func2(int a,int b = 20) {
	cout << "func2(int a, int b = 20)的调用" << endl;

}

void func2(int a) {
	cout << "func2(int a)的调用" << endl;
}

int main() {
	int a = 10;
    func2(10);

	return 0;

}

 2.当函数重载遇到默认参数时候,如代码示例,此时调用函数func2(10); 两个重载函数都可选择,有二义性,因此编译器不允许这种情况出现。若调用函数func(10,20),这时候没问题,使用有默认参数的那个函数。


以上就是今天要讲的内容,本文介绍了函数重载相关知识点

如果帮到了你,可以点一个关注,后续学习笔记将每日更新哦。

也可以留下一个赞,你的赞是笔者更新的动力

如果文章有用的话,也可以收藏起来,代表自己学习过的痕迹,这块知识点遗忘时候可以方便查看 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值