C++函数提高

目录

函数默认参数

占位参数

函数重载


1、函数默认参数:

//当某个位置的参数有默认值,则从这个位置向后所有的参数都必须要有默认值
int func1(int a, int b = 10, int c = 10)
{
   return a+b+c;
}

//函数的声明和定义之间只能其中一个有默认值,否则产生二义性的错误
int func2(int a = 10, int b = 10);
int func2(int a, int b)
{
   return a+b;
}

int main()
{
   //当函数参数有默认值时,函数调用时该参数可以不传参
   cout<<func1(10,20)<<endl;  //40,有默认值的参数未传参使用默认值,传参使用传参值
}

2、占位参数:

C++函数的形参列表里可以有占位参数用来占位,调用该函数时则必须填补该位置

语法:返回值类型  函数名(数据类型){}

void func1(int a, int)
{
   cout<<"hello"<<endl;
}

void func2(int a, int = 1) //占位参数也可以有默认值,该默认值无法使用
{
   cout<<"hello"<<endl;
}

int main()
{
   func(10,20);  //必须填补占位参数,且填补的值无法使用
   func2(10);    //当占位参数有默认值时,调用时可以不传参
}

3、函数重载:

作用:函数名可以相同,提高复用性

函数重载发生的条件:

a.在同一个作用域下

b.函数名称相同

c.函数参数类型不同或参数个数不同或顺序不同

注:函数的返回值类型不可以作为函数重载的条件

//同一作用域下
void func()
{
  cout<<"func"<<endl;
}
void func(int a)   //函数参数的个数不同
{
  cout<<"func(int a)"<<endl;
}
void func(float a)   //函数参数的类型不同
{
  cout<<"func(float a)"<<endl;
}
void func(float a, int b)      
{
  cout<<"func(float a, int b)"<<endl;
}
void func(int b, float a)    //函数参数的顺序不同
{
  cout<<"func(int b, float a)"<<endl;
}

//int func(int b, float a)    //函数参数的返回值类型不同,不能作为函数重载的条件
//{
  //cout<<"func(int b, float a)"<<endl;
//}

int main()
{
  func();
  func(1);
  func(1.5);
  func(1.5,1);
  func(1,1.5);
  return 0;
}

注:引用作为函数重载的条件

void func(int &a)
{
  cout<<"func"<<endl;
}
void func(const int &a)   //参数类型不同
{
  cout<<"func(const int &a)"<<endl;
}

int main()
{
  int a = 10;
  func(a);  //func
  func(10);  //func(const int &a) [int &a = 10不合法;const int &a = 10合法]
}

注:函数重载碰到默认参数(应尽量避免函数重载时带有默认参数)

void func(int a, int b = 10)
{
  cout<<"func(含默认参数)"<<endl;
}
void func(int a)
{
  cout<<"func()"<<endl;
}
int main()
{
  //func(1); 错误,两个函数都可被调用,产生二义性
  func(1,2); //将调用第一个函数
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值