目录
函数重载的概念:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或类型或类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。
01.参数类型不同:
#include<iostream>
using namespace std;
void Add(int a, int b)
{
cout << "Add(int a, int b)" << endl;
}
void Add(double a, double b)
{
cout << "Add(double a, double b)" << endl;
}
int main()
{
Add(1, 2);//自动匹配第一个
Add(1.1, 2.2);//自动匹配第二个
return 0;
}
02.参数个数不同
#include<iostream>
using namespace std;
void Add(double a)
{
cout << "Add(int a, int b)" << endl;
}
void Add(double a, double b)
{
cout << "Add(double a, double b)" << endl;
}
int main()
{
Add(1.1);
Add(1.1, 2.2);
return 0;
}
03.参数类型顺序不同:
#include<iostream>
using namespace std;
void Add(int a,double b)
{
cout << "Add(int a,double b)" << endl;
}
void Add(double a, int b)
{
cout << "Add(double a, int b)" << endl;
}
int main()
{
Add(1.1 , 2);
Add(1, 2.2);
return 0;
}
注意:
1.展开命名空间并不能让它们变成同一个域,所以并不构成函数重载,但可以使编译器可以去命名空间内搜索
2.下面构成函数重载,但存在调用歧义 Add()和Add(int a = 10)
#include<iostream>
using namespace std;
void Add()
{
cout << "Add()" << endl;
}
void Add(int a = 10)
{
cout << "Add(int a = 10)" << endl;
}
int main()
{
Add();// error C2668: “Add”: 对重载函数的调用不明确
Add(1);
return 0;
}