C++類模板深入理解2

C++類模板深入理解2
1、認識在Template中Typename和class關鍵詞。
在c++的Template中很多地方都用到了typename與class這兩個關鍵字,而且有時候二者可以替換,那麼是不是這兩個關鍵字完全一樣呢?事實上class用於定義類,在模板引入c++後,最初定義模板的方法爲:template<class T>,這裏class關鍵字表明T是一個類型,後來爲了避免class在這兩個地方的使用可能給人帶來混淆,所以引入了typename這個關鍵字,它的作用同class一樣表明後面的符號爲一個類型,這樣在定義模板的時候就可以使用下面的方式了:      template<typename T>.在模板定義語法中關鍵字class與typename的作用完全一樣。所以這原本是C++設計時沒有考慮的一個問題。
回到我們的正題,首先認識什麼是類模板?
(1) 什麼是類模板
一個類模板(也稱爲類屬類或類生成類)允許用戶爲類定義一種模式,使得類中的某些數據成員、默認成員函數的參數、某些成員函數的返回值,能夠取任意類型(包括系統預定義的和用戶自定義的)。
如果一個類中數據成員的數據類型不能確定,或者是某個成員函數的參數或返回值的類型不能確定,就必須將此類聲明爲模板,它的存在不是代表一個具體的、實際的類,而是代表着一類類。

template<typename T>

class A

{ public:

         A(T  t)

         {   this->t= t;

         }

         T &getT( )

         {   return t;

         }

protected:

public:

         T t;

};

void main()

{   //模板了中如果使用了構造函數,則遵守以前的類的構造函數的調用規則

         A<int>  a(100);

         a.getT();

         return;

}

2 繼承中的類模板
注意:子類從模板類繼承的時候,需要讓編譯器知道 父類的數據類型具體是什麼(數據類型的本質:固定大小內存塊的別名)A<int> 

class B :public A<int>

{  public:

         B(int i) : A<int>(i) //實例化基類抽象類型參數

         {

         }

         void printB()

         {   cout<<"A:"<<t<<endl;

         }

protected:

private:

};



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