函数重载介绍
函数重载就是将在同一作用域内,语义、功能相似具有相同函数名字,不同参数列表(参数的个数,顺序和类型不同)的函数称为函数重载,其存在的目的是便于记忆,以防后续调用函数时出错。也可以使函数名相同,以提高它的复用性。
函数重载实例
以计算整型或浮点型绝对值的函数为例
#include<iostream>
using namespace std;
int abs(int x){
return x<0? -x : x;
}
double abs(double x){
return x<0? -x : x;
}
int main()
{
int m;
cin>>m;
cout<<abs(m)<<endl;
double n;
cin>>n;
cout<<abs(n)<<endl;
return 0;
}
使用以上程序就可以在输入想求解绝对值的数字后,若输入为整型,则将数字赋值给m,若为浮点型则赋值给n,通过这样的步骤选择相应的函数进行计算。根据传入的不同参数来选择不同的函数进行调用。
注意,函数重载需要满足以下条件:
- 同一个作用域下
- 函数名称相同
- 函数参数类型不同、个数不同或者顺序不同
而返回值类型不同不能作为函数重载的条件,比如写一个void类型的函数和一个int类型的函数,他们的函数名是相同的,这样的话编译器就会报错。
引用作为重载条件
现在有如下两种函数
#include<iostream>
using namespace std;
void func(int &a)
{
cout<<"func(int &a)的调用"<<endl;
}
void func(const int &a)
{
cout<<"func(const int &a)调用"<<endl;
}
int main()
{
func(10);
int a = 10;
func(a);
return 0;
}
第一个调用函数的结果调用的是第二个func函数,第二个调用的函数是第一个func函数。如果第二个函数调用进入了函数1,就会发生&a=10;语句在编译器内部自动执行,这样的语句是不合法的。而进入的是第二个函数,就会执行const int &a = 10;这一条语句是合法语句。
#include<iostream>
using namespace std;
void func(int a, int b = 10)
{
cout<<"有默认参数的函数调用"<<endl;
}
void func(int a)
{
cout<<"没有默认参数的函数调用"<<endl;
int main()
{
int a =10;
func(a);
}
这时编译器不能正常执行指令,还是因为这时候有了默认参数,可以调用上面两个函数,因此编译器报错。