1. 程式人生 > >c++模板

c++模板

定義函數 成員函數 post pan style template clu add put

模板一般分函數模板與類模板

函數模板:

解決,不同數據進行同種操作時,可以給數據定義一個模板類型,以達到函數的通用性

基本語法

template <typename T> //定義模版類型名T

//模版函數定義

T test(T x){

return x;

}

計算絕對值函數:

#include <iostream>
using namespace std;
template <typename T>
T abs(T temp)
{
    temp = temp > 0 ? temp : -temp;
    return temp;
}

int main()
{
    
int i = 10; double d = -5.5; cout << abs(i) << " " << abs(d) << endl; return 0; }

通過函數模板,計算數值的絕對值,就不用重復為不同類型數據定義函數;

類模板

解決同一種類,定義不過數據,或,其成員函數對不同數據作相同處理;

類模板基本語法:

template <class T>

class abs

{

private:

  int i;

  T x;

public:

  abs(T a, T b){}

}

類模板對象的創建:

abs <int> a;

abs <double> b;

使用例:

#include <iostream>
using namespace std;
template <class T>
class Tes
{
  private:
    T i;
    T j;

  public:
    Tes(T x = 0, T y = 0)
    {
        i = x;
        j = y;
    }
    T put()
    {    
        return i * j;
    }
    ~Tes() {}
};
int main()
{
    Tes 
<int> a(2, 5); cout << a.put() <<endl; Tes <double> b(2.5, 5.5); cout << b.put() <<endl; return 0; }

成員函數外部定義方法:

基本形式:

template<模板形參列表> 函數返回類型 類名<模板形參名>::函數名(參數列表){函數體},

template<class T> void Tes<T>::add(參數列表){函數體},

#include <iostream>
using namespace std;
//定義模板類
template <class T>
class Tes
{
  private:
    T i;
    T j;

  public:
    Tes(T x = 0, T y = 0)
    {
        i = x;
        j = y;
    }
    T put()
    {    
        return i * j;
    }
    T add();
    ~Tes() {}
};

//外部定義函數方法
template <class T>
T Tes<T>::add()
{
    return i + j;
}
//主函數
int main()
{
    Tes <int> a(2, 5);
    cout << a.put() <<endl;
    cout << a.add() <<endl;
    Tes <double> b(2.5, 5.5);
    cout << b.put() <<endl;
    cout << b.add() <<endl;
    return 0;
}

總結:

在類模板中,只要使用到類名的,後面就要有<>的存在;

c++模板