zoukankan      html  css  js  c++  java
  • 函数模板和类模板

    模板

           模板(template)是一个将数据类型参化的工具,它提供了一种将代码与数据类相脱离的机制,即代码不受具体的数据类型的影响。模板分为函数模板和类模板两种。

          (1)函数模板

          函数模板是一种不说明某些参数的数据类型的函数。例如,下面定义了一个可对任何类型变量进行操作(求绝对值)的函数模板。

    Cpp代码  收藏代码
    1.  template <class T> //或写成:template <typename T>  
    2.  T abs(T val)  
    3. {  
    4.        return val<0 ? -val : val;  
    5.  }  

       

       在函数模板被调用时,编译器根据实际参数的类型确定模板参数T的类型,并自动生成一个对应的函数,即模板函数。模板参数的类型不同,生成的模板函数也不同。

         例 1 函数模板的定义和使用

    Cpp代码  收藏代码
    1. #include <iostream.h>  
    2.   
    3. template <class T>            //定义模板  
    4. T abs(T val)                //定义函数模板  
    5. {  
    6.     return val<0 ? -val : val;  
    7. }  
    8.   
    9. void main()  
    10. {  
    11.     int i=100;  
    12.     cout <<abs(i)<<endl;    //类型参数T替换为int  
    13.     long l=-12345L;  
    14.     cout <<abs(l)<<endl;    //类型参数T替换为long  
    15.     float f=-125.78F;  
    16.     cout <<abs(f)<<endl;    //类型参数T替换为float  
    17. }  

         定义函数模板时也可以使用多个类型参数,这时每个类型参数前面都要加上关键字class或typename,其间用逗分隔,其形式如下所示。

          template <class T1,class T2,class T3>

         例 2 使用多个类型参数的函数模板

    Cpp代码  收藏代码
    1. #include <iostream.h>  
    2.   
    3. template <class T1,class T2>  
    4. T1 Max(T1 x,T2 y)  
    5. {  
    6.     return x>y ? x: (T1)y;  
    7. }  
    8.   
    9. void main()  
    10. {  
    11.     int i=100;  
    12.     float f=-125.78F;  
    13.     cout <<Max(i,f)<<endl;          //类型参数T1替换为int,T2替换为float  
    14. }  

       (2)类模板

             使用多个类型参数的类模板

    Cpp代码  收藏代码
    1. #include <iostream.h>  
    2.   
    3. template <class T1,class T2>          //使用2个类型参数  
    4. class MyTemClass                        //定义类模板  
    5. {  
    6. private:  
    7.     T1 x;  
    8.     T2 y;  
    9. public:  
    10.     MyTemClass(T1 a,T2 b) { x=a;y=b; }  //构造函数  
    11.     void ShowMax()                      //输出最大的数据成员  
    12.     {  
    13.         cout <<"MaxMember="<<(x>y?x:y)<<endl;  
    14.     }  
    15. };  
    16.   
    17. void main()  
    18. {  
    19.     int a=100;  
    20.     float b=123.45F;  
    21.     MyTemClass<int,float> mt(a,b);    //声明类模板的对象  
    22.     mt.ShowMax();  
    23. }  

    原文:http://fpwjp.iteye.com/blog/377892

  • 相关阅读:
    eclipse export runnable jar(导出可执行jar包) runnable jar可以执行的
    mave常用指令
    771. Jewels and Stones珠宝数组和石头数组中的字母对应
    624. Maximum Distance in Arrays二重数组中的最大差值距离
    724. Find Pivot Index 找到中轴下标
    605. Can Place Flowers零一间隔种花
    581. Shortest Unsorted Continuous Subarray连续数组中的递增异常情况
    747. Largest Number At Least Twice of Others比所有数字都大两倍的最大数
    643. Maximum Average Subarray I 最大子数组的平均值
    414. Third Maximum Number数组中第三大的数字
  • 原文地址:https://www.cnblogs.com/qiangupc/p/3150709.html
Copyright © 2011-2022 走看看