一、缺省参数🛫
1.1 🚝什么是缺省参数
缺省参数是 声明 或 定义 函数时为函数的参数指定一个缺省值。
在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
缺省参数使用主要规则:调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数。
👉C++中可以给函数的形参赋值:
这就是给函数的参数指定一个缺省值:
如果不进行传参,就会直接使用缺省值
如果传参,则使用传过来的参数
1.2 🚝缺省参数的分类
a. 全缺省参数
全缺省参数:所有参数都有缺省值
规律见图👆
如果要传参,传递的参数从函数第一个参数开始传递,依次传递
我们可能要问了,如果我只想传递第二个参数(跳过前面的参数直接传后面的),行不行呢?
比如:
当然是错误的,全缺省传参的时候必须从左往右连续的传,不能 “跳着” 传 !
b. 半缺省参数(部分缺省参数)
半缺省参数:函数中的所有参数从最右边往左连续地缺省一部分(当然也可以省一个)
省了,但没完全省
举个栗子:
错误①
部分缺省时就不能不传参了
错误②:
函数中的所有参数从最右边往左连续地缺省
不可以从除倒数第一个参数以外的参数开始缺省:
正确用法:
1.3 🚝注意事项
半缺省参数必须从右往左依次来给出,不能间隔着给
缺省参数不能在函数声明和定义中同时出现
缺省值必须是 常量或者全局变量
C++可以,但是C语言不支持(编译器不支持)
注意第二点:如果声明与定义中同时缺省,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值
在声明时给缺省值,定义的时候不能给
二、函数重载🛫
—— “一词多义” ,即一个函数有多个 “ 意思 ”
2.1 🚝什么是函数重载
定义:如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为重载( overloaded )函数。
函数重载是函数的一种特殊情况
C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表( 参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题
注意:
①函数重载不能只有函数返回值类型不同
②main函数不能重载
2.2 🚝演示
比如下面我们定义几个Print函数:
这些函数接受的形参类型不一样,但是执行的操作类似。功能相同
当调用这些函数时,编译器会根据传递的实参类型 推断想要的是哪个函数:
👉函数的名字仅仅是让编译器知道它调用的是哪个函数
而函数重载可以在一定程度上减轻程序员给函数起名字、记名字的负担。
2.3 🚝用法注意事项
a) 不能只有返回值类型不同
b) 类型顺序相同,形参名字不同不构成函数重载
要求类型的顺序不同,不是形参名字的顺序
比如:
到底应该调用哪一个?
无法确定!
会产生歧义
c) 相同类型数据,顺序不同不构成函数重载
与b)类似
b)、c)归结起来就是:形参的名字仅仅起到帮助记忆的作用,有没有它并不影响形参列表的内容
像这样不写形参的名字也是编的过的:
2.4🚝 const 形参
顶层const不影响传入函数的对象。
一个拥有顶层const的形参无法和另一个没有顶层const的形参区分开来
比如:
①
第二行重复声明了int Add(int a);
②
第6行重复声明了int Add(int* a);
在这两组函数声明中,每一组的第二个声明和第一个声明是等价的