11.1 默认参数
#include<iostream>
using namespace std;
// 1、函数默认参数,就是在形参后赋默认值
int func(int a = 1, int b = 1)
{
return a + b;
}
void test01()
{
cout << func() << endl; // 结果: 2,当函数调用的时,如果没有指定值,编译器会自动用默认值代替
cout << func(10) << endl; // 结果: 11 当函数调用的时候如果有指定值,使用指定值
cout << func(10, 20) << endl; // 结果: 30
// cout << func(10, 20,30) << endl // err: C++ 要求严格传参
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
? 注意1:如果参数中,有一个有默认值了,那么从这个参数的位置起,从左到右,都必须有默认值
int func1(int a, int b = 1, int c = 1) // 此时 b 后的形参都必须有默认值,否则编译器会智能报错
{
return a + b + c;
}
void test02()
{
cout << func1(100) << endl; // 注意:这种情形,至少要传一个参数赋予 a
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
? 注意2:在函数的声明和实现中,只能有一个有默认参数
如果有两个都有默认参数(例如:声明中 a = 10;函数中a = 1),编译器不清楚该使用哪个默认参数
int func2(int a = 10, int b = 10);
int func2(int a, int b)
{
return a + b;
}
void test03()
{
cout << func2() << endl; // 没有参数,使用默认参数,有参数,使用参数
}
11.2 占位参数
C++ 在声明函数时,可以设置占位参数
占位参数只有参数类型声明,而没有参数名声明
一般情况下,在函数体内部无法使用占位参数,使用意义不大,只在“后置++重载”要用到此处
****************************************************************************************
void TestFunc01(int a,int b,int)
{
// 函数内部无法使用占位参数,因为没有参数名
cout << "a + b = " << a + b << endl;
}
****************************************************************************************
占位参数也可以设置默认值
void TestFunc02(int a, int b, int = 20)
{
// 函数内部依旧无法使用占位参数
cout << "a + b = " << a + b << endl;
}
****************************************************************************************
int main()
{
//错误调用, 占位参数也是参数, 必须传参数
//TestFunc01(10,20);
//正确调用
TestFunc01(10,20,30);
//正确调用, 有默认参数,就可以不传参
TestFunc02(10,20);
//正确调用
TestFunc02(10, 20, 30);
return 0;
}