c++強大的泛型程式設計,那什麼是泛型程式設計,即不考慮具體資料型別的程式設計方式,它有兩個關鍵字,template與typename(class)。本文介紹類模板,首先在模板程式設計中,宣告是不會編譯的,cpp檔案才進行編譯,模板類是兩次編譯的,編譯模板的時候不能分檔案編譯,寫模板的時候一般標頭檔案和cpp檔案放在同乙個檔案中(hpp),引用的時候直接引用hpp,可以保證兩次編譯,產生具體的類。
c++中每乙個物件所佔的空間大小,物件的記憶體分布都是在編譯時期就確定下來的。而對於模板類來說,物件佔空間的大小和記憶體分布是不知道的,依所套用的型別而定,比如a為模板類,則a類物件所佔的空間大小和記憶體分布顯然不同於a。(這裡插一句,雖然模板類中有乙個類字,但是對於例項化的模板類才算是真正的類,未例項化的模板類還不能算是類。)因此,對於未例項化的模板類,編譯器無法確定其大小,所以略過對模板類的編譯,在編譯時只檢查一些與模板無關的錯誤。而此時如果模板類的宣告和定義中有錯誤的話,編譯器就檢查不到。
模板類的顯示申明,**如下:
template
class
person
<
int>
;//顯示申明,防止二次編譯問題。
先看乙個簡單的類模板例子,**如下:
template
<
typename t>
class
person
person
(t a)
//運算子過載+
person
operator
+(person
&c)private
: t t1;};
//類成員,函式模板
template
<
typename t>
person
::person()
//測試**
person<
int>p1(
1),p2
(2),
p3(3)
;p1 = p2 + p3;
由於二次編譯問題的存在,最好將類的實現放在類的內部。 C 泛型程式設計 (二)模板類
模板類也是模板,必須以關鍵字template開頭,後接模板形參表。template class 類名 上面提到的模板引數和模板的模板引數在下一節vector迭代器時再分析。一 模板引數 1 模板型別形參 型別形參由關鍵字class或typename後接說明符構成。在函式模板形參表中,二者含義相同。t...
C 泛型程式設計 模板
在學習c c 過程中,我們可能常用幾種函式,由於傳入的引數不同,需要進行不同的函式的編寫,在c語言中需要根據引數和功能的不同重新編寫新的函式,而在c 中有函式過載這樣的機制,一定程度上解決了問題,但是 過載的函式僅僅只是型別不同,的復用率比較低,只要有新型別出現時,就需要增加對應的函式 的可維護性比...
C 泛型程式設計(模板)
2.類模板 我們先來看乙個概念 泛型程式設計 使用模板,編寫和型別無關的 沒有模板之前,一些函式或者類,針對不同的型別需要寫很多重複的 函式 比如交換函式swap,假如傳入的資料型別不同,int,char,double。我們要實現不同的型別物件函式。類 比如我們像實現乙個資料結構棧stack,sta...