




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第九章模板主要內(nèi)容函數(shù)模板類模板29.1函數(shù)模板模板的作用:數(shù)組累加的例子
函數(shù)addTo將數(shù)組a的各個元素值分別累加到數(shù)組b的對應(yīng)單元中,但數(shù)組的類型限定為intvoidaddTo(inta[],intb[],intsize){
for(inti=0;i<size;i++)b[i]+=a[i];
}為了解決其他類型數(shù)組的累加問題,就不得不重載代碼幾乎相同的許多addTo版本,每個版本僅適用于一種類型voidaddTo(longa[],longb[],intsize){
for(inti=0;i<size;i++)b[i]+=a[i];
}
voidaddTo(floata[],floatb[],intsize){
for(inti=0;i<size;i++)b[i]+=a[i];
}
voidaddTo(doublea[],doubleb[],intsize){
for(inti=0;i<size;i++)b[i]+=a[i];
}39.1函數(shù)模板模板的作用:數(shù)組累加的例子
上述做法維護(hù)所有代碼的一致性很困難。如果發(fā)現(xiàn)錯誤需要修改,必須一一修改所有的重載函數(shù),并且必須修改一致解決這一問題的方法就是使用函數(shù)模板。函數(shù)模板是一系列相關(guān)函數(shù)的模型或樣板,這些函數(shù)的源代碼形式相同,只是所針對的數(shù)據(jù)類型不同。對于函數(shù)模板,數(shù)據(jù)類型本身成了它的參數(shù),因而是一種參數(shù)化類型的函數(shù)49.1函數(shù)模板函數(shù)模板的聲明template<<模板形參表>><函數(shù)聲明><模板形參表>由一個或多個<模板形參>組成,多個<模板形參>之間以用逗號分隔每個<模板形參>具有下面幾種形式typename<參數(shù)名>class<參數(shù)名><類型修飾><參數(shù)名>其中<參數(shù)名>可以是任意的標(biāo)識符。前兩種是等價的,用<類型修飾>聲明的參數(shù)則稱為常規(guī)參數(shù),在形式上與普通的函數(shù)參數(shù)聲明相同59.1函數(shù)模板函數(shù)模板的聲明addTo模板可以定義為:template<classT>
voidaddTo(Ta[],Tb[],intsize){
for(inti=0;i<size;i++)b[i]+=a[i];
}用<和>括起來的部分就是模板形參表,T是一個虛擬類型參數(shù)69.1函數(shù)模板函數(shù)模板的實(shí)例化定義好函數(shù)模板后,編譯系統(tǒng)會依據(jù)每一次對函數(shù)模板調(diào)用時實(shí)際所使用的數(shù)據(jù)類型生成適當(dāng)?shù)恼{(diào)用代碼,并生成相應(yīng)的函數(shù)版本,即模板函數(shù)編譯系統(tǒng)生成函數(shù)模板的某個具體函數(shù)版本的過程稱為函數(shù)模板的實(shí)例化每一個實(shí)例就是一個函數(shù)定義在實(shí)例化過程中用實(shí)參的實(shí)際類型(如int、long等)取代虛擬類型(如T)79.1函數(shù)模板函數(shù)模板的實(shí)例化例如,編譯系統(tǒng)在處理longdoublex[]={1,2,3,4,5},y[]={6,7,8,9,10};addTo(x,y,5);時,會生成如下函數(shù)實(shí)例:voidaddTo(longdoublea[],longdoubleb[],intsize){
for(inti=0;i<size;i++)b[i]+=a[i];
}在處理unsignedx[]={1,2,3,4,5,6,7,8,9},
y[]={22,33,,44,55,66,77,88,99,11};
addTo(x,y,9);時,會生成如下函數(shù)實(shí)例:voidaddTo(unsigneda[],unsignedb[],intsize){
for(inti=0;i<size;i++)b[i]+=a[i];
}89.1函數(shù)模板虛擬類型參數(shù)所對應(yīng)的實(shí)際類型的獲得可以從模板實(shí)參表(用<和>括起來的參數(shù)表)或從模板函數(shù)實(shí)參表(用(和)括起來的參數(shù)表)獲得模板實(shí)參的信息優(yōu)先于函數(shù)實(shí)參的信息如果從函數(shù)實(shí)參獲得的信息已經(jīng)能夠判定其中部分或全部虛擬類型參數(shù)所對應(yīng)的實(shí)際參數(shù),而且它們又正好是參數(shù)表中最后的若干參數(shù),則模板實(shí)參表中的那幾個參數(shù)可以省略。如果模板實(shí)參表中的實(shí)參都被省略了,則連空表<>也可以不要若x和y都是unsigned型,則addTo<unsigned>(x,y,9)、addTo<>(x,y,9)和addTo(x,y,9)三者是等價的99.2類模板類模板一系列相關(guān)類的模型或樣板這些類的成員組成相同,成員函數(shù)的源代碼形式相同所不同的只是針對的類型(成員的類型以及成員函數(shù)的參數(shù)和返回值的類型)不同數(shù)據(jù)類型本身成了它的參數(shù),因而是一種參數(shù)化類型的類,是類的生成器類模板中聲明的類稱為模板類109.2類模板類模板的使用聲明一個類模板的格式是:template<<模板形參表>><類聲明><模板形參表>由一個或多個模板形參組成;與一般類聲明的不同之處在于,這里的<類聲明>要用<模板形參表>中聲明的虛擬類型參數(shù)來修飾它的某些成員,使模板類獨(dú)立于任何具體的數(shù)據(jù)類型。在模板外定義的成員函數(shù)是一個函數(shù)模板,其定義格式是:template<模板形參表>
<返回類型><類名><<模板形參表>>::<函數(shù)名>(<函數(shù)形參表>)<函數(shù)體>注意:類模板的成員函數(shù)都是模板函數(shù),因此在模板外定義成員函數(shù)的格式與定義普通模板函數(shù)十分相似。119.2類模板類模板的使用用類模板定義對象的格式是:<類名><<模板實(shí)參表>><對象名>;或<類名><<模板實(shí)參表>><對象名>(<構(gòu)造函數(shù)實(shí)參表>);129.2類模板例?9.1分析下列程序的輸出結(jié)果。template<typenameTYPE>//類模板聲明以此開頭classArray{int_size;TYPE*data//區(qū)分不同類模板實(shí)例的有關(guān)類型應(yīng)使用虛擬類型public:Array(intn);~Array(){delete[]data;}TYPE&operator[](inti);intsize()const{return_size;}};139.2類模板例?9.1(續(xù))template<typenameTYPE>//類模板的成員函數(shù)的聲明以此開頭Array<TYPE>::Array(intn){//在類模板聲明之外,Array與<TYPE>if(n<1){//必須捆綁在一起出現(xiàn)。cout<<"Errordimensiondescription";exit(1);}_size=n;data=newTYPE[_size];}template<typenameTYPE>TYPE&Array<TYPE>::operator[](inti){if(i<1||i>_size){cout<<endl<<"Subscriptoutofrange";delete[]data;exit(2);}returndata[i-1];}149.2類模板例?9.1(續(xù))intmain(){Array<int>a(5);inti;for(i=1;i<=a.size();i++)a[i]=i;for(i=1;i<=a.size();i++)cout<<setw(5)<<a[i];cout<<endl<<endl;Array<double>b(5);for(i=1;i<=b.size();i++)b[i]=i+i/10.0;cout.precision(2);for(i=1;i<=b.size();i++)cout<<setw(5)<<b[i]<<'';cout<<endl<<endl;return0;}159.2類模板例?9.1(續(xù))輸出結(jié)果123451.12.23.34.45.516本章小結(jié)聲明一個函數(shù)模板的格式是:
template<<模板形參表>><函數(shù)聲明>聲明一個類模板的格式是:
template<<模板形參表>><類聲明>在調(diào)用模板函
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國內(nèi)窺鏡消毒機(jī)行業(yè)發(fā)展?jié)摿︻A(yù)測及投資戰(zhàn)略研究報告
- 2025年中國家用無線路由器行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃報告
- Unit 5 第2課時 Section A (3a-3d)2024-2025學(xué)年新教材七年級英語上冊同步教學(xué)設(shè)計(人教版2024)河北專版
- 2025年中國X射線機(jī)市場調(diào)查研究及行業(yè)投資潛力預(yù)測報告
- 2025年鋼結(jié)構(gòu)裝配式建筑構(gòu)件加工合作合同
- 2025年度電子商務(wù)物流配送合同風(fēng)險評估與優(yōu)化方案
- 2025年中國光纖陀螺儀行業(yè)市場前景預(yù)測及投資戰(zhàn)略研究報告
- 9《古詩三首》第二課時 教學(xué)設(shè)計-2024-2025學(xué)年語文四年級上冊統(tǒng)編版
- 2025年度環(huán)保型二次結(jié)構(gòu)模板施工及廢棄物處理合同
- 2025年度戶外探險搭棚安全保障合同
- 通力電梯KCE電氣系統(tǒng)學(xué)習(xí)指南
- 教學(xué)課件-《旅行社業(yè)務(wù)》-(中職)
- 第二章 第一節(jié) CT設(shè)備基本運(yùn)行條件
- 某道路拓寬工程施工組織設(shè)計
- 第一章染整工廠設(shè)計
- 上虞市化工、印染企業(yè)名單-企業(yè)負(fù)責(zé)人信息及聯(lián)系方式
- DL-T 736-2021 農(nóng)村電網(wǎng)剩余電流動作保護(hù)器安裝運(yùn)行規(guī)程
- YS/T 431-2009鋁及鋁合金彩色涂層板、帶材
- SB/T 10439-2007醬腌菜
- 與食品經(jīng)營相適應(yīng)的主要設(shè)備設(shè)施布局和操作流程文件
- 八年級數(shù)學(xué)下冊-全一冊-教學(xué)課件-(新版)浙教版
評論
0/150
提交評論