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;
}

结论:

  如果默认参数和占位参数在一起,都能调用起来