函数特性
---------siwuxie095
C++函数新特性:
1、函数参数默认值
2、函数重载
3、内联函数
函数参数默认值:
如:第一个函数 fun() 有三个参数,后两个参数给了默认值,没问题
第二个只给中间的参数 j 默认值,后面参数没有给,是有问题的
给参数默认值时,有这样一个规则:
一定要将参数的默认值写到参数列表的最右端
也即从右往左赋值
函数参数默认值在使用时的注意事项:
如:
定义时需要先进行声明,声明时可以加默认值,
而定义时不建议把默认值写上
经测试,如果在定义函数时也写上默认值,有些编译器
可以通过,有些编译器是不可以通过的,而采用 声明给
默认值,定义不给默认值 的方式,所有编译器都可以通过
在使用时:无实参则用默认值,否则实参覆盖默认值
即:
如果传入的是 20,实际传入的就是 20、5、10;
如果传入的是 20、30,实际传入的就是 20、30、10;
如果传入的是 20、30、40,实际传入的就是 20、30、40
函数重载:
一个前提:在相同作用域内
两个条件:一是同名函数,二是参数个数 或 参数类型不同
满足上述前提和条件的多个函数,互称为重载函数
如:
在真正调用时,计算机如何区分重载的函数?通过名称?
名称都一样,都是 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;
//一般函数有默认参数值在声明时给出 在定义时不写 //因为定义时写了在某些编译器上可能通不过 inline void fun(int i = 30, int j = 20, int k = 10); inline void fun(double i, double j);
int main(void) { fun(); fun(1.1, 2.2); fun(100,200); system("pause"); return 0; }
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; /** *函数功能:返回a和b的最大值 *a和b是两个整数 */ 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"); return 0; } |
vs2013中:
【made by siwuxie095】
posted on 2017-02-16 17:03 siwuxie095 阅读(332) 评论(0) 编辑 收藏 举报