• 中文
    • English
  • 注册
  • 赞助本站

    • 支付宝
    • 微信
    • QQ

    感谢一直支持本站的所有人!

    • 查看作者
    • C++:模板的概念以及函数模板与模板函数

      一.  模板的概念

      模板是实现代码重用机制的一种工具,它把类型定义为参数,实现类型参数化,从而实现了代码的重用

      模板分为函数模板和类模板,分别允许用户构造模板函数和模板类

      二.  函数模板与模板函数

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

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

      3.  函数模板经实例化而生成的具体函数称为模板函数。

      4.  函数模板代表了一类函数,

      5.  模板函数表示某一具体的函数。

      6. 函数模板声明如下:

      template < typename 类型参数>
      返回类型  函数名(模板形参表)
      {
          函数体
      }
      /*template是声明模板的关键字,类型参数是一个虚拟的类型名,常用T,Tybe表示,使用函数模板时无论是typename还是class后面的类型参数,都必须实例化,用实际的数据类型(既可以使系统预定义的标准数据类型,也可以是用户自定义的类型)替代它*/

      也可以定义成:

      template <class  类型参数>
      返回类型  函数名(模板形参表)
      {
          函数体
      }

      7.  将函数模板中的类型参数实例化的参数称为模板实参。

      8.  在函数模板中允许使用多个类型参数。但是应当注意template定义部分的每个类型参数前必须有关键字typename (或class )。

      9.  建立了有两个类型参数的函数模板。

      #include<iostream>
      using namespace std;
      template < typename type1, typename type2>
      void myfunc( type1 x, type2  y)
      {
          cout<<x<<’ ’<<y<<endl;
      }
      int main()
      {
          myfunc(10, "hao");
          myfunc(0.123, 10L);
          return 0;
      }

      10.  在template语句与函数模板定义语句之间不允许有别的语句,例如下面的程序段就不能编译。

      template <typename T>
      int i;             //错误
      T max( T x,T y )
      {
          return ( x>y)?x∶y;
      }

      11.  模板函数类似于普通重载函数,但更严格一些。

      12.  普通的非模板函数被重载的时候,在每个函数体内可以执行不同的动作。

      13.  但同一函数模板实例化后的所有模板函数都必须执行相同的动作。

      14.  函数模版也可以重载

      15.  函数模板与同名的非模板函数可以重载。在这种情况下,调用的顺序是:

      首先寻找一个参数完全匹配的非模板函数,如果找到了就调用它;

      若没有找到,则寻找函数模板,将其实例化,产生一个匹配的模板函数,若找到了,就调用它。

       

    • 0
    • 0
    • 0
    • 3.7k
    • 请登录之后再进行评论

      登录
    • 做任务
    • 实时动态
    • 偏好设置
    • 返回顶部
    • 单栏布局 侧栏位置: