一.缺省函数
缺省函数,顾名思义就是可以在传参时不传或者少传参数的函数。这里举个例子:
完全缺省
上面的就属于全缺省,可以不传任何参数,当然也可以传参数,这样会覆盖原来的值。
但要注意的是传参必须从左至右依次传入,不能跳过中间某一个参数去传另一个。
这里如果我跳过b参数去传c,那么很明显是不被允许的。
部分缺省
像这种部分缺省的必须给缺省部分传参数,当然后面不缺省的可传可不传。上面我们说到不可跳跃传参,那么这里函数设计时自然也不可以跳跃创建形参。
这样的写法也是不被允许的。
缺省函数的声明
大家可以发现在函数跨文件使用时,我们常常会创建一个.h的文件来包含函数的声明,那么此时会出现一个问题,就是缺省函数在声明和定义时改怎么传参呢?根据c++的语法,其实是在声明阶段缺省,定义时不能缺省(上面的例子是函数在同一源文件且函数在使用时的上面,所以声明和定义是一体的)。
具体原因其实是在程序在编译阶段时的特性所产生的,这里就不多讨论啦。
二.函数重载
在c语言中,同一函数名是不能重定义的,但在c++里如果满足条件是可以使用的。
1.参数类型不同
上述两个函数名相同,但函数参数类型不同,是可以同时存在的(注意是参数类型,跟返回值类型无关)。
2.参数个数不同
上面很好理解,那么如果参数是缺省函数呢?答案是也可以,但传参有要求。
以上面的函数为例,如果传参为0的话会造成歧义,所以必须传一个参。
3.参数顺序不同
注意这里的顺序不是指形参的不再顺序不同,是指不同类型形参的顺序不同。
插个小知识,为什么c++能支持同名函数(函数重载)呢?简单来说,在链接阶段 ,每个函数都会有一个地址,而函数的地址就是函数名的地址,而在c中同名函数的地址是相同的会造成冲突。而在c++中有一个函数的命名规则,函数在编译地址时,函数名会自动带上参数类型的缩写(例如f(int a,char c),缩写就是fac,当然这是gcc的规则,vs的命名需要对照手册才能看懂),所以就能解释为什么参数不同,c++就可以区分不同函数了。