類模板及派生

類模板及派生

(一)

模板主要有兩大類:即函數模板和類模板。這裏主要講一下對類模板的理解。

模板書面上講就是一種對類型進行參數化的工具,那麼類模板就是對“類”這種類型進行參數化的工具(也可以理解爲一種類的輪廓,不限制類裏面參數的類型)。再打一個通俗的比方:假設類就是月餅,而類模板就是生產月餅的機器,當然月餅有很多種類,比如長的,方的,(等價於數據類型或者類中成員函數返回值類型就是整型、浮點型之類),我現在不知道機器能生產什麼形狀的月餅,只知道它能生產月餅。

 

類模板的定義

 template <class T> class fun

{

};

template 是模板的關鍵字,後面括號裏面的class 是類名,T表示模板參數(形參),括號內表明T是一個類型,後面表示定義了一個名爲fun的類模型。

 

注意:類模板不是一個類,不能直接用於生成對象,所以fun  f  是錯誤的。

 

要想用fun這個類生成對象,首先要指明它的類型,例如:fun<double>,fun<int>等等。也就是類模板的實例化,成爲模板類(太繞了,可以忽略模板類定義,只要知道類模板以及怎麼定義對象就好了)。

所以定義類模板的對象如下:

fun < int>  a;

fun <float>  b;

 

(二)

類模板的派生類可以是模板,也可以說非模板。這時,派生類模板的參數表中應包含基類模板的參數。

template <typename T>

class Base

{

 

};

 

template <typename T>

class D2: public Base<T>     D2是派生類,也是一個模板,指出它的基類時,要綴上模板參數

{

};

 

在派生非類模板時,其基類一定是實例化之後的類,如下面的 base<int>

template  <class T>

class  base

{

……

};

class derive: public  base<int>      這邊的類型T 已經實例化成了int  所以derive可以看成是派生的類,而不是模板

{

……

};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章