内容
1.函数参数缺省值/默认值
2.函数重载
一.函数参数缺省值/默认值
这个好说,其实就是在参数形参部分可以对形参设置默认值
使用示例如下
void fun(int a = 1,char b = 'b')//全部指定默认值
{
cout<<a<<' '<<b<<endl;
}
void fun1(int a,char b = 'b')//部分指定默认值
{
cout<<a<<' '<<b<<endl;
}
int main()
{
fun();
fun1(3);
system("pause");
return 0;
}
从上面的例子中可以看出可以全部设置默认值,也可以部分设置默认值,但是部分设置时有一条件:要从右向左连续,即右边有默认值,左边没有默认值
如
void fun1(int a,char b = 'b',float c = 1.12f)
{
cout<<a<<' '<<b<<' '<<c<<endl;
}
当函数既有声明又有实现时,要这样用:
void fun(int a = 1,char b = 'b');
int main()
{
fun();
system("pause");
return 0;
}
void fun(int a,char b )
{
cout<<a<<' '<<b<<endl;
}
即形参也不能重定义
二.函数重载
1.定义:在同一作用域内(即共同作用域),函数名字相同,参数列表不同的多个函数互为重载函数
参数列表不同有可能是参数类型不同,也可能是参数个数不同,系统会根据参数自动找到需要调用的函数
2.使用示例
void fun(int a)
{
cout<<a<<endl;
}
void fun(int a,char b)
{
cout<<a<<' '<<b<<endl;
}
void fun(char a)
{
cout<<a<<endl;
}
int main()
{
fun(3);
fun(3,'a');//这里要注意a必须要用单引号
fun('a');
system("pause");
return 0;
}
3.注意事项
①浮点数后面一定要有f/F这个后缀,同样地,long double后面一定要有l/L这个后缀
void fun(float a)
{
cout<<a<<endl;
}
void fun(long double a)
{
cout<<a<<endl;
}
int main()
{
fun(1.12F);
fun(1.11L);
system("pause");
return 0;
}
②返回值不是判断是否互为重载函数的条件,即只有返回值不同,不能说它们互为重载函数
void fun(int a)
{
cout<<a<<endl;
}
int fun(int a){
cout<<a<<endl;
return 0;
}
如这两个就不是互为重载函数,用起来会报错
③参数默认和函数重载结合使用可能会造成调用不明确
void fun(int a,char b = 'a')
{
cout<<a<<' '<<b<<endl;
}
void fun(int a){
cout<<a<<endl;
}
int main()
{
fun(3);//这里调用fun函数就报错了
system("pause");
return 0;
}