elva

函数模板和类模板

模板

       模板(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.javaeye.com/blog/377892

posted on 2010-10-18 16:54 叶子 阅读(524) 评论(0)  编辑 收藏 引用 所属分类: C\C++


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理