首页 > 其他分享 >函数高级

函数高级

时间:2022-11-06 21:57:47浏览次数:39  
标签:10 函数 int 高级 默认 func 重载

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

相关文章