函式模板:通過使用者提供的具體的引數,c++編譯器能夠將函式模板例項化,根據同乙個模板建立出不同的具體的函式。這些函式之間的不同在於函式內部的一些資料型別不同函式模板的定義格式:
template function_definition
如:
//template template t max(t a, t b)
將函式模板的函式定義部分換做類說明,並對類的成員函式定義即可。類模板的定義格式:
template
class 類模板名
類模板的定義體
如定義乙個表示平面座標的類,這個類中有兩個成員變數,乙個是橫座標a,乙個是縱座標b,a和b的值可能是int,double,float,long等型別。通過類模板,我們只需要寫乙個類。如下:
//類模板
template class point//預設的建構函式
point(t1 ta, t2 tb) :a(ta), b(tb){}//帶引數的建構函式
point&operator = (point&pt);//賦值函式
friend pointoperator+(point&pt1, point&pt2);//運算子+的過載
};
函式模板和模板函式:模板函式相當於函式模板的例項化。
類模板和模板類:模板類相當於類模板的例項化。
函式模板和類模板:
函式模板:函式模板在使用時不一定指明t的型別(如果引數型別不一樣,需要指定型別)。函式模板的例項化 是在編譯器在處理程式呼叫的時候自動完整的。如:
max(1.1f, 2.6f);
max('b', 'd');
類模板:類模板中必須被顯式地指定型別。如:
pointintpt2(4,6);
pointfpt1(1.2f, 3.3f);
以下是具體的c++**:
#include "stdafx.h"
#include using namespace std;
/*函式模板使用例項*/
//template template t max(t a, t b)
//類模板
template class point//預設的建構函式
point(t1 ta, t2 tb) :a(ta), b(tb){}//帶引數的建構函式
point&operator = (point&pt);//賦值函式
friend pointoperator+(point&pt1, point&pt2);//運算子+的過載
};template point& point::operator = (point&pt)
template pointoperator+(point&pt1, point&pt2)//運算子+的過載
template ostream& operator << (ostream& out, point&pt)
int main()
類模板可能會導致**的膨脹。 C 泛型程式設計 (二)模板類
模板類也是模板,必須以關鍵字template開頭,後接模板形參表。template class 類名 上面提到的模板引數和模板的模板引數在下一節vector迭代器時再分析。一 模板引數 1 模板型別形參 型別形參由關鍵字class或typename後接說明符構成。在函式模板形參表中,二者含義相同。t...
C 泛型程式設計 模板
在學習c c 過程中,我們可能常用幾種函式,由於傳入的引數不同,需要進行不同的函式的編寫,在c語言中需要根據引數和功能的不同重新編寫新的函式,而在c 中有函式過載這樣的機制,一定程度上解決了問題,但是 過載的函式僅僅只是型別不同,的復用率比較低,只要有新型別出現時,就需要增加對應的函式 的可維護性比...
C 泛型程式設計(模板)
2.類模板 我們先來看乙個概念 泛型程式設計 使用模板,編寫和型別無關的 沒有模板之前,一些函式或者類,針對不同的型別需要寫很多重複的 函式 比如交換函式swap,假如傳入的資料型別不同,int,char,double。我們要實現不同的型別物件函式。類 比如我們像實現乙個資料結構棧stack,sta...