我在课上被老师用抽象的讲法,把这两个用三分钟就讲完了,导致我只能课下自己去学习。因此我写下这个希望大家能够理解。
1.函数重载
函数重载就是为了在同一作用域出现功能类似的同名函数的时候而诞生的。它常用来处理实现功能类似数据类型不同的问题
函数重载要求的同名函数的形参列表(参数个数或者参数类型或者参数类型顺序)不同,以下是三种类型的图片展示。注意:后面红字或许能解决你们部分疑惑
你们看第一张图明明没有问题,但是第二章图却出现了问题,代表了不能通过修改形参的名字去完成函数重载,因为计算机只会记住你传入的类型,而不是形参的名字,但是我们可以通过修改实参的类型完成函数重载。
跟上面差不多,说明了函数重载能改变参数的个数实现,但是不能通过改变函数的返回类型实现,假设你 f 前面都没有错,但是计算机怎么能确定你要返回哪个类型,机器不能处理歧义,因此就直接报错。
证明了只修改参数类型顺序也是能实现函数重载的,你们看到这或许会疑惑为什么我没有去判断传入参数的类型,难道计算机会自动匹配吗,答案是当然。
这可是c++相较于c语言的巨大优势之一,在c语言中,函数名(地址)会原封不动的闯入计算机,而c++则通过将函数名用它的参数列表来修饰一遍(这个过程可以在汇编中查看),所以能实现函数重载。
2.引用与指针的区别
首先,让我们讲一下引用这个概念,其实就跟取外号差不多,当你做了什么事后,无论你是用外号干还是你本人干,都是你干的。
先讲一下引用的注意事项。
1.引用在定义时必须初始化
2.常引用
这种不能实现,你把它的权限放大了,从只读变成能修改。注:常数也是只读。
这种就没什么问题,权限缩小了。
3.数据类型必须匹配
不匹配就会报错
4.不能用于算术表达式的引用
因为算术表达式在运算的过程中其实开辟了临时空间(存储结果),用完就被销毁,给这个空间取别名(引用)没什么意义。
5.返回值的区别
引用比传值效率更高,因为传值是对数据的拷贝这个过程中也有消耗
6.引用初始化后就不能改变指向
看到这,或许你会觉得跟指针差不多,但实际上是有区别的。(当然本质没什么区别,在底层都是有空间)
6.引用与指针的区别
1.你看,一个是本身的数据类型大小,一个是指针的大小。
2.引用必须初始化,指针不需要(当然最好还是初始化,避免野指针问题)
3.引用初始化就不能改变指向,指针可以。
4.没有NULL引用,但有空引用。
5.引用自加后在自身值加一,而指针地址向后偏移一个数据类型
6.有多级指针,但没有多级引用。
7.访问实体不同,指针需要我们解引用,但是引用靠编译器就行。
8.引用比指针更加安全