函数特性

来源:互联网 发布:博雅软件2017 编辑:程序博客网 时间:2024/04/30 03:57

---------siwuxie095

  

  

  

  

C++函数新特性:

  

1、函数参数默认值

  

2、函数重载

  

3、内联函数

  

  

  

  

  

函数参数默认值:

  

如:第一个函数fun() 有三个参数,后两个参数给了默认值,没问题

第二个只给中间的参数j 默认值,后面参数没有给,是有问题的

  

  

给参数默认值时,有这样一个规则:

一定要将参数的默认值写到参数列表的最右端

 

  

也即从右往左赋值

  

  

  

函数参数默认值在使用时的注意事项:

  

如:

  

  

定义时需要先进行声明,声明时可以加默认值,

而定义时不建议把默认值写上

  

经测试,如果在定义函数时也写上默认值,有些编译器

可以通过,有些编译器是不可以通过的,而采用声明给

默认值,定义不给默认值的方式,所有编译器都可以通过

  

  

在使用时:无实参则用默认值,否则实参覆盖默认值

  

  

即:

如果传入的是 20,实际传入的就是 20、5、10;

如果传入的是 2030,实际传入的就是 203010

如果传入的是 203040,实际传入的就是 203040

  

  

  

  

  

  

  

函数重载:

  

一个前提:在相同作用域内

两个条件:一是同名函数,二是参数个数参数类型不同

  

满足上述前提和条件的多个函数,互称为重载函数

  

 

  

如:

  

  

  

在真正调用时,计算机如何区分重载的函数?通过名称?

名称都一样,都是getMax,如果通过参数,计算机如何

处理?

  

  

在实际使用和编译过程中,如果 getMax 名称相同,

参数个数参数类型不同,在编译好之后,实际上

是采用名称+参数 的方式,形成了一个新的函数名,

来区分两个所谓的同名函数

  

而调用过程,计算机采用自动识别,根据传入的实参

个数和类型,调用相应的函数

  

  

  

重载带来的好处:

如:求几个数的最大值:

有时候想求 3个数的最大值,

有时候想求 5个数的最大值,

有时候想求结构体数组的最大值,

总而言之:是要求最大值

  

使用重载就不用再绞尽脑汁去想各种各样的名字,

而且有时候在某种场合下只有一个名字是合适的,

起名字时就可以起同样的名字,调用时计算机替你

决定究竟哪一个函数是最适合当前调用的,提高了

编码效率

  

  

  

  

  

  

  

  

内联函数:

  

  

内联函数和普通函数的区别:

  

  

  

定义上没有太大的不同,在调用上的区别:如果使用主调函数

main() 来调用一个普通函数 fun(),将进行五个步骤,首先调用

fun(),找到 fun() 的相关函数入口,执行 fun() 里相关代码,再

返回主调函数,主调函数再向下运行其他代码,直到结束

  

内联函数则是在编译时就将函数体内fun() 体内相关代码与相应

实参替代掉主调函数main() 里相关调用的代码

  

即省掉了调用函数的 第二步 和 第四步,可以为调用过程节省很多

时间,尤其是进行循环调用时,将会节省更多时间,有时候第三步

用的时间不长,反而是第二步第四步用的时间更长,此时就非

常适用于内联函数

  

  

内联函数的标志,即关键字:

  

  

  

  

如:

  

  

  

化简后,代码展开:

  

  

  

  

  

  

既然内联函数这么好,为什么不是所有地方都用内联函数,而是

选择性的去使用内联函数?

  

  

  

其实是基于以下几方面考虑:

1、作为编译器来说,你即便把所有函数前都加上inline,也是

建议性的,所谓建议性,即是不是要进行内联编译,由编译器

根据情况决定,你只能告诉计算机你建议这一行代码函数采

用内联的方式进行编译

2、作为内联函数来说,要求逻辑必须简单,其中不能够包含for

循环、while循环,这样的较为复杂的逻辑结构。而调用时,一般

来说,调用频繁的函数,更建议使用内联函数

3、如果内联函数写成一个递归函数,则无法成为内联函数,即便

加上inline,编译器都会将之作为普通函数进行调用或编译

  

  

  

  

最后:

  

  

  

  

程序 1

  

#include <stdlib.h>

#include <iostream>

using namespace std;

  

  

//一般函数有默认参数值在声明时给出在定义时不写

//因为定义时写了在某些编译器上可能通不过

inlinevoid fun(int i = 30, int j = 20,int k = 10);

inlinevoid fun(double i, double j);

  

int main(void)

{

fun();

fun(1.1,2.2);

fun(100,200);

system("pause");

return0;

}

  

void fun(int i,int j, int k)

{

cout << i <<"," << j << "," << k << endl;

}

  

void fun(double i,double j)

{

cout << i <<"," << j << endl;

}

  

vs2013中:

  

  

  

  

程序 2

  

#include<stdlib.h>

#include <iostream>

using namespace std;

/**

*函数功能:返回ab的最大值

*ab是两个整数

*/

int getMax(int a,int b)

{

return a > b ? a : b;

}

  

/**

*函数功能:返回数组中的最大值

* arr:整型数组

* count:数组长度

*该函数是对上面函数的重载

*/

int getMax(int *numArr,int count)

{

//定义一个变量并获取数组的第一个元素

int maxNum = numArr[0];

for (int i =1; i < count ; i++)

{

//比较变量与下一个元素的大小

if (maxNum<numArr[i])

{

//如果数组中的元素比maxNum大,则获取数组中的值

maxNum = numArr[i];

}

}

return maxNum ;

}

  

int main(void)

{

//定义int数组并初始化

int numArr[3] = {3, 8,6 };

  

//自动调用int getMax(int a, int b)

cout << getMax(numArr[0],numArr[2]) << endl;

  

//自动调用返回数组中最大值的函数返回数组中的最大值

cout << getMax(numArr,3) << endl;

system("pause");

return0;

}

  

vs2013中:

  

  

  

  

  

  

【made by siwuxie095】

0 0
原创粉丝点击