1 什么是函数重载
在C++中,一个函数名有多个函数体的实现方式就叫做函数重载。换句话说,我们使用同一个函数,传入不同的参数,会返回不同的调用结果。
2 为什么需要函数重载
函数重载可以提高函数调用的灵活性,我们不必再为函数名名而苦恼。比如在C语言中,我们要计算加法,可以写如下一个函数来实现:
int add(int a, int b)
{
return a + b;
}
这样我们在需要调用的时候就可以直接调用sum = add(100, 200);
,但是,我们想要一个浮点数的加法运算函数呢?这样sum = add(12.3, 33.2);
,显然是不对的。所以又有人提出,再写一个加法函数来实现浮点数相加不就行了吗。没错,我们又写了一个浮点数的加法函数:
float add1(float a; float b)
{
return a+b;
}
这样是解决浮点数相加的问题。但是,又有同学提出我要一个整型+浮点型的加法函数,于是,我们又写了一个函数add3();
,这样实现下去真是无穷无尽啊。而且,时间久了,你知道add()、add1()、add2()、add3()分别是对应那种加法吗?
所以在C++中,引入了函数重载的概念,我同一个函数名可以有不同的函数体,比如实现同样的add函数,在C++中可以这样实现:
int add(int a , int b)
{
return (a + b);
}
float add(float a , float b)
{
return (a + b);
}
这样在需要调用的地方我们可以直接sum = add(12, 13);
或者sum = add(12.3 + 23.4);
都可以返回正确的调用结果。编译器会根据不同的传参来决定调用哪个函数体。
3 函数重载实践
#include <iostream>
using namespace std;
int func(int a , char c )
{
cout << "我是第一个function" << endl;
cout << a << c << endl;
return 0;
}
int func(float x )
{
cout << "我是第2个function" << endl;
cout << x << endl;
return 0;
}
int func(float f , char c ,int x )
{
cout << "我是第3个function" << endl;
cout << f << c << x << endl;
return 0;
}
float func(float f , int x ,char c)
{
cout << "我是第4个function" << endl;
cout << f << x << c << endl;
return 0;
}
int func(int x)
{
cout << "我是第5个function" << endl;
//func(12); //错误,不能递归调用自己
func(12.3f); //正确 可以正常调用
cout << x << endl;
return 0;
}
int main()
{
func(23, 'b');
func(12.3f);
func(12.3, 'b', 12);
func(12.3, 23, 'x');
func(88);
system("pause");
return 0;
}
运行结果如下:
我是第一个function
23b
我是第2个function
12.3
我是第3个function
12.3b12
我是第4个function
12.323x
我是第5个function
我是第2个function
12.3
88
请按任意键继续. . .
4 函数重载总结
1、传入的两个参数如 (int a ,char b )和 (char b, int a )都算两个不同的重载函数
2、函数重载可以简化调用
3、函数重载的时候函数体可以是不同的,只要函数名不同就好了,返回值不可以作为函数重载的条件。
4、VS编译器默认浮点数是double
5、重载函数的返回值可以不一样。
6、重载函数中可以继续调用本函数的其他函数体,注意:不能递归调用自己。