特殊函数

1.内置函数

    1.1概念

   调用函数要花时间和空间,在主调函数执行到函数调用语句时,流程的控制转移到被调用函数的入口处(转移前要记下该指         令的地址当时的有关信息,以便返回和恢复),传递参数并执行函数体。然后流程再回到主调函数继续往下执行。

   为了提高效率,在调用函数时直接将该函数的代码嵌入到主调函数中,不需要再把流程转出去。又称内嵌函数或内联函数。

  1.2定义

   inline int max(int,int,int);

   可只在函数声明时加上inline指定内置函数,定义函数时也可以指定,总之要在调用这个函数前,把inline的信息告诉编译             系统,编译系统会在处理函数调用时按内置函数处理。

   inline声明只是程序设计者对编译系统提出的建议,而不是指令。编译系统会根据具体情况决定是否处理为内置函数。遇到           复杂的函数体会忽略inline声明。

   1.3 使用

虽然内置函数节省了运行时间,但增加了目标程序的长度。故只将规模小而使用频繁的简单函数(如定时数据采集)声明为内置函数。因为函数规模很小的时,调用的时间甚至可能超过执行时间,定义为内置函,大大减少了程序运行时间。

内置函数中不能包含复杂的控制语句,如循环和switch。

2. 函数重载

C++允许同一函数名定义多个函数:

一般来说一个函数对应一种功能。如果函数有同一类的功能,而只是有些细节不同,那么可以用同一个函数名统一起来。

函数类型、函数体、参数个数、参数类型、参数顺序都可以不同。

参数列表的三个标准中必须有一个是不同的,因为系统是根据调用函数时括号里的信息选择与之相匹配的函数。

 3. 函数模板

3.1  C++提供了函数模板(function template)。

函数重载实现了一个函数名多用,实现相同或类似的功能。但仍然要定义多个函数,若是函数体和参数个数都相同,只是参数类型不同,可以用模板函数。

所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函 数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。

3.2 定义函数模板

template<typename T>   //模板声明,其中T为类型参数

template<class T>

T max(T a,T b,T c) {函数体}// 定义一个通用函数,用T作虚拟的类型名

函数调用时根据实参的类型来确定T。

用函数模板比函数重载更方便,程序更简洁。但应注意它只适用于函数的参数个数相同类型不同。

4. 有默认参数的函数

有时多次调用同一函数时用同样的实参,C++提供简单的处理办法,给形参一个默认值,这样形参就不必一定要从实参取值了。

4.1 定义

void f2(float a,int c,int b=0,  char d=′a′ );

实参与形参是从左至右结合的,所以指定默认值的参数必须放在最右端

如果函数的定义在函数调用之前,则应在函数定义中给出默认值。如果函数的定义在函数调用之后,则在函数调用之前需要有函数声明,此时必须在函数声明中给出默认值,在函数定义时可以不给出默认值。

总之要在这个函数调用前,把默认值的信息告诉编译系统,不然编译系统会在处理函数调用时认为实参形参的个数不匹配。

4.2 调用

调用灵活:

f2(3.5, 5, 3, ′x′) //形参的值全部从实参得到

f2(3.5, 5, 3)      //最后一个形参的值取默认值′a′

f2(3.5, 5)   //最后两个形参的值取默认值,b=0, d=′a′

可以看到,在调用有默认参数的函数时,实参的个数可以与形参的个数不同,实参未给定的,从形参的默认值得到值。利用这一特性,可以使函数的使用更加灵活。

当定义同一类功能而只是参数个数不同的两个函数时,可以考虑函数重载,但用默认参数更方便。

一个函数不能既作为重载函数,又作为有默认参数的函数。因为当重载函数调用就是依据形参的不同。如果少写一个参数,系统无法判定是利用两个形参的重载函数 还是利用 三个参数其中一个为默认参数 的函数,出现二义性,系统无法执行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值