函数模板和类模板

模板

       模板(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

原文地址:https://www.cnblogs.com/qiangupc/p/3150709.html