C 中的模板

2021-08-21 13:39:50 字數 1422 閱讀 1784

c++中的模板大致分兩類:函式模板和類模板。

模板的框架都是在函式前或者類前寫上   template

模板的實質為:將資料型別當引數傳遞,實現資料型別與演算法相分離。

函式模板:函式模板----->模板函式

函式模板:其呼叫的方式有隱式呼叫,即由編譯器自己推導,和宣告型別如myswap(a,b)。

函式模板的機制:當宣告乙個模板時,會有兩次編譯,其一為對模板本身的簡單編譯;其二如果在main函式中呼叫該模板,會根據呼叫是給的引數型別以函式模板的演算法為模板生成該型別的函式,即具體型別編譯,幾種型別就在**段生成幾種函式(如果呼叫的函式所給引數型別已經出現,則直接呼叫產生過的模板函式)。

當出現普通函式對函式模板的過載情況時,如果隱式呼叫則會優先選擇普通函式。當函式模板可以提供更好的選擇的時候,優先呼叫函式模板。

類模板:類模板----->模板類

1、類模板定義物件的時候必須指定型別如testaa(10);testab('a');

類模板物件做形參傳遞:①函式可寫為某一具體型別 如void print(testa&a)的形式,此時只有testa,的a可以做起形參②template void print(testa&a),此時所有型別可以呼叫此函式,呼叫形式和函式模板相同。

2、類模板的派生與繼承

①派生乙個具體的子類:class testb : public testa

②派生乙個模板類:template class testc :public testa,派生乙個模板類時,基類中的保護成員在派生類中訪問需要加this->,這個原因是什麼還沒搞懂。

3、類的成員函式及友元函式的實現

①在類的內部:成員函式在類內部實現為 inline 性質,此時與一般的類的成員函式內部實現相同,友元也是。

②在類的外部:類模板的成員函式如果在類的外部進行實現,必須全部寫成函式模板 ;類的友元函式在外部實現時,其宣告

在函式名和括號之間 加 ,如friend ostream &operator<< (ostream & out, complex& obj);而且在實現前必須宣告類,宣告友元函式如

// 類宣告

template

class complex;

// 函式宣告

template

ostream &operator<< (ostream & out, complex& obj);

這是在類中宣告友元函式和友元函式實現前的宣告。

4、類模板最好在乙個檔案中宣告和實現,如果在兩個檔案中時.h檔案和.cpp檔案,此時在main.cpp中應包括類模板的.cpp,此時此.cpp檔案可為.hpp檔案,意思為可以包含的.cpp檔案。

5、注意當類模板中有static 變數時,不同的模板類的static 變數並不是同乙個位址。

C 中的模板

模板 template 利用一種完全通用的方法來設計函式或類而不必預先說明將被使用的每個物件的型別,利用模板功能可以構造相關的函式或類的系列,因此模板也可稱為引數化的型別。在c 語言中,模板可分為類模板 class template 和函式模板 function template 函式模板 通過前面...

C 中的模板

1 什麼是模板?模板是一種不關注輸入 輸出資料型別,只關注資料處理相關演算法實現的程式設計,也稱為泛程式設計。自定義模板是開放人員根據需要設計的模板,其模板的編碼工作由開發人員完成,而標準模板是使用系統自帶的標準模板庫 stl 其模板的實現 不需要自己完成,開放人員可以直接使用。2 模板定義有何規則...

C 中的模板

兩種宣告方式 template template include templatevoid swap t t1,t t2 int main 非型別的函式模板引數 這裡的value就是非型別的模板引數 template t add const t x 格式 template class 類名 非型別的...