函数重载是:函数名相同,但是函数参数不同的函数之间的关系。函数重载只能通过函数参数的不同来实现,这包含参数个数不同和参数类型不同。 !!! 重载不是面向对象的特征。
函数重载执行同样的一般性动作,但是应用在不同的形参类型上,调用这些函数时,无需担心调用的是哪个函数,就像我们不必操心执行的是整数算术操作还是浮点数算术操作就可以实现 int 型加法或 double 型加法一样。事实上C++是支持模板函数的。我们也可以使用模板函数来实现参数个数相同的重载函数的功能。
当然了,main函数是不能被重载的。它是留给操作系统的接口。
#include"Header.h"
int main() //main函数不能被重载;
{
int w(1);
f(w);
f();
f("123");
INT a;
system("pause");
return 0;
}
void f(int a)
{
cout << "int型参数" << endl;
}
void f(void)
{
cout << "无参数" << endl;
}
int f(string s)
{
cout << "string型参数" << endl;
return 0;
}
函数的返回值不能作为函数重载的依据,唯一的依据是函数参数的不同。
函数重载是根据函数的参数来匹配函数的,因此匹配可能出现下面的几种结果:
1.完全匹配,调用成功。编译器会自动寻找最佳匹配来调用。
2.参数不匹配,调用失败。
3.存在多个与实参匹配的函数,调用具有二义性。这种情况的发生一般是由于参数的隐式类型转换或者是重载函数的函数参数具备默认值。例如:
void f(int a, int b = 1)
{
cout << "参数具备默认值" << endl;
}
void f(int a)
{
cout << "int型参数" << endl;
}
如果我们在main函数中有这样的调用语句:f(3);这时候编译器会告诉你对重载函数的调用不明确。
函数调用一定要具备明确性。
另外需要注意:当形参是指针或者是引用时,const参数与非const参数之间是重载关系。