




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、2020/8/3,1,第18章 模板,2020/8/3,2,講授內(nèi)容,類屬機(jī)制 函數(shù)模板的定義與使用 類模板的定義與使用,2020/8/3,3,18.1 類屬機(jī)制(1/2),從邏輯功能來看,有些程序非常相似,不同之處只是處理對象(數(shù)據(jù))的類型 例6_4 中的程序 void sortArray( int b, int len); void sortArray( double b, int len); 可以考慮提供具有相同邏輯功能的程序,而將數(shù)據(jù)類型作為參數(shù)類屬編程 C+中的模板:類模板和函數(shù)模板,2020/8/3,4,18.1 類屬機(jī)制(2/2),更好的代碼重用性 重用源代碼 用戶使用模板時(shí),編
2、譯器替換模板參數(shù)(類型) 模板可以包含類型參數(shù)也可以包含非類型參數(shù),2020/8/3,5,18.2 函數(shù)模板(1/5),對不同類型的數(shù)據(jù)執(zhí)行相似的操作 函數(shù)重載 函數(shù)模板 函數(shù)重載代碼冗余 增加編程負(fù)擔(dān) 程序的維護(hù)問題(如功能修改),2020/8/3,6,18.2 函數(shù)模板(2/5),函數(shù)模板為所有的函數(shù)提供唯一的一段函數(shù)代碼 置換代碼中的類型參數(shù)得到模板函數(shù)實(shí)例化 函數(shù)模板不是函數(shù),不能被執(zhí)行 實(shí)例化后的模板函數(shù)是真正的函數(shù),可以被執(zhí)行,2020/8/3,7,18.2 函數(shù)模板(3/5),函數(shù)模板的定義都是以關(guān)鍵字template開頭 template之后中是函數(shù)模板的參數(shù)列表 函數(shù)模板的參
3、數(shù)是類型參數(shù),其類型為class或typename template template 模板的參數(shù)定義之后是函數(shù)模板的定義,是一個(gè)將類型參數(shù)作為某種類型使用的函數(shù),2020/8/3,8,18.2 函數(shù)模板(4/5),函數(shù)模板的參數(shù)名在模板中作為一種類型使用 模板的每個(gè)形式參數(shù)要在函數(shù)的參數(shù)列表中至少出現(xiàn)一次 形式參數(shù)名的作用域局限于函數(shù)模板的范圍內(nèi),2020/8/3,9,例子1:函數(shù)模板例子,template void sortArray(ElementType b, int len) for (int pass = 0; pass b i ) ElementType hold; hold =
4、 b pass ; b pass = b i ; b i = hold; ,2020/8/3,10,18.2 函數(shù)模板(5/5),函數(shù)模板規(guī)定了對數(shù)據(jù)的處理流程 某些數(shù)據(jù)類型(模板的參數(shù))要等到模板實(shí)例化時(shí)再確定具體的類型 函數(shù)模板的實(shí)例化由編譯器來完成 根據(jù)函數(shù)調(diào)用的實(shí)參類型確定模板形參的具體類型 用相應(yīng)的類型替換函數(shù)模板中的模板參數(shù)完成函數(shù)模板的實(shí)例化 為什么模板的每個(gè)形參要在函數(shù)的參數(shù)列表中至少出現(xiàn)一次?,2020/8/3,11,例子2:使用函數(shù)模板實(shí)現(xiàn)數(shù)組的排序和輸出(1/4),/ex18_1:使用函數(shù)模板實(shí)現(xiàn)數(shù)組的排序和輸出 #include #define SIZE 8 templ
5、ate void sortArray(ElementType b, int len) for (int pass=0; pass bi) ElementType hold; hold = b pass ; b pass = b i ; b i = hold; ,2020/8/3,12,例子2:使用函數(shù)模板實(shí)現(xiàn)數(shù)組的排序和輸出(2/4),template void displayArray(ElementType b, int len) for(int index=0; index = len-1; index+) if ( index != len -1 ) cout b index t; e
6、lse cout b index endl; ,2020/8/3,13,例子2:使用函數(shù)模板實(shí)現(xiàn)數(shù)組的排序和輸出(3/4),int main() int aiSIZE = 18,35,36,61,9,112,77,12; double afSIZE = 12.1, -23.8, 3.7, -16.0, 9.1, 12.12, 7.7, 56.3; cout Before sorting:n; cout ai: t; displayArray(ai, SIZE); sortArray(ai, SIZE); cout After sorting:n; cout ai: t; displayArra
7、y(ai, SIZE);,2020/8/3,14,例子2:使用函數(shù)模板實(shí)現(xiàn)數(shù)組的排序和輸出(4/4),cout Before sorting:n; cout af: t; displayArray(af, SIZE); sortArray(af, SIZE); cout After sorting:n; cout af: t; displayArray(af, SIZE); return 0; ,2020/8/3,15,程序運(yùn)行結(jié)果,Before sorting: ai: 18 35 36 61 9 112 77 12 After sorting: ai: 9 12 18 35 36 61 7
8、7 112 Before sorting: af: 12.1 -23.8 3.7 -16 9.1 12.12 7.7 56.3 After sorting: af: -23.8 -16 3.7 7.7 9.1 12.1 12.12 56.3,2020/8/3,16,18.3 類模板,類模板:將類定義中的數(shù)據(jù)類型參數(shù)化 類模板的實(shí)例化:用具體的數(shù)據(jù)類型替換模板的參數(shù)以得到具體的類(模板類) 模板類也可以實(shí)例化為對象,2020/8/3,17,例子2:用類模板實(shí)現(xiàn)棧(1/6),/ tstack.h: 類模板的定義 template class Stack public: Stack( int = 8
9、 ); / 省缺棧元素的樹數(shù)目為8 Stack() delete data; ; int pop(ElementType ,2020/8/3,18,例子2:用類模板實(shí)現(xiàn)棧(2/6),/ tstack.h: 類模板的定義(續(xù)) template Stack:Stack(int s) size = s 0 ? s : 8; data = new ElementTypes; memNum = 0; template int Stack:pop(ElementType ,2020/8/3,19,例子2:用類模板實(shí)現(xiàn)棧(3/6),/ tstack.h: 類模板的定義(續(xù)) template int St
10、ack:push(ElementType mem) if (memNum = size) return 0; data memNum + = mem; return 1; ,2020/8/3,20,例子2:用類模板實(shí)現(xiàn)棧(4/6),/ex18_2.cpp:使用棧 #include #include tstack.h int main() Stack doubleStack(6); double f = 3.14; coutPushing elements into doubleStack:n; while (doubleStack.push(f) cout f ; f += f; cout n
11、Stack is full. Cannot push f onto the doubleStack.;,2020/8/3,21,例子2:用類模板實(shí)現(xiàn)棧(5/6),cout intStack; int i = 1; coutnPushing elements into intStack:n; while (intStack.push(i) cout i ; +i; coutnStack is full.push ifailed.;,2020/8/3,22,例子2:用類模板實(shí)現(xiàn)棧(6/6),coutnnPopping elements from intStack:n; while (intStac
12、k.pop(i) cout i ; cout nStack is empty. Cannot pop.n; return 0; ,2020/8/3,23,程序執(zhí)行結(jié)果,Pushing elements onto doubleStack: 3.14 6.28 12.56 25.12 50.24 100.48 Stack is full. push 200.96 failed. Popping elements from doubleStack: 100.48 50.24 25.12 12.56 6.28 3.14 Stack is empty. Cannot pop. Pushing elements onto intStack: 1 2 3 4 5 6 7
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大班安全活動(dòng)預(yù)防傳染病
- 優(yōu)惠寄遞服務(wù)合同范例
- 不簽就業(yè)合同范例
- 產(chǎn)業(yè)地產(chǎn)合同范例
- 會(huì)務(wù)公司招標(biāo)合同范例
- 中標(biāo)企業(yè)采購合同范例
- 內(nèi)蒙古農(nóng)村建房合同范例
- 借款利息合同范例6
- 上海車輛轉(zhuǎn)讓協(xié)議合同范例
- 不銹鋼焊條合同范例
- QC/T 1091-2023 客車空氣凈化裝置 (正式版)
- 2024年節(jié)水知識(shí)競賽考試題及答案
- 2024年江蘇醫(yī)藥職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫完整
- qc工作崗位職責(zé)
- 【體能大循環(huán)】聚焦體能循環(huán)-探索運(yùn)動(dòng)奧秘-幼兒園探究體能大循環(huán)有效開展策略課件
- 采購人員廉潔從業(yè)課件培訓(xùn)
- 2024年單招計(jì)算機(jī)試題題庫及答案
- XX藥業(yè)公司受試者日記卡
- 多組學(xué)數(shù)據(jù)的整合與分析
- 小學(xué)安全教育《平安校園 拒絕欺凌》劉偉【省級】優(yōu)質(zhì)課
- 靜脈輸液的不良反應(yīng)及處理原則考核試題及答案
評論
0/150
提交評論