栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++函数重载

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++函数重载

文章目录
  • 前言
  • 一、函数重载是什么?
  • 二、函数重载的作用
  • 三、函数重载的满足条件
  • 四、函数重载的注意事项
    • 1.引用作为重载条件
    • 2.函数重载碰到默认参数
    • 3.函数的返回值不可以作为函数重载的条件
  • 总结


前言

最近学习了函数重载,里面有许多易错的,我平时遇到的一些错误,都总结在了下面,希望可以对你们有所帮助。


一、函数重载是什么?

重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。 这就是重载函数。 重载函数常用来实现功能类似而所处理的数据类型不同的问题。 不能只有函数返回值类型不同。

二、函数重载的作用

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

三、函数重载的满足条件

1.同一个作用域下
2.函数名称相同
3.函数参数类型不同或者个数不同或者顺序不同
注意必须同时满足以上三点才可以,缺一不可
代码如下(示例):

//函数个数不同
#include
using namespace std;
void fun()
{
	cout << "fun 的调用" << endl;
}
void fun(int a)//函数个数不同
{
	cout << "fun(int a) 的调用" << endl;
}
int main()
{
	fun();
	fun(10);
	system("pause");
	return 0;
}

//函数类型不同
#include
using namespace std;
void fun(int a)
{
	cout << "fun(int a) 的调用" << endl;
}
void fun(double a)//函数类型不同
{
	cout << "fun(double a) 的调用" << endl;
}
int main()
{
	
	fun(10);
	fun(3.14);
	system("pause");
	return 0;
}

//函数类型顺序不同
#include
using namespace std;
void fun(int a,double b)
{
	cout << "fun(int a,double b) 的调用" << endl;
}
void fun(double a ,int b)//函数顺序不同
{
	cout << "fun(double a,int b) 的调用" << endl;
}
int main()
{
	fun(10,3.145);
	fun(3.14,10);
	system("pause");
	return 0;
}

四、函数重载的注意事项 1.引用作为重载条件

代码如下(示例):

//引用作为重载条件
#include
using namespace std;
void fun(int &a)
{
	cout << "fun(int &a) 的调用" << endl;
}
void fun(const int &a)//引用作为重载条件
{
	cout << "fun(const int &a) 的调用" << endl;
}
int main()
{
	int a = 3;
	fun(10);//调用参数为const int &a的函数,因为10是常数,const就是修饰常数的
	fun(a);//调用参数为int &a的函数,因为a是变量
	system("pause");
	return 0;
}

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

代码如下(示例):

//函数重载 默认参数
#include
using namespace std;
void fun(int a)
{
	cout << "fun(int a) 的调用" << endl;
}
void fun(int a,int b = 10)//默认参数
{
	cout << "fun(int a,int b = 10) 的调用" << endl;
}

int main()
{
	fun(10);
	fun(10,20);
	system("pause");
	return 0;
}

这样的代码初学重载的人很容易弄错,他们会以为我这里不是发生重载了嘛,参数个数也不一样呀,为啥会报错呢,下面我们来看一下这个的运行结果,如下图

上面说这里对重载的调用不明确,那么到底是怎么回事儿呢,我们来一起看一看,我们在调用fun(10)的时候,因为在fun(int a ,int b = 10)这个函数的形参中已经有了默认的参数了,这个时候这个10就不知道是要传给fun(int a)这个函数还是传给fun(int a ,int b = 10)这个函数了,所以造成了错误,我们会误认为是重载的条件发生了问题,但是究竟原因是调用不明确出的问题,不然我们可以测试一下,把默认函数值去掉会怎样,见如下代码及运行结果

//去掉默认参数后
#include
using namespace std;
void fun(int a)
{
	cout << "fun(int a) 的调用" << endl;
}
void fun(int a,int b)
{
	cout << "fun(int a,int b = 10) 的调用" << endl;
}

int main()
{
	fun(10);
	fun(10,20);
	system("pause");
	return 0;
}


答案是可以正常调用的,所以更加验证了我刚才的话,造成错误的原因是调用不明确造成的。

3.函数的返回值不可以作为函数重载的条件

代码如下(示例):

#include
using namespace std;
void fun(int a)
{
	cout << "fun(int a1) 的调用" << endl;
}
int fun(int a)
{
	cout << "fun(int a2) 的调用" << endl;
	return a;
}

int main()
{
	fun(10);
	fun(10,20);
	system("pause");
	return 0;
}

这个代码显然是错误的,我们来看看错误是怎样说的

上面报了许多错,说fun重定义了,还有无法重载按返回值类型区分的函数,可见函数的返回值不可以作为函数重载的条件。

总结

函数重载是可以提高复用性的,一般在功能相似的时候使用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/857899.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号