默认参数
C++中可以在函数声明时为参数提供一个默认值,当函数调用时没有指定这个参数的值,编译器会自动用默认参数代替
void myprint(int x=5)
{
cout<<"x="<<x<<endl;
}
void main()
{
myprint();//直接打印x=5;
myprint(4);//直接打印x=4;
}
函数默认参数规则:
只有参数列表后面部分的参数才可以提供默认参数值;
一旦在一个函数调用中开始使用默认参数值,那么这个参数值后的所有参数都必须使用默认参数值,不能单独为后面的参数赋值;
#include"iostream"
using namespace std;
void myprint(int y,int z,int x = 5)
{
cout<<"y="<<y<<endl;
cout << "z=" << z << endl;
cout << "x=" << x << endl;
}
void main()
{
myprint(6,4);
system("pause");
}
函数的占位参数
占位参数只有参数类型声明,而没有参数名声明
一般情况下,在函数体内部无法使用占位参数。
为了修改源代码,后面留下了拓展
int func1(int ,int x=5)//占位参数也类似于没有默认的参数,必须写在默认参数之前
{
return x;
}
int func2(int a,int b,int){return a+b;}int main()
{
cout<<func(1)<<endl;//这句话相当于给占位参数赋值,这个1没啥用,函数第二个参数还是使用默认参数。
//cout<<func2(2,3)<<endl;会报错,参数不够占位参数也必须穿进去一个值,即使这个值没有什么作用
cout<<func2(2,3,4)<<endl;//打印结果是5;
system("pause");//打印结果是5
}
默认参数和函数重载结合在一起
#include <iostream>
using namespace std;
void print(int a,int b=1,int c=100)
{
cout<<a<<b<<c<<endl;
}
void print(int a)
{
cout<<a<<endl;
}
void main()
{
//print(100);//会报错,不知道执行哪一个,解决办法就是使用函数指针
void (pt1)(int a,int b,int c)=print;
pt1(100,2,3);//这样就能够区分了,函数指针没有默认参数必须全部输入数据
/*若是
void print(double a)
{
cout<<a<<endl;
}
此时写
print(100);
就不会和上面的默认参数发生冲突,因为参数类型不一样
*/
}