2021-12-31 函数高级应用

1.函数参数可以有默认参数

注意事项1:
//不能这么写,会报错,因为传入2个参数的时候,是给a,b还是给a,c会产生歧义
//也就是说,如果某个位置已经有了默认参数,那么从这个位置以后,从左到右都必须要有默认值
//int func2(int a, int b = 20, int c )

注意事项2:
//如果声明有了默认参数,函数实现就不能有默认参数
//运行会报错,显示重定义默认参数,因为如果
//声明:int func3(int a = 10, int b = 10);
//实现:int func3(int a = 20, int b = 20){} 编译器调用的时候就不知道默认用哪一个了
int func3(int a = 10, int b = 10); //函数声明
int func3(int a = 10, int b = 10) //函数实现
{
return a + b;
}

正确:
int func3(int a = 10, int b = 10); //函数声明
int func3(int a , int b) //函数实现
{
return a + b;
}
或者
int func3(int a , int b ); //函数声明
int func3(int a = 10, int b = 10) //函数实现
{
return a + b;
}

#include <stdio.h>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

//*******1.函数参数可以又默认参数

int func(int a, int b, int c)
{
	return a + b + c;
}

int func2(int a, int b  = 20, int c = 30)
{
	return a + b + c;
}

int main()
{
	//func(10, 20);一个参数都不能扫,否则报错
	cout << func(10,20,30) << endl;
	cout << func2(10,30) << endl;
	return 0;
}

二 函数的占位参数

函数形参列表可以有一个占位参数,但是调用的时候必须填补该位置

//*******应用二  .函数占位参数
//void fun(int a,int) 第二个int 就是一个占位,在调用这个函数的时候,即使不用,也需要随意传入一个相应的数据类型

void fun(int a,int)
{
	cout << "this is fun " << endl;
}

int main()
{
	fun(10, 10);
	return 0;
}

三 函数重载

//函数重载的作用:函数名可以相同,提高复用性
//
//函数重载满足条件
//1.同一个作用域 下面的例子的函数都在main函数外面,属于全局作用域
//2.函/*数名称相同
//3.函数参数类型不同或者个数,或者参数顺序不同*/

void fun()
{
	cout << "fun is using" << endl;
}

void fun(int a)
{
	cout << " fun(int a) is using" << endl;
}

void fun(int a ,double b)
{
	cout << " fun(int a ,double b) is using" << endl;
}

void fun(double b , int a)
{
	cout << " void fun(double b , int a) is using" << endl;
}


//int fun(double b, int a)  函数指数返回值类型不一样是不可以实现重载的,会有歧义 ,fun(double b, int a)不给接受值,
// 就不知道调用的是void fun(double b , int a)还是 int fun(double b, int a)
//{
//	cout << " void fun(double b , int a) is using" << endl;
//}


int main()
{
	fun();
	fun(10);
	fun(10,3.14);
	fun(3.14, 10);
	return 0;
}

在这里插入图片描述

四 引用作为重载条件 以及 函数重载遇到默认参数

//*******应用四  .引用作为重载条件 以及 函数重载遇到默认参数的处理

//1 引用作为重载条件
void fun(int &a)  //传10进来的,相等于 int &a = 10,是非法的,引用必须要传入一个栈区或者堆区的数据,常量是放在常量区的
{
	cout << "fun(int &a) is using" << endl;
}
void fun(const int &a)
{
	cout << "fun(const int &a) is using" << endl;
}

//2.函数重载遇到默认参数的处理
void func2(int a ,int b = 10)
{
	cout << "func2(int a)) is using" << endl;
}
void func2(int a)
{
	cout << "func2(int a)) is using" << endl;
}

int main()
{

	cout << "******1 引用作为重载条件********" << endl;
	// 调用的是 fun(int &a),因为a本身是一个变量,可读可写,const int &a是只读的状态
	int a = 10;
	fun(a);

	cout << "***************" << endl;
	fun(10);

	cout << "******2.函数重载遇到默认参数的处理********" << endl;
	//func2(10);  此调用有歧义,void func2(int a, int b = 10)。void func2(int a)都可调用,会报错,尽量避免这样的使用

	return 0;
}


在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值