類模板是在類的定義時,不能確定成員的型別時,為了防止**的冗餘,用t代替。
t是乙個型別,告訴編譯器,型別還沒有繫結,不知道現在是什麼型別。使用的時候,類名後要用尖括號把型別名括起來。
complex<
int>a(
1,2)
;complex<
double
>a(
1.0,
2.0)
;
當編譯時,編譯器看到了使用者的t是一種型別時(如int),則將類中全部的t替換為此型別(t全變為int),得到乙份**。
當t時不同的n種型別時,會得到n種不同的**。因此模板會造成**的膨脹,但這是必要的。
template
<
typename t>
class
complex
complex&
operator+=
(const complex&);
t real()
const
t imag()
const
private
: t re, im;
friend
complex__doapl
(complex*
,const complex&);
};
函式模板用於乙個操作不知道是對哪種型別的物件來操作的情況。如比大小這個操作min,可以對數字,也可以對人,還可以對石頭進行。這時使用函式模板可以減少**冗餘。**如下:
template
<
class
t>
inline
const t&
min(
const t& a,
const t& b)
以對石頭比大小為例:
stone r1(2
,3),
r2(3,
3), r3;
r3 =
min(r1,r2)
;
這裡,編譯器會對函式模板進行實參推導,發現應該對函式繫結為stone型別,將生成乙份t全部替換為stone的**。
於是,根據"<"的使用,呼叫 stone::operator< 這一函式。在stone類中尋找如下:
class
stone
bool
operator
<
(const stone& rhs)
const
private
int _w, _h, _weight;
};
C 模板初步
泛型 指在多種資料型別上皆可操作的含義。泛型程式設計的代表作品stl是一種高效 泛型 可互動操作的軟體元件 泛型程式設計最初誕生於c 中,目的是為了實現c 的stl 標準模板庫 模板的精神 型別引數化 話不多說,看例子吧。template既可以與函式同行,也可以將函式另起一行來書寫 t 即為泛化的型...
初步C 類模板學習筆記
實現 在上課時間的定義給它的乙個或多個引數,這些引數代表了不同的資料型別。抽象的類。在呼叫類模板時,指定引數,由編譯系統依據引數提供的資料型別自己主動產生對應的模板類 詳細的類。c 的類模板的寫法例如以下 template 型別參數列 型別參數列的寫法就是 class 型別引數1,class 型別引...
C 學習筆記(8) 模板
模板主要是提供一種處理方式,相當於加強版的函式處理,裡面的引數型別,處理方式都能夠被模板化,傳統的函式處理是不能夠針對多種處理方式的,所以會出現函式的過載問題。模板主要包括兩個方面 針對函式的模板,格式 template 函式返回值 函式名稱 函式引數 例如template void swap t ...