c++中函数的默认参数(5)

一.默认参数定义与用法:

其实也是为了方便,默认参数: 在声明某个函数时将它的参数也初始化,那么这些参数就是该函数的默认参数,又叫缺省参数,看代码

#include <iostream>
using namespace std;
void fn(int a=4);
int main()
{
    fn();
    fn(6);
    return 0;
}
void fn(int a)
{
    cout<<"a:"<<a<<endl;
}

函数的输出结果:

a: 4, a: 6

说明:

当调用fn( )函数,不填写参数时,电脑自动将参数a设置为4了。而当我们填写参数时,函数也能够按照我们的意愿正常运行

二.定义多个默认参数时

这种情况比较容易出现错误,先举个小例子,来说明一下函数当出现多个参数的时候

void fn(int a, int b, int c, int d);

首先这个函数我们想定义成默认参数类型,必须要注意的是我们必须要从右往左去定义

 <---------------------------------方向,而且定义的过程中,不能跳着定义

void fn(int a, int b=1, int c=2, in d=3);//正确,从右向左依次定义,一直到你想停下来的元素,比如此时在a处停下,当然a也可以定义
void fn(int a, int b=1, int c , int d=4);//错误,原因,定义的时候把c跳过去了
void fn(int a=5, int b=2, int c=5, int d);//错误,不能从左向右定义,只有一种情况可以,就是全都定义了,只要右边有没定义的,都算出错

三.默认参数的用法:

首先说明一下,在调用带有默认参数的函数时,此函数有几个没有被默认定义的参数,那么你就要将这几个参数赋值,其余的参数(就是声明函数时已经定义的默认参数)可以赋值,可以不赋值,如果赋值,那么就被赋上你给它的值,如果不赋值,那么系统就把时的默认数赋给次参数,举例:

#include <iostream>
using namespace std;
void fun(int a, int b, int c=3, int d=4);
int main()
{
    fun(1,2); //正确 a,b 不是默认参数,因此需要被赋值
    fun(1,2,6);//正确,此时c=6,d=4
    fun(1,2,6,5);//正确,此时c=6,d=5
    fun(1);//错误,因为b没有被赋初值
    return 0;
}

总结一下: 怎么说呢,c++中,一般调用函数的时候,一般有几个参数,就要赋值几个参数,那么当在声明时有些参数被赋值了,那么在调用的时候被赋值的那些可以不给调用,系统会自动填进去,但是在定义默认参数的时候注意是自右向左就可以了

四.默认参数和重载函数的混淆

int fn(int a);
int fn(int a,int b=2);
int fn(int a,int b=3,int c=4);
//这些函数不论是从重载的角度看,还是从默认参数的角度看都是合法的。然而,这样的写法却是不合理的。
//当我们调用函数fn(1)的时候,三个函数都是可以匹配的,因为电脑可以认为我们省略了后面的参数;当我们调用函数fn(1,1)的时候,后两个函数也都是可以匹配的……//由于电脑无法确认我们到底想要调用哪个函数,所以导致了错误的发生。
//因此,我们在同时使用重载函数和默认参数的时候,要注意到这一点。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值