1.函数的默认参数:为函数的形参列表赋予默认值
语法:
即不传值,函数就默认使用自己的数据。
例子:
注意事项:
1)若函数某个位置已经有默认参数,那么从这个位置开始往后们都需要有默认参数。
如:
此时是错误的,a已经有了默认参数,b,c,d在a的后面,因此bcd也需要有默认参数。
2)若函数声明有默认参数,那么后续函数的定义就不能有默认参数。
如:
此时func2的定义中,形参不能再赋默认值了
但是可以声明函数的形参中不给形参赋默认值,那么后续定义函数的时候,形参可以赋默认值。
2.函数的占位参数:用于占位,在调用函数的时候必须填补该位置。。。
语法:
例子:
同样,占位参数也可以赋默认值
1 void func(int a, int = 10){}
3.函数重载
作用:函数名可以相同,提高复用性。。
函数重载需要满足的条件如下:
● 同一个作用域下
● 函数名相同
● 函数参数类型不同 或者 个数不同 或者 顺序不同。。。
PS:函数的返回值不能作为函数重载的条件。。
例子:
①此时调用的是func(),而不是func(int a)。。。。。
②此时调用的是func(int a),而不是func()。。。。。
以上注意区分。。。。
甚至可以fun(int a, double b)
诸如此类等等。。。。
---------------------------------------------
而有关PS的问题(函数返回值不能作为函数重载的条件),例子如下:
=================
函数重载的注意事项(两个坑):
● 引用作为重载条件
● 函数重载碰到默认函数的默认参数
①引用作为重载条件
例子如下:
此时会调用func(int &a)这个函数。。
此时会调用func(const int &a)这个函数。。
分析:
首先看void func(int &a)
调用时,如果采用
int a = 10;
func(a);
本质上是:int a = 10; a = &a;
符合引用的本质,但是如果采用
func(10);
即意味着&a = 10;
缺少了引用对象,不符合引用定义(不合法)
综上所述:编译器会按找不同的方式调用不同的重载函数
============================
②函数重载碰到默认函数参数
例子如下:
此时,输入func2(10)时候,会出现二义性,会报错。。
但是如果输入func2(10,20),是可以运行的。。
标签:10,函数,int,高级,默认,func,重载 From: https://www.cnblogs.com/MorningMaple/p/16864244.html