C++练习9:函数(默认、占位)参数、函数重载

内容

1.函数默认参数
2.函数占位参数
3.函数重载使用和注意事项
——————————————————————————————————————————

*1.函数默认参数

C++中,函数形参列表中的形参可以有默认值。
语法:函数返回值类型 函数名(形参 = 默认值) {函数体}

#include<iostream>
using namespace std;
//函数默认参数

int func1(int a,int b=1,int c=2);    //编译成功,未出错
int func1(int a,int b,int c){        //如果函数已经声明过形参的默认值了,那么在函数定义实现时就不能再有函数的默认值了
	return a+b+c;
}
int func2(int a=1,int b=2,int c=3){
	return a+b+c;
}
//int func2(int a = 1;int b,int c=3){  //编译器提示出错!
	//return a+b+c;
//}

int main(){
	func1(1,1,1);
	cout<<func2()<<endl;
	cout<<func1(1,1,1)<<endl;
	system("pause");
	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:
(1)函数形参列表中设置默认值时,如果出现了第一个参数设置了默认值,其之后的参数都必须设置默认值,不可出现中间未设的情况!
(2)函数声明已经设置了形参默认值了,在后面声明的时候就不能再设置形参默认了,否则生成会出错!
(3)如果函数定义时有三个参数,其中两个设置了默认值。函数调用时如果只传入一个实参,那么函数实现时使用第一个参数的实参值,后两个使用函数默认值。不会报错!
(4)如果函数定义时,每一个参数都设置了默认值,那么函数调用时不传入实参,也同样可以运行,因为函数实现时直接使用参数的默认值,同样不会报错!

*2.函数占位参数

C++中,函数的形参列表中可以有占位参数,用作占位设置参数个数,在函数调用时需要补全参数个数。
语法:返回值类型 函数名(参数类型1 形参名,参数类型2){函数体}

#include<iostream>
using namespace std;
//函数占位参数

void func3(int a,int){
	//return a++;
	cout<<"func3"<<endl;
}

int main(){
	func3(1);//报错!显示传入参数太少
	func3(1,1);
	system("pause");
	return 0;
}

在这里插入图片描述
在这里插入图片描述
注意:占位参数必须填补!在函数调用时必须需要补全参数个数。

*3.函数重载的使用及注意事项

作用:函数名可以相同,提高复用性
函数重载条件:
(1)函数名称相同
(2)函数作用域相同
(3)函数参数类型不同 or 参数个数不同 or 参数顺序不同

#include<iostream>
using namespace std;
//函数重载
void func(int a) {         
	cout << "函数func(int a)的调用" << endl;
}

void func(double a) {         //函数重载,改变参数类型
	cout << "函数func(double a)的调用" << endl;
}

void func(int a, int b) {     //函数重载,改变参数个数
	cout << "函数func(int a,int b)的调用" << endl;
}

void func(int a, double b) {  //函数重载,改变参数个数/参数类型
	cout << "函数func(int a,double b)的调用" << endl;
}

void func(double b, int a) {  //函数重载,改变参数个数/改变参数顺序/改变参数类型
	cout << "函数func(double b,int a)的调用" << endl;
}

//函数返回值不可以作为函数重载条件
//int func(double a, int b)
//{
//	cout << "func (double a ,int b)的调用!" << endl;
//}


int main(){
	func(1.0);
	func(1, 1);
	func(1, 1.0);
	func(1.0, 1);
	system("pause");
	return 0;
}

在这里插入图片描述
注意:函数返回值不可以作为函数重载条件!

  • 引用作为函数重载条件
  • 函数重载与函数默认参数
#include<iostream>
using namespace std;
//引用作为函数重载条件、函数重载遇到函数默认参数

void func1(int& a) {
	cout << "函数func1(& int a)的调用" << endl;
}
void func1(const int& a) {  
	cout << "函数func1(const & int a)的调用" << endl;
}
void func2(int a, int b = 1) {
	cout << "函数func2(int a,int b = 1)的调用" << endl;
}
void func2(int a) {
	cout << "函数func2(int a)的调用" << endl;
}

int main(){
	int n = 1;
	func1(n);
	func1(1);
	//func2(1);  
	//只传一个参数,发生歧义,既可以调用第一个func2函数(一个实参对应第一个形参,另一个使用定义的默认参数),也可以调用第二个func2函数(一个形参对应一个实参)
	//func2(n);  //只传一个参数,调用时发生歧义
	system("pause");
	return 0;
}

在这里插入图片描述
在这里插入图片描述
注意:当对函数进行重载时,要避免函数默认参数,在函数调用时发生歧义!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值