




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第C++深入了解模板的使用目錄一.泛型編程二.函數(shù)模板1.函數(shù)模板概念2.函數(shù)模板格式3.函數(shù)模板的原理三.類(lèi)模板
一.泛型編程
泛型編程:不再是針對(duì)某種類(lèi)型,能適應(yīng)廣泛的類(lèi)型,跟具體的類(lèi)型無(wú)關(guān)的代碼
如何實(shí)現(xiàn)一個(gè)通用的交換函數(shù)呢?
voidSwap(intleft,intright)
inttemp=left;
left=right;
right=temp;
voidSwap(doubleleft,doubleright)
doubletemp=left;
left=right;
right=temp;
}
使用函數(shù)重載雖然可以實(shí)現(xiàn),但是有一下幾個(gè)不好的地方:1.重載的函數(shù)僅僅是類(lèi)型不同,代碼復(fù)用率比較低,只要有新類(lèi)型出現(xiàn)時(shí),就需要用戶自己增加對(duì)應(yīng)的函數(shù)2.代碼的可維護(hù)性比較低,一個(gè)出錯(cuò)可能所有的重載均出錯(cuò)
因此我們需要告訴編譯器一個(gè)模子,讓編譯器根據(jù)不同的類(lèi)型利用該模子來(lái)生成代碼
二.函數(shù)模板
模板分為:函數(shù)模板,類(lèi)模板
1.函數(shù)模板概念
函數(shù)模板代表了一個(gè)函數(shù)家族,該函數(shù)模板與類(lèi)型無(wú)關(guān),在使用時(shí)被參數(shù)化,根據(jù)實(shí)參類(lèi)型產(chǎn)生函數(shù)的特定類(lèi)型版本。
2.函數(shù)模板格式
templatetypenameT
返回值類(lèi)型函數(shù)名(參數(shù)列表){}
說(shuō)明:
1.templateclassT和templatetypenameT在此暫時(shí)認(rèn)為一樣,templatestructT是錯(cuò)誤的,沒(méi)有這種寫(xiě)法
2.T是type的縮寫(xiě),T不一定寫(xiě)T,可以寫(xiě)任意字母,比如X,t但是習(xí)慣寫(xiě)為T(mén)
舉例:
templatetypenameT//或templateclassT
voidSwap(Tleft,Tright)
Ttmp=left;
left=right;
right=tmp;
intmain()
inta=0,b=1;
doublec=2.2,d=3.3;
swap(a,b);
swap(c,d);
return0;
}
swap(a,b);和swap(c,d);調(diào)用的是同一個(gè)函數(shù)嗎?
答:不是同一個(gè)。底層匯編可以看出不是同一個(gè),如果調(diào)試時(shí)發(fā)現(xiàn)走的是同一個(gè)函數(shù),其實(shí)是編譯器的優(yōu)化導(dǎo)致。
實(shí)際上以后swap函數(shù)都不用自己寫(xiě)了,庫(kù)中有模板,直接用就行
3.函數(shù)模板的原理
在編譯器編譯階段,對(duì)于模板函數(shù)的使用,編譯器需要根據(jù)傳入的實(shí)參類(lèi)型來(lái)推演生成對(duì)應(yīng)類(lèi)型的函數(shù)以供調(diào)用。比如:當(dāng)用double類(lèi)型使用函數(shù)模板時(shí),編譯器通過(guò)對(duì)實(shí)參類(lèi)型的推演,將T確定為double類(lèi)型,然后產(chǎn)生一份專(zhuān)門(mén)處理double類(lèi)型的代碼,對(duì)于字符類(lèi)型也是如此。模板的實(shí)例化:
三.類(lèi)模板
類(lèi)模板的定義格式
templateclassT1,classT2,...,classTn
class類(lèi)模板名
{
//類(lèi)內(nèi)成員定義
};
舉例:調(diào)用Stackintst1;時(shí),用int替換模板中的T。調(diào)用Stackdoublest1;時(shí),用double替換模板中的T
//類(lèi)模板
templateclassT
classStack
public:
Stack(intcapacity=0)
_a=newT[capacity];
_capacity=capacity;
_top=0;
~Stack()
cout"~Stack()"endl;
delete[]_a;
_capacity=0;
_top=0;
voidPush(constTx)
private:
T*_a;
int_top;
int_capacity;
intmain()
Stackin
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 吉林省長(zhǎng)春市2025年七年級(jí)下學(xué)期語(yǔ)文期末試題及答案
- 社團(tuán)新聞稿寫(xiě)作培訓(xùn)指南
- 化工工程員工培訓(xùn)課件
- 合規(guī)部制度培訓(xùn)
- 《腰椎間盤(pán)突出課件》課件
- 車(chē)位租賃轉(zhuǎn)讓協(xié)議合同
- 退休返聘雇傭合同協(xié)議
- 春游家校協(xié)議書(shū)
- 進(jìn)貨化妝品合同協(xié)議
- 沒(méi)給調(diào)解協(xié)議書(shū)
- 《中醫(yī)養(yǎng)生課件:針灸》
- 訂單成本管理辦法
- 2023成都薪酬報(bào)告
- 一年級(jí)語(yǔ)文下冊(cè)培優(yōu)輔差記錄表(十二篇)
- 起重吊裝工程安全專(zhuān)項(xiàng)施工方案【實(shí)用文檔】doc
- 基于triz創(chuàng)新方法的便攜式雨傘
- 2023學(xué)年完整公開(kāi)課版天一閣
- 童年歌詞 一頁(yè)直接打印版
- 輔導(dǎo)員的工作流程與工作方法
- 直流系統(tǒng)及UPS裝置調(diào)試方案
- 山皮石填筑施工方案
評(píng)論
0/150
提交評(píng)論