C++学习 【4.4】 利用函数实现指定的功能---函数的重载、函数模板、有默认参数的函数...

4.8 函数的重载

    C++允许用同意函数名定义多个函数,而这些函数的参数个数和参数类型可以不相同。

    函数的重载(function overloading):即对一个函数名重新赋予它新的含义,是一个函数名可以多用。

    所谓重载,其实就是“一物多用”。


    重载函数并不要求函数体相同。

    重载函数的参数个数、参数类型或参数顺序三者中必须至少有一种不同,函数返回值类型可以相同也可以不同。



4.9  函数模板

    4.8介绍的函数的重载可以实现一个函数名多用,将实现相同的或类似功能的函数用同一个函数名来定义。这样使编程者在调用同类函数时感到含义清楚,方法简单。

    但是在程序中仍然要分别定义每一个函数。

    为了解决这个问题,C++提供了函数模板(function template)

    所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,这个通用的函数就是函数模板。

    凡是函数体相同的函数都可以用这个模板来代替,不必要定义多个函数,只需要在模板中定义一次即可。

    在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现不同函数的功能。

#include <iostream>
using namespace std;
template <typename T>        //模板声明,其中T为类型函数
T max(T a, T b, T c)         //定义一个通用函数,用T作虚拟的类型名
{...}

     定义函数模板的一般形式为template<typename T >  或  template <class T>

    template的含义是模板,T为类型参数,实际上是一个虚拟的类型名,表示Tshi一个类型名,但是现在未指定它为那一种具体的类型。

    要等到函数调用时根据实参的类型来确定T是什么类型。

    class和typename的作用相同,都是表示“类型名”,二者可以互换。

    以前的C++程序员都用class。template是不久前才被加到标准C++的。

    注意:函数模板只适用于函数体相同、函数的参数个数相同而类型不同的情况。



4.10  有默认参数的函数

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

//如有一声明声明
float area(float r=6.5)

    形参与实参的结合是从左至右顺序进行的,第一个实参必然与第一个形参结合......

    因此指定默认值的参数必须放在形参表列中的最右端,否则出错。

    可以看到,在调用有默认参数的函数时,实参的个数可以与形参不同,实参未给定的,从形参的默认值得到值。


    注意:

  • 必须在函数调用之前将默认值的信息通知编译系统。

        如果在函数调用之前未得到默认值的信息,在编译到函数调用时,就会认为实参个数与形参个数不匹配而报错。

    1. 如果函数的定义在函数调用之前,则应该在函数定义中给出默认值。

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

  • 一个函数不能既作为重载函数,又作为有默认参数的函数。

        因为当调用函数时如果少写一个参数,系统无法判定是利用重载函数还是利用默认参数的函数,出现二义性,系统无法执行。


注:以上第4.7~4.10节的内容(内置函数、函数的重载、函数模板和有默认参数的函数)在C里是没有的,是C++增加的。在编写较大的程序时,会用到他们,以提高编程的质量。

转载于:https://my.oschina.net/huangmc/blog/610044

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值