類模板的定義及其使用


本次引入類模板及其基本運算,為之后的一個關於棧的應用做鋪墊。

1.類模板的定義
可用類模板來定義類,類模板是對象特性更為一般的抽象。簡而言之,一個類模板就是一個抽象的類、類模板的一般定義形式為:

template<參數名列表>
class 類名{
    //類的說明
};

其中,template是關鍵字,<參數名列表>中可以有多個參數,多個模板參數之間用逗號分隔。模板參數的形式可以是:

class<標識符> 或 類型表達式<標識符>

如,可定義坐標點的類模板如下:

template <class T>          //帶參數T的類模板說明
class Point{
public:
    Point(T = 0,T = 0);     //類的構造函數
    Point(Point&);          //類的復制構造函數
    T Distance(Point&);     //返回類型為T的成員函數
private:
    T x,y;
};

2**.類模板的使用**:
使用上述模板定義對象iobj,並以int替換參數T:

Point<int> iobj(3,4);  //該對象產生一個int型的點(3,4)

使用該模板再產生一個實例:

Point<double>dobj(7.8,8.8);     //該對象產生一個double型的坐標點(7.8,8.8)

由此可見,使用類模板可以聲明不同類型的對象。對於一個可能用到多種數據類型的類來說,使用類模板可以大大提高編程的效率。簡單地說,如果你需要int型的數據,就用int來替換參數模板中的T,需要double型的數據就用double來替換參數模板中的T。

以下代碼給出了一個用類模板來描述坐標點的例子:

#include<iostream>
#include<cmath>

//The declaration of class template
template<class T>
class Point{ public: Point(T = 0,T = 0); Point(Point&); T Distance(Point&); private: T x,y; }; //The implementation of class template Point template<class T> Point<T>::Point(T a,T b):x(a),y(b){} template<class T> Point<T>::Point(Point& a) { x = a.x; y = a.y; } template<class T> T Point<T>::Distance(Point& a) { return sqrt((x - a.x)*(x - a.x) + (y - a.y)*(y - a.y)); } //main function int main() { using namespace std; //Learn the meaning of "namespace" from 《C++ primer》 Point<int>a1(3,4),a2(5,6); cout<<"The distance of these two points(int): "<<a1.Distance(a2)<<endl; Point<double>b1(7.8,9.8),b2(34.8,25.4); cout<<"The distance of these two points(double): "<<b1.Distance(b2)<<endl; return 0; }

下圖為運行結果:
這里寫圖片描述

顯然,使用類模板能使得我們在處理需要多種數據類型的類時游刃有余,從上述程序中我們也很容易發現類模板與普通的類之間的差別。其實,只要去掉類模板的聲明,並將T換成我們所需要的數據類型,再做些微小的改動就成為了一個普通的類。認識到這一點,對類模板的理解就會更加深刻。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM