模板類 與 類模板

用相同的類模板可以組建任何類型的對象集合。在傳統C++中,可能有一個浮點數類或者一個整數類,如果使用類模板,可以定義一個對兩者都適用的類number

 

類模板說明的一般形式是:

 

template <類型形參表>           //  template <class T>

 

class <類名>                    //  class A

 

{ //類說明體

 

}

 

template <類型形參表>            //  template <class T>

 

<返回類型> <類名> <類型名錶>::<成員函數1>(形參表) //  T A<T>::sum()

 

{ //成員函數定義體 }

 

template <類型形參表>

<返回類型> <類名> <類型名錶>::<成員函數2>(形參表)

{ //成員函數定義體 }

 

 

12.3.2 使用類模板

 

與函數模板一樣,類模板不能直接使用,必須先實例化爲相應的模板類,定義該模板類的對象後才能使用。

 

建立類模板後,可用下列方式創建類模板的實例

 

<類名> <類型實參表> <對象表>    //   A<int> ai(3,4);

 

  A<int> ai(3,4);  前半截是模版類,後半截是模版類對象

 

其中,<類型實參表>應與該類模板中的<類型形參表>匹配。<類型實參表>是模板類(template class),<對象>是定義該模板類的一個對象。

 

使用類模板可以說明和定義任何類型的類。這種類被稱爲參數化的類。如果說類是對象的推廣,那麼類模板可以說是類的推廣

 

注意:類模板與模板類的區別

 

一個簡單的類模板程序(求兩個任意類型數的和):

template<class T>

class A

 

    public:

        A();

        A(T _a,T _b);

        T sum();

    private:

        T a;

        T b;

};

 

 

template <class T>

A<T>::A()

{

a=0;b=0;

}

 

template<class T>

A<T>::A(T _a,T _b)

{

a=_a;b=_b;

}

template<class T>

T A<T>::sum()

{

return (a+b);

}

void main()

{

A<int> ai(3,4);

A<double> ad(3.1,4.0);

cout<<ai.sum()<<" "<<ad.sum()<<endl;

}

 

程序已經在vc6.0下調試通過,以上代碼在一個文件中,別把類的聲明放在一個.h中把實現放在.cpp中,類模板不支持分離只能是類的聲明和定義放在同一個文件中

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