C++默认参数

1、默认函数本质功能:使用【不同数目】的参数调用【同一个函数】
2、与函数多态(函数重载)的区别:多态是使用【相同】或【不同】数目的参数,调用多个同名函数
3、默认参数和重载不能同时出现:使用了默认参数就不能使用重载,使用了重载也不能使用默认参数,它们是相互冲突的。因为当调用函数时如果少写一个参数,编译器就无法判定是利用函数重载还是利用默认参数,会出现二义性,无法执行。

例子1:

using namespace std;
void func(int a, float b=1.2, char c='@'){
    cout<< a <<", "<<b<<", "<<c<<endl;
}
int main(){
    func(10, 3.5, '#'); //为所有参数传值
    func(20, 9.8);   //为a、b传值,相当于调用func(20, 9.8, '@')
    func(30);  //只为n传值,相当于调用func(30, 1.2, '@')
    return 0;
}

输出:103.5#
     209.8,@
     301.2,@

4、C++规定,默认参数只能放在形参列表的最后,而且一旦为某个参数指定了默认值,那么它后面的所有参数都必须有默认值。

void func(int a, int b=10, int c=20){ }              //right
void func(int a, int b, int c=20){ }                 //right

void func(int a, int b=10, int c=20, int d){ }       //false
void func(int a, int b=10, int c, int d=20){ }       //false

5、可以在函数声明中指定默认参数,不过默认参数只能指定一次,在声明中指定了就不能在定义中二次声明

void func(int a, float b=1.2, char c='@');

int main(){

    func(30);  //只为n传值,相当于调用func(30, 1.2, '@')
    return 0;
}
//如下是错误写法,无法编译通过
void func(int a, float b=1.2, char c='@'){
    cout<< a <<", "<<b<<", "<<c<<endl;
}
//正确写法如下所示:
void func(int a, float b, char c){
    cout<< a <<", "<<b<<", "<<c<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值