函式模板與類模板(模板類)

2021-09-07 23:29:02 字數 1723 閱讀 9566

什麼是泛型程式設計?

泛型程式設計:編寫與型別無關的通用**,是**復用的一種手段。模板是泛型程式設計的基礎。

模板分為函式模板和類模板

下面我們就來說說函式模板:

函式模板與型別無關,在使用時被引數化,根據實參型別產生函式的型別版本

格式:

template

返回值型別 函式名(引數列表){}

templatet1 add( t &left,  t &right)

typename是函式模板的關鍵字,也可以用class代替(但是一定不能用struct代替)

當然你可以不止定義乙個引數,你可以定義多個引數:

//template//t1 add( t1 left,  t2 right)

////int main()

//// 通用加法函式

templatet add(t left, t right)

void test()

2. 對於非模板函式和同名函式模板,如果其他條件都相同,在調動時會優先呼叫非模板函式而不會從該模

板產生出乙個例項。如果模板可以產生乙個具有更好匹配的函式, 那麼將選擇模板

int add(int left, int right)

// 通用加法函式

templatet1 add(t1 left, t2 right)

void test()

3.模板函式不允許自動型別轉化,但是一般函式可以。

那麼還是讓我們來看**吧。

#includeusing namespace std;

//template//t1 add( t1 left, t2 right)

////int main()

// ~time()

; void diaplay();

private:

t _hour;

t _minute;

t _sec;

};templatevoid time::diaplay()

int main()

注意:類模板函式放在類外定義時,一定要加模板引數列表。

類模板的例項化:類模板例項化需要在類模板名字後跟<>,然後將例項化的型別放在<> 中即可,類模板名字不是真正的類,而例項化的結果才是真正的類。

vectors1;

s1.pushback(1);

s1.pushback(2);

s1.pushback(3);

vectors2;

s2.pushback(1.0);

s2.pushback(2.0);

s2.pushback(3.0);

for(size_t i = 0; i < s1.size(); ++i)

{ cout<模板類是類模板例項化後的結果:舉個簡單例子 類模板相當於乙個做餅乾的模板,你可以用這個模板做出餅乾,然而至於做出來是什麼味道,就要看你用什麼東西去例項化,你可以奶油,也可以用巧克力。這些東西不同雖然做出來都是餅乾但是味道不同。

模板 函式模板與類模板

模板 template 是乙個將資料型別引數化的工具。模板分為函式模板和類模板兩種。在定義模板的時候不說明某些函式引數或者資料成員的型別,而將它們的資料型別作為模板引數。在使用模板時根據實參的資料型別確定模板引數即資料型別,從而得到模板的乙個例項。函式模板 function template 函式模...

函式模板與類模板

c 提供的函式模板可以定義乙個對任何型別變數進行操作的函式,從而大大增強了函式設計的通用性。使用函式模板的方法是先說明函式模板,然後例項化成相應的模板函式進行呼叫執行。函式模板的一般說明形式如下 template 模板形參表 返回值型別 函式名 模板函式形參表 其中,模板形參表 可以包含基本資料型別...

函式模板與類模板

函式模板與類模板有什麼區別?答 函式模板的例項化是由編譯程式在處理函式呼叫時自動完成的,而類模板的例項化 必 須由程式設計師在程式中顯式地指定。即函式模板允許隱式呼叫和顯式呼叫而類模板只能顯示呼叫 這期間有涉及到函式模板與模板函式,類模板與模板類的概念 類似於類與類物件的區 別 請看下面例子 注意 ...