「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」
🌈函数默认参数
- 在C++中,函数的形参列表中的形参是可以有默认值的
- 语法 :返回值类型 函数名(行参=默认值){ }
- 注意:1.如果某个位置已经有了默认参数,那么这个位置后面都必须有默认值 2.如果函数声明有默认参数,函数实现就不能有默认参数;反之,实现有了,默认就不能有
#include<iostream>
using namespace std;
int func(int a,int b=20,int c=30) //在b后面的c必须有默认值,a可以不有
{
return a+b+c;
}
int func1(int x,y)//函数声明不能再有默认参数即便是相同的值
int func1(int x=1,y=2)//函数实现
{
return x+y;
}
int main() {
cout<<func(10)<<endl;//10+20+30
cout<<func(10,40)<<endl;//10+40+30 传入了值就用传入的值,没有就调用默认值
cout<<func1()<<endl;
}
🌈函数的占位参数
- 函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置
- 可以有默认参数
- 语法:返回值类型 函数名 (数据类型){ }
#include<iostream>
using namespace std;
int func(int a,int)//第二个int表示占位参数
{
cout<<"this is func"<<endl;
}
int func1(int a,int=1)//给占位参数赋默认值
{
cout<<"this is func1"<<endl;
}
int main()
{
func(1,1);//占位参数必须填补
func1(1);//已有默认参数可以不用填补
return 0;
}
🌈函数重载
- 作用:函数名相同,提高复用性
- 条件:同一作用域下函数名相同,函数参数类型不同或个数不同或顺序不同
- 注意:函数的返回值不可以作为函数重载的条件
- 引用也可以作为函数重载的条件
- 函数重载尽量避免使用默认参数,容易出现二义性
#include<iostream>
using namespace std;
int func(int &a)//引用作为重载条件
{
cout<<"func(int &a)的调用"<<endl;
}
int func(int const &a)//参数类型不同 const修饰常量类型
{
cout<<"func(int const &a)的调用"<<endl;
}
int func1(int a,int b=20)//函数重载碰到默认参数时,容易出现二义性,尽量避免使用默认参数
{
cout<<"func1(int a,int b=20)的调用"<<endl;
}
int func1(int a)//func1函数参数个数不同,可以重载
{
cout<<"func1(int a)的调用"<<endl;
}
int main()
{
int a=10;
func(a);//调用无const函数,a是变量,可读可写
func(10);//调用有const函数,输入了常量,只读
//func1(10);//报错,两个func1都可以调用,存在二义性
func1(10,20);//调用func1(int a,int b=20),有两个参数
return 0;
}