C 提高程式設計 第一章 模板

2022-09-11 16:51:20 字數 2759 閱讀 9697

模板就是建立通用的模具,大大提高復用性

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定義明顯...