c++ 函数高级 (笔记)

1、函数的默认参数
c++中,函数的形参列表中的形参可以有默认值
与无默认参数的函数不同的是,在调用有默认值参数的函数中,可以省略掉有默认值的参数,如果不省略就按照传入的参数进行后续操作。

例子如下:

//无默认值参数
int func(int a,int b,int c)
{	
	return a + b + c;
}
/*再调用func时,必须要写类似与func(10,10,10)
这样,不能缺少参数*/

//有默认值参数
int func1(int a,int b = 10,int c = 10)
{
	return a + b + c;
}
/*此时,在调用func1时,就可以直接写func1(10),这样函数就会使用之前默认的值,
但是如果写func1(10,20,20),那么还是按照传入的参数对形参进行赋值*/

即函数有默认参数时,如果我们自己传入数据,就用自己的数据,如果没有,那么就用默认值

注意事项:
(1)如果某个位置已经有了默认参数,那么从这个位置往后从左到右的形参都必须有默认值
例如:

int func1(int a,int b = 10,int c = 10)
{
	return a + b + c;
}
/*b是第一个有默认值的形参,那么从b开始后面的所有
形参都要有默认值*/

(2)如果函数声明(函数体)有默认参数,那么函数体(函数声明中)就不能有默认参数,否则会有歧义
例如:

//声明有默认参数
int func1(int a,int b = 10,int c = 10);

int func1(int a,int b,int c)
{
	return a + b + c;
}
//函数体有默认参数
int func1(int a,int b,int c);

int func1(int a,int b = 10,int c = 10)
{
	return a +  b + c;
}
在声明和函数体中,有且仅有一个可以带有默认参数

2、函数占位参数
c++ 中函数的形参列表里可以有占位参数,用来做占位,调用函数时必需填补该位置
语法 : 返回值类型 函数名(数据类型){}
示例:

void func(int a,int)//第二个为占位参数
{
	cout<<"hhh"<<endl;
}
//调用时必须把第二个参数补齐,即func(10,10)
 
//占位参数可以有默认参数
void func(int a,int = 10)//第二个为占位参数
{
	cout<<"hhh"<<endl;
}
/*这样调用func时可以不进行补位,直接func(10),也可以输入自己的数据,同上面对默认参数的用法*/ 	

3、函数重载
作用:
函数名可以相同,提高复用性
满足条件:
1、在同一个作用域下
2、函数名称相同
3、函数参数类型不同,或者个数不同或者顺序不同
前两个很好理解,第三个条件的话看如下例子:

//函数参数个数不同
void func(int a)
{
    cout<<"func(int a)"<<endl;
}

void func()
{
    cout<<"func()"<<endl;
}

//函数参数类型不同
void func(double a)
{
    cout<<"func(double a)"<<endl;
}

//函数参数顺序不同
void func(int a,char b)
{
    cout<<"func(int a,char b)"<<endl;
}

void func(char a,int b)
{
    cout<<"func(char a,int b)"<<endl;
}

int main()
{
    func(10);
    func();
    func(3.14);
    func('c',5);
    func(5,'c');
    return 0;
}
//注意,函数的返回值不可以作为函数重载的条件

函数重载的注意事项
1、引用作为函数重载的条件

void func(int &a)
{
    cout<<"func(int &a)"<<Endl;
}

void func(const int &a)
{
    cout<<"func(const int &a)"<<Endl;
}
/*引用和常量引用是满足函数重载的第三个条件,但是如果要调用第二个函数
不能使用func(变量)的形式调用,必须要使用
func(常量)的形式调用,因为,int &a = 常量 语法错误*/

2、函数重载遇到函数默认参数

void func(int a,int b = 10)
{
    cout<<"func(int a,int b = 10)"<<Endl;
}

void func(int a)
{
    cout<<"func(int a)"<<Endl;
}
/*这样定义是符合语法规则的,但是当调用类似与func(10)时
就会产生二义性,所以应该尽量减少二义性的这种情况*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值