zoukankan      html  css  js  c++  java
  • C++ STL(三)模板

    模板:实现代码重用的一种方式,通过类型参数化,把类型定义为参数

    C++模板分为:函数模板与类模板

    函数模板:

    定义个通用的函数,函数返回值类型和形参类型用虚拟的类型来代表. 当调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现不同的函数功能.

    函数模板定义形式

    Template<typename T1,  typename T2>

    类型名 函数名(形式参数表)

    {

         ..........

    }

    1 //函数模板
    2 template<typename T>
    3 //取二个数中最大的数并且返回最大数
    4 T GetMax(T a, T b)
    5 {
    6     return a>b ? a:b;
    7 }

    函数模板调用

    显示调用: 模板函数名<类型名>(实参列表)

    自动类型推导调用: 模板函数名(实参列表)

    二者区别在于,前者调用时需要显示指明模板函数中虚拟类型的数据类型,后者由系统自动根据实参的类型进行转换

    1 float fMax = GetMax<float>(0.5f,1.25f); //显示类型调用 fMax = 1.25f
    2 int nMax = GetMax(3,6);                 //自动类型推导调用,nMax = 6

    类模板:

    和函数模板使用上差别不大,不同在于类模板是个类,当有多个类在功能上相同,仅仅是类中数据类型不同时就可以使用类模板,减少编写多个相同功能的类

    函数模板定义形式

    Template<class T1, class T2>

    class 类名

    {

         ..........

    }

     1 template<class TT>
     2 class CMax
     3 {
     4 public:
     5     CMax(){}
     6     CMax(TT a, TT b) : m_a(a), m_b(b){}
     7     TT GetMax()
     8     {
     9         return m_a>m_b ? m_a:m_b;
    10     }
    11     void SetValue(TT a, TT b);
    12 private:
    13     TT m_a;
    14     TT m_b;
    15 };
    16 //注意:类外定义成员函数还需要声明一次类模板
    17 template<class TT>
    18 void CMax<TT>::SetValue(TT a, TT b)
    19 {
    20     m_a = a;
    21     m_b = b;
    22 }

    类模板使用

    实例化类模板对象时,不能使用类型自动推导,必须显示指明虚拟类型的数据类型

     1     //实例化个CMax类模板对象,显示指明类中的虚拟类型为int
     2     //Cmax模板类中所有TT类型都会自动转换为int型
     3     CMax<int> maxA(3,6);   
     4     int nMaxA = maxA.GetMax();  //nMaxA = 6
     5 
     6     CMax<float> maxB(1.25f,1.2f);
     7     float fMaxB = maxB.GetMax(); //fMaxB = 1.25f
     8     CMax<char> maxC('a','g');
     9     char cMaxB = maxC.GetMax();  //cMaxB = 'g'
    10     CMax<int> maxD;
    11     maxD.SetValue(10,5);
    12     int nMaxdD = maxD.GetMax(); //nMaxD = 10
    13 
    14     return 0;
  • 相关阅读:
    Redis的分布式锁
    Redis的雪崩、击穿、穿透
    psr规范
    Mysql的联(复)合索引
    nginx的location配置(二)
    nginx的location规则(一)
    easyswoole中队列的使用
    第三章 文件I/O
    移动语义及拷贝优化
    PHP对接tdzntech.com云平台电子免费券程序
  • 原文地址:https://www.cnblogs.com/fzxiaoyi/p/12091733.html
Copyright © 2011-2022 走看看