缺省参数
1.什么是缺省参数
c++允许在函数声明或定义的时候给参数指定默认值,这样就可以做到在调用该函数时如果传参数,形参的值就是实参的值;如果不传参数那么形参的值就是指定的默认值。
缺省参数分为全缺省和半缺省
全缺省
//所有形参都指定了一个值
int Add(int x = 1, int y = 2, int z = 3)
{
return x + y + z;
}
int main()
{
printf("%d\n", Add());
return 0;
}
半缺省
int Add(int x , int y = 2, int z = 3)
{
return x + y + z;
}
int main()
{
printf("x + y + z = %d\n", Add(1));
system("pause");
return 0;
}
或
int Add(int x , int y, int z = 3)
{
return x + y + z;
}
int main()
{
printf("x + y + z = %d\n", Add(1,2));
system("pause");
return 0;
}
缺省的参数必须是从右往左依次次给的,实参是和形参是从左往右依次匹配的.
下面这样是不被允许的:
int Add(int x = 1, int y = 2, int z )
{
return x + y + z;
}
int main()
{
printf("x + y + z = %d\n", Add(3));
system("pause");
return 0;
}
发生链接时错误
重载函数
int Add(int x , int y )
{
return x + y ;
}
double Add(double x, double y)
{
return x + y;
}
int main()
{
printf("x + y = %d\n", Add(1, 2));
printf("x + y = %.2lf\n", Add(1.1, 2.2));
system("pause");
return 0;
}
c语言中不支持两个不同的函数取相同的名字,因为如果取相同名字,在调用函数时就不知道调用哪个函数了。
c++支持两个不同功能的函数取相同的名字,前提是两个同名函数的形参一定不能相同(包括形参的个数和形参类型)。这是因为在程序的由源代码变异成汇编代码,参数信息也会列为函数名的一部分。在程序链接时,寻找函数时其实两个函数的名字已经不同了。
不妨看一下两者的编译之后的汇编代码
这两个名字的组成是这样的:
_Z + 源代码中函数名字母的个数 + 函数名字 + 形参类型名的首字母