模板

模板

 

       開發程序的時候,經常遇到某些功能在代碼的實現上都一樣,不同的是隻處理的對象類型不一樣,這個時候,最好對代碼進行重構,將其中的共性提取出來,以實現代碼的重用。C++模板技術是實現重用的一種方式。

       模板包括有函數模板類模板這兩種。

 

(面試題)什麼是函數模板:

       函數模板定義了參數化的非成員函數,這使得程序能夠使用不同的參數類型調用相同的函數。而至於使用何種類型,則是由編譯器確定並從模板中生成相應類型的代碼。編譯器確定了模板函數的實際類型參數,稱之爲模板的實例化


#include <iostream>
#include <string>
using namespacestd;
 
template<classT> //定義模板標識
T add(Ta,T b)   //函數原型
{
       T result = a + b;
       returna+ b; //將兩個參數使用"+"運算符進行運算,這兩個參數並不知道是何種類型。
}
 
int main(intargc,char*argv[])
{
       cout<< "2+3" << add(2, 3) <<endl;
       //輸出string類型的"+"運算結果
       cout<< "sdf+123="<< add(string("sdf"),string("123"))<< endl;
       return0;
}

(面試題)什麼是類模板:

       類模板是使用模板技術的類,描述了能夠管理其他數據類型的通用的數據類型。類模板技術通常用於建立包含其他類型的容器類,例如隊列、鏈表和堆棧等。

對於容器類來說,無論哪種數據類型,其操作方式是相同,但是針對具體的數據類型卻又是專用的。標準模板庫STL就大量使用了這種技術。

       在使用類模板時與函數模板有點不一樣,調用時需要明確的指出使用何種數據類型,而不能由編譯器自行指定。


#include <iostream>
using namespace std;
 
template <class T ,class T2, int num> //類模板聲明,其中一個參數是int類型
class CSampleTemplate
{
private:
       T t1;
       T2 t2;
public:
       CSampleTemplate(T arg1, T2 arg2)//構造函數中使用模板參數
       {
              t1 = arg1 + num;          //將構造函數的參數值分別於num值相加
              t2 = arg2 + num;
       }
       void write()
       {
              cout << "t1: " << t1 << " t2:"<< t2 << endl;
       }
       ~CSampleTemplate(){};
};
 
int main(int argc, char* argv[])
{
       CSampleTemplate<int, char, 3>temp(1, '2');
       temp.write();
       return 0;
}


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