1、函数重载概述
作用:函数名可以相同,提高复用性
函数重载满足条件
- 同一个作用域下
- 函数名称相同
- 函数参数 类型不同,或者 个数不同,或者 顺序不同
注意:函数的返回值不可以作为函数重载的条件
例子:
#include <iostream>
using namespace std;
void func(double a)
{
cout << "double a"<< endl;
}
void func(int a)
{
cout << "int a"<< endl;
}
int main()
{
func(3.14);
func(11);
return 0;
}
输出结果:
2、函数重载的注意事项:
- 引用作为重载的默认参数
- 函数重载碰到函数默认参数
#include <iostream>
using namespace std;
// 1、引用作为重载的条件
void func(int &a) // int &a =10;不合法。因为引用必须要有一个合法的内存空间,栈区或堆区上的数据
{
cout << "func(int &a)"<< endl;
}
void func(const int &a) // const int &a =10; //加了const之后,代码编译器就会做一个优化,相当于创建了一个临时的数据,然后让a指向那个临时的地址空间.
{
cout << "func(const int &a)"<< endl;
}
int main()
{
int a =10;
func(a); //调用无const
func(10); //调用有const
return 0;
}
输出结果:
#include <iostream>
using namespace std;
// 2、函数重载碰到默认参数
void func2(int a,int b =10)
{
cout << " func2(int a,int b =10)"<< endl;
}
void func2(int a)
{
cout << " func2(int a,int b =10)"<< endl;
}
int main()
{
func2(10); //当函数重载碰到默认参数,出现了二义性(就是出现歧义了),报错,尽量避免出现这种情况
return 0;
}
输出结果:
语法没有错,但是编译运行不可以。
因为 func2(int a,int b =10) 和 func(int a) 都可以被 func2(10); 调用,编译器不知道该调用哪一个