缺省参数、函数重载、引用的使用

一.缺省参数
概念:缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
举个例子:
在这里插入图片描述
但是,在函数声明和定义的同时,只能对声明或者定义的其中一个进行参数指定默认值,如果同时指定默认值就会出现重定义默认值,如图:
在这里插入图片描述
所以在使用参数默认值时,我们就需要注意,从代码的安全性以保密性出发,通常我们只对函数的声明进行参数指定默认值。下面我们具体谈谈缺省参数的不同类别
a.全缺省参数
简单的说,就是对函数所有参数进行指定默认值
b.半缺省参数
对函数的"部分"参数进行指定默认值
这里需要注意的是:
1. 部分参数是指只能是从右向左依次给出,不能间隔
在这里插入图片描述

2. 缺省参数必须是常量或者全局变量
在这里插入图片描述

3. C语言不支持缺省参数
大家自行验证
二、函数重载
概念:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的 形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题
在这里插入图片描述
如图,根据传递参数类型的不同,进入同名但是不同参数变量类型的函数,对号入座,进行编译。
但是,需要注意的是:
1. 无法重载只是返回值类型不同的函数
2. C++编译器在函数编译阶段,会对函数名字(包括函数名以及参数类型等)进行修改
3. C语言不支持重载的原因简单的说就是对函数名字进行修改过于简单
关于函数重载在不同编译器下函数名字的格式,大家可以自行验证.
三、引用
概念:引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
在这里插入图片描述
通过图片也可以看出,a,ar,arr的地址相同,这也就和概念吻合了。
需要注意的是:
1. 引用在定义时必须初始化,如图:
在这里插入图片描述

2. 一旦引用实体,就不能引用其他实体,如图:
在这里插入图片描述
错误语句不是编译不过,而是它的意思并不是将ar变为b的别名,而是将b的值赋值给ar。
3. 常变量不能进行"简单"引用,如图:
在这里插入图片描述
4. 引用不能改变变量类型,如图:
在这里插入图片描述
如果改变变量类型,将会出现隐式转换,但是引用就不是变量的别名,而是重新开辟空间按,供引用变量使用,如图:
在这里插入图片描述
所以可以看出,这里ar已经不是a的别名了,而是新开辟的空间。
5. 不能对常量进行引用
在这里插入图片描述
6. 引用关于函数的使用,以及效率问题
这里我们谈一个交换函数

void fun1(int *x1, int *x2){
	int temp = *x1;
	*x1 = *x2;
	*x2 = temp;
}
void fun2(int x1,int x2){
	int temp = x1;
	x1 = x2;
	x2 = temp;
}
void fun3(int& x1, int &x2){
	int temp = x1;
	x1 = x2;
	x2 = temp;
}

很容易看出,fun1通过传地址的形式,可以达到交换,而fun2传值很显然不可以交换两个数据.fun3在我们刚刚谈过之后,大家应该也可以知道,他只是实参的一个别名,所以也可以达到交换的目的.
关于每个函数的效率问题,大家可以自行验证,起始通过概念大家也可以了解到,指针以及引用的方式效率明显会高于传值,关于引用与指针之间效率,大家自行验证。
7. 返回值引用
在这里插入图片描述
这里我们需要注意,mul函数返回值为引用类型,所以这里a为z的别名,但是为什么我们在改变mul参数后,a也会变了?
是因为函数在调用结束后,虽然该函数空间被系统回收,但是a仍然还是该空间中z的别名,在继续调用mul函数后,z改变了,自然a跟着也就改变了。
这里我只是简单谈了一下缺省参数、函数重载、引用的简单使用方法以及注意事项,如果读者想深入了解,可以查看相关书籍

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值