類別範本(Class template)

C++除了函示範本(Function template)還有類別範本(Class template),假使我們自訂一個陣列類別,除了儲存int資料型態,還想要此類別儲存double、char等其它資料型態,這時可以宣告類別為類別範本,讓我們不必撰寫功能雷同的程式碼。

以下為類別範本(Class template)的宣告方式:

template <class 型態名稱> 
class 類別名稱{ 
    // ........ 
};

以下為類別範本的使用方式,MyArray是個自訂的類別。

template<class T> 
class MyArray { 
private:
    int m_length;
    T *m_data; 
public: 
    MyArray(int);  
    ~MyArray();
    T get(int); 
    void set(int, T);
};

template<class T> 
MyArray<T>::MyArray(int len) {
    m_length = len;
    m_data = new T[m_length];
}

template<class T> 
T MyArray<T>::get(int i) {
    return m_data[i]; 
}

template<class T> 
void MyArray<T>::set(int i, T value) {
    m_data[i] = value;
}

template<class T> 
MyArray<T>::~MyArray() {
    delete [] m_data;
}

int main() {
    MyArray<int>iArray(5);
    MyArray<double>dArray(5);

    iArray.set(2,3);
    dArray.set(2,0.7);
    int temp1 = iArray.get(2);     //temp1=3
    double temp2 = dArray.get(2);  //temp2=0.7

    return 0;
}