C++对C语言的拓展(3)—— 默认参数和占位参数
通常情况下,函数在调用时,形参从实参那里取得值。对于多次调用同一函数同一 实参时,C++给出了更简单的处理办法。给形参以默认值,这样就不用从实参那里取值了。
1、单个默认参数
若填写参数,使用你填写的,不填写,使用默认的。
#include <iostream> using namespace std; void printA(int a=3) { cout << a << endl; } int main(void) { printA();//3 printA(10);//10 return 0; }
2、多个默认参数
在默认参数规则中,如果默认参数出现,那么右边的都必须有默认参数。
#include <iostream> using namespace std; float volume(float l,float w=4,float h=5) { return l*w*h; } int main(void) { float v1 = volume(10); float v2 = volume(10,20); float v3 = volume(10,20,30); cout << v1 << endl;//200 cout << v2 << endl;//1000 cout << v3 << endl;//6000 return 0; }
3、默认参数规则
- 只有参数列表后面部分的参数才可以提供默认参数值;
- 一旦在一个函数调用中开始使用默认参数值,那么这个参数后的所有参数都必须使用默认参数值
4、占位参数
(1)函数占位参数:占位参数只有参数类型声明,而没有参数名声明,一般情况下,在函数体内部无法使用占位参数。
#include <iostream> using namespace std; int func(int a,int b,int) { return a+b; } int main(void) { //func(1, 2);//error,必须把最后一个占位参数补上 cout << "func(1,2,3)=" << func(1, 2, 3) << endl;//func(1, 2, 3)=3 return 0; }
(2)可以将占位参数与默认参数结合起来使用
意义:为以后程序的扩展留下线索,兼容C语言程序中可能出现的不规范写法。
C++可以声明占位符参数,占位符参数一般用于程序扩展和对C代码的兼容。
#include <iostream> using namespace std; int func(int a,int b,int=0) { return a+b; } int main(void) { //如果默认参数和占位参数在一起,都能调用起来 func(1, 2);//3 func(1, 2, 3);//3 return 0; }
结论:
如果默认参数和占位参数在一起,都能调用起来