一、缺省参数
缺省参数是声明定义函数时为函数的参数指定一个默认值,在调用函数时,如果没有指定的实参则采用该默认值,否则使用指定实参。
缺省参数可以是全缺省和半缺省(缺少一部分)
举个例子:
1、全省参数
#include<iostream>
using namespace std;
int add(int a = 10, int b = 20,int c = 30)//所有的参数都制定了默认值
{
return a + b + c;
}
int main()
{
int ret = add();//c++中可以不用传参
int ret2 = add(22);
int ret3 = add(22, 33);
int ret4 = add(11, 22, 33);
cout << ret << endl;
cout << ret2 << endl;
cout << ret3 << endl;
cout << ret4 << endl;
return 0;
}
全省参数传参时必须依次从左向右,如果没有传参的使用指定的默认值。
2、半省参数
声明和定义的函数的参数只有一部分的参数被指定。
半省参数必须从右往左给出,不能隔着给。
举个例子:
int Mul(int x=1, int y=0,int z)
{
return x * y*z;
}
这样就会报错,必须从有向左给出。
只有当z有了缺省值,y才能有,然后,x才能有。
举个例子:
int Mul(int x, int y=2,int z=6)
{
return x * y*z;
}
int main()
{
int ret = Mul(1);//x没有默认值,调用函数时必须给x传参。
cout << ret << endl;
return 0;
}
3、缺省参数不能在函数声明和定义中同时出现。
4、缺省值必须时全局变量或者常量。
二、函数重载
函数重载:是函数的一种情况,c++允许在同一作用域中声明几个功能类似的同名函数。但是这些函数的形参列表必须不同(参数个数,顺序,类型不同)
举例如下:
#include<iostream>
using namespace std;
int Add(int x, int y)
{
return x + y;
}
double Add(double x, double y)//参数类型不同
{
return x + y;
}
int Add(int x, int y, int z)//参数数目不同
{
return x + y + z;
}
int main()
{
cout << Add(10, 20) << endl;
cout << Add(10.22, 20.22) << endl;
cout << Add(10, 20,30) << endl;
return 0;
}
以上Add都是函数重载。运行结果如下:
函数重载和函数的返回值类型无关。
2、为什么c++中能够实现函数重载。
答:因为文件链接时,调用函数,会通过声明的函数名在符号表中找它对应的地址,C语言中编译器不会对同名函数进行修饰,参数不同,在调用时不知道该调用哪一个,所以会报错,在C语言中不能实现函数重载。
而C++中会对名字进行修饰,根据参数的不同,是它们有不同的名字,依据不同参数,找相应的名字,从而实现函数重载。