模板就是建立通用的模具,大大提高復用性
c++另一種程式設計思想稱為泛型程式設計,主要利用的技術是模板
c++提高兩種模板機制:函式模板和類模板
模板不可直接使用,它只是乙個框架
模板的通用並不是萬能的
函式模板作用:建立乙個通用函式,其返回值型別和形參型別可以不具體制定,用乙個虛擬的型別來代表
template函式宣告或定義
template——宣告建立模板
typename——表明其後面的符號是一種資料結構,可以用class代替
t —— 通用的資料型別,名稱可以替換,通常為大寫字母
template//宣告乙個模板,告訴編譯器後面**緊跟著的t不要報錯,t是乙個通用資料型別
void myswap(t& a, t& b)
int main()
自動型別推導,必須推導出一致的資料型別t才可以使用
模板必須要確定出t的資料型別,才可以使用
普通函式呼叫時可以發生自動型別轉換(隱式型別轉換)
函式模板呼叫時,如果發生自動型別推導,不會發生隱式型別轉換
如果利用顯示指定型別的方式,可以發生隱式型別轉換
如果普通函式和函式模板都可以實現,優先呼叫普通函式
可以通過空模板引數列表來強制呼叫函式模板
void myswap(t& a, t& b)
void myswap(int& a, int& b)
int main()
函式模板也可以發生過載
如果函式模板可以更好的匹配,則優先呼叫函式模板
templatevoid myswap(t& a, t& b)
void myswap(char& a, char& b)
int main()
總結:既然提供了函式模板,最好不要提供普通函式,否則容易產生二義性
類模板作用:
建立乙個通用的類,類中成員資料型別可以不具體制定,用乙個虛擬的型別來代表
template類
template——宣告建立模板
typename——表明其後面的符號是一種資料結構,可以用class代替
t —— 通用的資料型別,名稱可以替換,通常為大寫字母
templateclass person
};int main()
類模板與函式模板區別主要有兩點:
類模板沒有自動型別推導的使用方式
類模板在模板引數列表中可以有參構造
template//可以在引數列表指定型別
class person
void showinfo() };
int main()
模板的通用性不是萬能的
類模板中成員函式在呼叫時才去建立
指定傳入的型別——直接顯示物件的資料型別
引數例項化——將物件中的引數變為模板進行傳遞
整個類模板化——將這個物件型別 模板化進行傳遞
void showinfo1(person&p) //1.指定傳入型別
template//2.引數模板化
void showinfo2(person&p)
templatevoid showinfo3(t& p) //3.將整個物件模板化
當類模板遇到繼承時,需要注意以下幾點:
templateclass base
;class son :public base//必須明確t的型別,才能賦值給子類
};//如果想靈活指定父類中t型別,子類也需要變類模板
templateclass son2 :public base
};int main()
類模板成員函式類外實現時,需要加上模板引數列表
templateclass person
;templateperson::person(t1 name, t2 age)//模板類的建構函式類外實現
templatevoid person::showperson() //模板類的成員函式類外實現
問題:類模板中成員函式建立時機是在呼叫階段,導致分檔案編寫時鏈結不到
解決直接包含.cpp原始檔
將宣告和實現寫到同乙個檔案中,並更改字尾名為.hpp
,hpp是約定的名稱,不是強制
全域性函式類內實現——直接在類內宣告友元並實現即可(使用較多)
全域性函式類外實現——需要提前讓編譯器知道全域性函式的存在
template//提前讓編譯器指導person類的存在
class person;
template//提前讓編譯器知道全域性函式的存在
void showperson(person& p)
templateclass person
;templateperson::person(t1 name, t2 age)//模板類的建構函式類外實現
int main()
第一章 C 程式設計
今天終於下定決心將資料結構與演算法重新在複習一遍,先是c 的一些比較容易忘記的特性簡單的溫習一遍 包括遞迴呼叫,異常操作,類模板,函式模板等等,這三天寫得原始碼如下 book name c structure and algorithm filename chapter1.cpp version 1...
C 程式設計第一章
c 被稱之為混合型語言 1 c 的函式和物件c 將資料從乙個物件流向另乙個物件的流動抽象為流。cin,標準輸入,cout,標準輸出1 從流中獲取資料的操作稱為提取操作。當程式需要執行鍵盤輸入時,使用提取操作符 從cin輸入流中提取字元 2 向流中新增資料的操作稱為插入操作。當程式需要在螢幕上顯示輸出...
C 程式語言(第一章)
一.全書結構 1,1 3章,c 程式設計風格,以及有關c 標準庫的綜述 2,4 9章,c 內部型別 3,10 15,c 物件導向和通用型程式設計 4,16 22,c 標準庫 5,23 25,設計和開發軟體 6,附錄 二.給c程式設計師得建議 1,c 裡幾乎不需要用巨集,用const或enum定義明顯...