C 學習8 模板初步理解

2021-09-18 04:54:33 字數 1379 閱讀 7182

類模板是在類的定義時,不能確定成員的型別時,為了防止**的冗餘,用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 ...