Pages

2011年2月14日 星期一

[C++] template

因為演算法作業我想使用class template,因此複習一下,並寫下心得:

1. Function template,同樣的function,不同型態的參數。


先在程式開頭(using namespace std;那一行下面)打上template <class T>

然後在描述函式內容的時候:

template <class T>

void fun(T a)

{

...

}


如此在main中要使用這個function,可以用很多型態的a當函式的參數,而且完全不用特別說明現在使用什麼資料型態當成fun的參數,直接拿起來就用。程式會自己判斷。


2. 如果定義一個class,class裏面member的資料型態可以自由換,例如一下子用int一下子用別的型態,可用class template,我記錄以下幾點筆記:


(1)在class的定義之前寫下:template <class T>

(2)class裏面就可以開始用T當成資料型態。

(3)要開始描述class的member function行為前,要寫兩行,一行是template <class T>,另一行是 T class名稱<T>::member函式名稱。(函式回傳值不一定要是T)


例如:

// This is an example code written by Uncle on 2011/02/14.

// This code shows how to use class template.

template <class T>

class Uclass

{

public:

void UncleSayHi();

T num;

};


template <class T>

void Uclass<T>::UncleSayHi()

{

cout << "hi!" << endl;

}

...


4. <>括號裡可以寫很多種class,例如可以寫template <class T,class X>。也可以加上已知型態的參數,例如寫template <class T, double d>,如此在class的定義裏面只要看到d就是代表一個double型態的值。


5. 使用class時,宣告方式:class名稱 <需要的資料型態> 變數名;

例如:Uclass <int> variable1;

沒有留言:

張貼留言