因為演算法作業我想使用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;
沒有留言:
張貼留言