1.参数缺省的概念
如图 当传参数时,输出传入参数 不传参数时,输出默认参数
_通俗点讲,就是在定义函数的时候可以给形参赋一个初始化的值,这个值就叫做缺省值,缺省值可以有一个,也可以有多个
2.参数缺省的分类
2.1全缺省参数(备胎的使用方法)
_传递方式说明
全缺省参数 给每一个行参值都赋上缺省值
_调用函数传入三个参数
这个时候 函数的所有正主位置都被占用了 备胎就滚一边去 不需要
_调用函数传入两个参数
这个时候 函数有两个正主位置都被占用了 还剩下一个位置是空的 备胎要上场了
可能今天的函数 缺少第三个正主给它买包包 然后就叫上了三号备胎 恰好三号备胎有钱
_调用函数传入一个参数
今天的函数只有一个正主在 函数乘此机会叫来了二号和三号备胎
二号备胎今天陪它逛街吃饭 三号备胎陪它看电影
_ 调用函数不传参数
函数今天乐坏了 一个正主都不在 直接起飞 叫来了所有备胎
上午先和一号备胎一起去读书看报 下午和二号备胎去打牌娱乐 晚上和三号备胎共进晚餐
_注:函数使用备胎 是从右往左的顺序 正主的存在是从左往右传入
可不要被备胎迷惑 乱了阵脚 次序颠倒 会被抓个正着 !!!
2.2半缺省参数()
相比全缺省参数 半缺省顾名思义 就只有一部分缺省(备胎少了 有一直存在的正主)
_都是缺省家族 备胎使用顺序肯定也是从右往左
如果顺序不对 那就遭老罪咯
另外 备胎不能跳着用 看图
别问为什么 可能是缺省家族觉得玩的太花了不好
总之 用了缺省家族的方式 就得按照 它的规矩来
从右往左赋缺省值 从左往右确定形参
_当没有缺省参数时 调用函数必须让他确定正主 不能少 只能多
这两种都是可以的 (备胎可有可无)
_注:
缺省值必须是常量或者全局变量
形参缺省不是缺了一个值,而是给了一个默认参数值。
不仅是在给出半缺省形参值时需要注意 从右往左依次连续给出
在给具有半缺省参数的函数传递实参的时候,要注意传入实参的个数必须符合给出的缺省形参个数 (只多不少)
还有一点!!!
_缺省参数不能在函数的声明与定义中同时出现
cpp 函数的定义
函数的声明
_当在函数的定义中 赋参数缺省值
可以看到 若是在声明和定义中同时给出函数的缺省参数 此时就会出现【重定义默认参数】的问题
我所给出的值是相同的 若是两边给出的值不同的话 编译器在编译的时候就会产生歧义 不知道使用哪一块的参数
一般我们会选择放在函数的声明处 因为声明处的头文件其他.cpp
文件可以包含 若是将这些缺省参数放在放在了定义处 其他文件就没办法使用到了
_原因就是:
编译时会对语法进行检查 编译之前会有头文件展开 如果声明是没有带默认参数 你又没有传参 自然就会报错 而声明有默认参数 你不传带有默认的参数 编译自然能过 链接时将函数地址填写过来即可
3.参数缺省的实际运用——栈
在数据结构——栈中的应用
定义了一个结构体和一个初始化StackInit的函数 栈的初始大小为4
定义一个普通栈 对其进行初始化 然后再做一些入栈和出栈的操作 可能会出现栈容量不够的情况 所以在Push有一个扩容的逻辑 但是一直扩容也会存在消耗 因为一开始只有4个空间大小 然而一开始就给很大的空间又会浪费 太小了又不合适 这个时候我们的缺省家族 缺省参数就派上用场了 对栈的初始化函数进行一个小小的修改
在函数声明中 添加一个缺省参数 函数定义中直接传值
定义了三个栈 当确定栈的大小时 可以直接传入参数 不知道栈的大小时 就不传入 在函数声明中默认为4 (也就是备胎上场)
当然 参数缺省也不止这一个用例 还有很多很多 目前只会这一点点 大家见谅 ^_^
总结:
本篇文章了解了参数缺省的概念 以及分类 还有关于备胎的使用以及各种细节
核心就是:
缺省值可以有一个,也可以有多个 ,从右往左赋缺省值 从左往右确定形参 顺序不能乱!!!
至于缺省参数更多方面的实际应用 会在c++的学习中慢慢和大家分享 ^_^ ^_^