一.函数重载&缺省参数
1.重载函数
首先我们来看一段非常简单的代码:
#include<iostream>
using namespace std;
版本较老的编译器,头文件会加上.h,我这里因为编译器的不同,没有加.h。为了能够使用标准库,我们还需要加上using namespace std;
int Add(int a,int b)
{
return a+b;
}
int main()
{
int x;
int y;
cin>>x>>y;
cout<<Add(x,y);
return 0;
}
Add函数的作用是将两个int型的数据相加,返回值也为int型。但很多时候,我们不仅要处理int型,还有float,double,char等类型的数据,那我们就需要再写几个像上面那样的函数,只是把int改为float,double,char等,每处理一种类型就要重新写一个函数,但是这些函数的内容大同小异,我们却要重复地做。更糟糕的是,对于这些函数,如何起名字、记名字,也是一件头疼的事。
在c++中,重载函数,这样一种机制,可以有效地避免这些困扰。
如果同一个作用域内的几个函数名字相同但是形参列表不同,我们称之为重载函数。
所以,重载函数有一下几个特性:1.作用域相同 2.函数名相同 3.形参列表不同(参数类型,参数个数)。
float Add(float a,float b)
{
return a+b;
}
double Add(double a,double b)
{
return a+b;
}
char Add(char a,char b)
{
return a+b;
}
这些函数接受的形参类型不同,但是执行的操作非常类似。当调用这些函数时,编译器会根据传递的实参推断想要的是哪个函数。函数的名字仅仅是让编译器知道它调用的是哪个函数,而重载函数可以在一定程度上减轻程序员起名字、记名字的负担。
注意:1.main函数不能重载
2.不允许两个函数除了返回值 类型外其他所有的要素都相同
2.有默认参数的函数
一般情况下,在函数调用时形参从实参那里取值,因此实参的个数与形参相同。有多次调用同一函数时用同样的实参,c++提供简单的处理方法,给形参一个默认值,这样形参就不必一定要从实参取值了。
void* GetMemory(int size=100)
{
return malloc(size);
}
int main()
{
GetMemory();
GetMemory(200);
return 0;
}
GetMemory( );形参列表没有参数,这就是带有默认参数的函数,调用函数时,传参传默认参数100;
如果另外给出参数,那就用新给的参数。
但是,一个函数不能既作为重载函数,又作为有默认参数的函数。因为当调用函数时,如果少写一个参数,系统无法判定是利用重载函数还是利用默认参数的函数,出现二义性,系统无法执行。
void* GetMemory(int size=100)
{
return malloc(size);
}
void* GetMemory()
{
int size = 100;
return malloc(size);
}
int main()
{
GetMemory();
GetMemory(200);
return 0;
}