• 函数模板和类模板


    模板

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

  • 相关阅读:
    esp32-智能语音-mp3(sdcard)
    esp32-智能语音-ADF_PATH
    esp32-智能语音-wifi
    esp32-智能语音-led驱动
    esp32-智能语音-设计硬件问题
    技小新学习
    TVS管和ESD管
    电源IC
    天线2.4G阻抗匹配设计
    AD16建立集成库
  • 原文地址:https://www.cnblogs.com/qiangupc/p/3150709.html
Copyright © 2020-2023  润新知