




已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
0 計(jì)算機(jī)程序設(shè)計(jì)第13章異常處理與模板 西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心 1 本章內(nèi)容 模板函數(shù)模板類模板異常處理 2 術(shù)語(yǔ)簡(jiǎn)介 模板通用的語(yǔ)言描述稱為模板函數(shù)模板通用抽象的函數(shù)描述類模板通用抽象的類描述異常處理機(jī)制指用于控制程序期間錯(cuò)誤的結(jié)構(gòu)化方法 3 求兩個(gè)數(shù)的最大值 intMax inta intb returna b a b doubleMax doublea doubleb returna b a b templateTMax Ta Tb returna b a b cout Typeint Max i1 i2 endl cout Typedouble Max d1 d2 endl 4 函數(shù)模板 定義一個(gè)函數(shù)模板的形式為 template 其中中的模板參數(shù)的形式為 class這里關(guān)鍵字class與一般所講的類無(wú)關(guān) 指某一個(gè)內(nèi)部類型或用戶自己定義的數(shù)據(jù)類型在使用模板函數(shù)時(shí) 模板中的類型參數(shù)可用一個(gè)實(shí)際類型替換 從而達(dá)到了類型通用的目的 5 求兩數(shù)最大值的函數(shù)模板 include 例12 1 include 含有重載 TMax Ta Tb returna b a b intmain inti1 3 i2 5 doubled1 3 3 d2 5 2 stringstr1 xjtu str2 xian cout Typeint Max i1 i2 endl cout Typedouble Max d1 d2 endl cout Typestring Max str1 str2 endl return0 6 模板函數(shù)的說(shuō)明語(yǔ)句 include 例12 1 includeusingnamespacestd templateTMax Ta Tb intmain inti1 3 i2 5 doubled1 3 3 d2 5 2 stringstr1 xjtu str2 xian cout Typeint Max i1 i2 endl cout Typedouble Max d1 d2 endl cout Typestring Max str1 str2 endl return0 templateTMax Ta Tb returna b a b 7 冒泡排序改成模板 includevoidbubble sort inta intN for inti 0 ii j j 1 if a j 1 a j inttmp a j 1 a j 1 a j a j tmp intmain constintCOUNT 16 intlist COUNT 503 87 512 61 908 170 897 275 653 426 154 509 612 677 765 703 bubble sort list 16 cout Theresultis endl for intk 0 k 16 k cout list k cout endl return0 8 includetemplatevoidbubble sort Ta intN for inti 0 ii j j 1 if a j 1 a j Ttmp a j 1 a j 1 a j a j tmp intmain constintCOUNT 16 intlist1 COUNT 503 87 512 61 908 170 897 275 653 426 154 509 612 677 765 703 doublelist2 COUNT 50 3 87 51 2 6 1 90 8 17 0 89 7 27 5 65 3 42 6 15 4 5 09 6 12 67 7 7 65 7 03 intk bubble sort list1 16 cout Theresultis endl for k 0 k 16 k cout list1 k cout endl bubble sort list2 16 cout Theresultis endl for k 0 k 16 k cout list2 k cout endl return0 9 函數(shù)模板的注意事項(xiàng) 在函數(shù)模板的參數(shù)表中 至少有一個(gè)參數(shù)的類型為模板的類型參數(shù) 另外 函數(shù)的返回值的類型也可以是該類型參數(shù)模板中可以帶有多個(gè)參數(shù)類型 例如 templatevoidfunc1 T1arg1 T2arg2 T3arg3 函數(shù)可以帶有模板參數(shù)表中未給出的數(shù)據(jù)類型的參數(shù)templateTfunc2 Targ1 intarg2 10 include 例13 4intPower inta intexp 整數(shù) 實(shí)數(shù)的整數(shù)次冪 intans a while exp 0 ans a returnans intmain 測(cè)試用主函數(shù) cout 3 5 Power 3 5 endl cout 1 1 2 Power 1 1 2 endl return0 求冪函數(shù) 11 include 例13 4templateTPower Ta intexp Tans a while exp 0 ans a returnans intmain 測(cè)試用主函數(shù) cout 3 5 Power 3 5 endl cout 1 1 2 Power 1 1 2 endl return0 定義求冪函數(shù)的模板 12 在數(shù)組a中查找k 找到 返回下標(biāo) includeintsequentialsearch inta constint 順序查找 13 includetemplateintsequentialsearch Ta constT 用函數(shù)模板實(shí)現(xiàn)順序查找 14 類模板 類是對(duì)問(wèn)題空間的抽象 而類模板則是對(duì)類的抽象 與函數(shù)模板相似 程序中可以通過(guò)高度抽象首先定義一個(gè)類模板 然后通過(guò)使用不同的實(shí)參生成不同的類 類模板的定義方法為 template class 使用對(duì)象名1 對(duì)象名2 15 定義通用數(shù)組類 includetemplateclassarray public X ptr array intN ptr newX N array delete ptr intmain arraya 16 a ptr 0 168 cout arrayclass a ptr 0 endl return0 16 圓柱體類 includeclassCylinder intx y z intR H public Cylinder x y z R H 0 Cylinder intx1 inty1 intz1 intR1 intH1 x x1 y y1 z z1 R R1 H H1 intvolumn return3 14 R R H intarea return6 28 R R R H voidmain Cylinderhhh 0 0 0 2 3 int cout 體積 hhh volumn endl cout 面積 hhh area endl 17 定義圓柱體類模板 includetemplateclassYZT Xx y z XR H public YZT x y z R H 0 YZT Xx1 Xy1 Xz1 XR1 XH1 x x1 y y1 z z1 R R1 H H1 Xvolumn return3 14 R R H Xarea return6 28 R R R H voidmain YZThhh 0 0 0 2 0 3 測(cè)試double類型 int cout 體積 hhh volumn endl cout 面積 hhh area endl 18 異常處理機(jī)制 異常處理機(jī)制是C 中用于控制管理程序運(yùn)行期間錯(cuò)誤的一種結(jié)構(gòu)化方法其基本思想是將異常的檢測(cè)與處理異常分離intfactor intN if N 0 cout error return 1 throw 1 else 當(dāng)在程序中檢測(cè)到異常存在 將引發(fā)一個(gè)異常 并轉(zhuǎn)向處理這個(gè)異常的程序模塊 19 異常處理機(jī)制的語(yǔ)法結(jié)構(gòu) try catch 類型1參數(shù)1 catch 類型n參數(shù)n catch 20 異常處理機(jī)制注意 引發(fā)異常的throw語(yǔ)句必須在try語(yǔ)句塊內(nèi) 或是由try語(yǔ)句塊中直接或間接調(diào)用的函數(shù)體執(zhí)行throw語(yǔ)句的一般形式為 throwexceptionexception為異常值 通常寫成表達(dá)式Throw語(yǔ)句功能 將異常值與catch語(yǔ)句的類型進(jìn)行匹配 并轉(zhuǎn)向執(zhí)行匹配上的catch模塊catch語(yǔ)句的類型匹配過(guò)程中不作任何類型轉(zhuǎn)換 21 異常處理機(jī)制的使用 includevoidtestfun inttest try if test test 0throwtest 拋出異常elsethrow itisazero catch inti cout Exceptoccurred i endl catch constchar s cout Exceptoccurred s endl intmain testfun 10 testfun 100 testfun 0 return0 22 除0異常 include Example13 6 除0異常doubleDiv doublea doubleb intmain 測(cè)試用主函數(shù) doublen1 n2 result cout n1 n2 try result Div n1 n2 cout n1 n2 result endl catch double cout Exceptoccurred attemptedtodividebyzero endl cout Inputtwonumber endl cout Thatisok endl return0 doubleDiv doublea doubleb if b 0 0 throwb returna b 23 求一元二次方程的根 include Example13 7 解一元二次方程 includevoidRoot doublea doubleb doublec doublex1 x2 delta delta b b 4 a c if a 0 throw dividebyzero if delta a b c try Root a b c catch char cout Exceptoccurred itisnotaquadraticequation endl catch int cout Exceptoccurred therealrootofthisequationdoesnotexist n return0 24 友元 classTEMP private intx inty public voidprint TEMPa a x 11 a y 12 cout a x endl cout a y endl intmain print return0 25 友元 classTEMP private intx inty public friendvoidprint voidprint TEMPa a x 11 a y 12 cout a x endl cout a y endl intmain print return0 26 友元 允許類外部的函數(shù)或者類具有該類私有成員的特權(quán) 一 友元函數(shù)一個(gè)類的友元函數(shù)是在該類中說(shuō)明的 用關(guān)鍵字friend修飾的函數(shù) 該函數(shù)有權(quán)訪問(wèn)類中所有的成員 說(shuō)明一個(gè)友元的一般形式為friend 27 將另一個(gè)類的成員函數(shù)說(shuō)明為友元 classTEMP2 private intx inty public voidset classTEMP private intx inty public friendvoidTEMP2 set voidTEMP2 set TEMPa a x 21 a y 22 cout a x endl cout a y endl intmain TEMP2b b set return0 28 將一個(gè)類說(shuō)明為友元 友元類 classTEMP2 private intx inty public voidset classTEMP private intx inty public friendvoidTEMP2 set friendclassTEMP2 voidTEMP2 set TEMPa a x 21 a y 22 cout a x endl cout a y endl intmain TEMP2b b set return0 29 本章實(shí)驗(yàn)作業(yè) 30 3 例13 6中所定義的通用棧類實(shí)際上是不完善的 如無(wú)法根據(jù)用戶需求改變棧的大小 沒有提供棧滿溢出無(wú)法壓入和空棧無(wú)法彈出提示等 請(qǐng)改進(jìn)該程序 31 3 例13 6中所定義的通用棧類實(shí)際上是不完善的 如無(wú)法根據(jù)用戶需求改變棧的大小 沒有提供棧滿溢出無(wú)法壓入和空棧無(wú)法彈出提示等 請(qǐng)改進(jìn)該程序 32 4 C 中的數(shù)組類型比較簡(jiǎn)單 它的下標(biāo)只能從0開始 沒有負(fù)數(shù)下標(biāo) 而且沒有數(shù)組越界檢查 請(qǐng)用類模板設(shè)計(jì)一個(gè)newArray類 該類的對(duì)象可以是整型 浮點(diǎn)型 字符型等任何元素類型的數(shù)組 而且當(dāng)訪問(wèn)數(shù)組成員時(shí) 如果下標(biāo)越界 程序可以報(bào)錯(cuò)并終止 如下是一些例子 newArrayA1 3 同傳統(tǒng)類型的整型數(shù)組 包含5個(gè)元素的浮點(diǎn)型數(shù)組 其成員為A2 2 A2 1 A2 0 A2 1 A2 2 newArrayA2 2 3 請(qǐng)編寫一個(gè)測(cè)試程序 33 簡(jiǎn)單的文件讀寫程序 求n個(gè)數(shù)的和數(shù)據(jù)從文件中讀取 個(gè)數(shù)不定數(shù)據(jù)文件的格式12345 將和 個(gè)數(shù) 平均值寫到文件中 34 習(xí)題 實(shí)驗(yàn)本章第1 2題作業(yè)本章第4題選做題編寫判定函數(shù)isEqualTo的函數(shù)模板 用相等運(yùn)算符比較兩個(gè)參數(shù) 如果相等則返回1 如果不相等則返回0 使用這個(gè)函數(shù)模板 使得程序?qū)Ω鞣N內(nèi)部類型 intdoublefloatcharunsigned 調(diào)用isEqualTo 用函數(shù)模板 實(shí)現(xiàn)三個(gè)數(shù)據(jù)的比較 函數(shù)返回三個(gè)數(shù)中的最大值 編寫主函數(shù)測(cè)試該函數(shù)模板 數(shù)據(jù)的類型涉及int double char 35 編寫判定函數(shù)isEqualTo的函數(shù)模板 用相等運(yùn)算符比較兩個(gè)參數(shù) 如果相等則返回1 如果不相等則返回0 使用這個(gè)函數(shù)模板 使得程序?qū)Ω鞣N內(nèi)部類型 intd
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 報(bào)廢貨車轉(zhuǎn)讓合同協(xié)議書
- 高新技術(shù)產(chǎn)業(yè)廠房權(quán)屬變更協(xié)議范本
- 全程無(wú)憂型儲(chǔ)藏煤場(chǎng)租賃及煤炭配送服務(wù)合同
- 《出租車公司司機(jī)招聘與安全駕駛培訓(xùn)合同》
- 汽油銷售代理合同:區(qū)域汽油銷售代理合作協(xié)議
- 大數(shù)據(jù)中心倉(cāng)庫(kù)租賃及安全保障協(xié)議
- 車禍?zhǔn)鹿梳t(yī)療費(fèi)用賠償與后續(xù)治療合同
- 《娛樂場(chǎng)所不正當(dāng)行為處理與監(jiān)管協(xié)議》
- 茶葉采購(gòu)合同協(xié)議書范本
- 基本護(hù)理培訓(xùn)課件
- Photoshop圖像處理試題及答案
- 2025年農(nóng)村宅基地房屋買賣合同樣本
- 商鋪聯(lián)營(yíng)(合伙)協(xié)議9篇
- 2025年銷售管理能力評(píng)估考試題及答案
- 2025年高考數(shù)學(xué)二輪熱點(diǎn)題型歸納與演練(上海專用)專題02函數(shù)(九大題型)(原卷版+解析)
- 中原農(nóng)業(yè)保險(xiǎn)筆試
- 中華民族共同體概論知到課后答案智慧樹章節(jié)測(cè)試答案2025年春麗水學(xué)院
- 【MOOC】樹木學(xué)-北京林業(yè)大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 2024年高考真題-物理(貴州卷) 含解析
- 2024年浙江省中考社會(huì)試卷真題(含標(biāo)準(zhǔn)答案及評(píng)分標(biāo)準(zhǔn))
- 2024年吉林省中考?xì)v史試卷真題(含答案)
評(píng)論
0/150
提交評(píng)論