版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第十二章第十二章 異常處理異常處理清華大學(xué)清華大學(xué) 鄭鄭 莉莉C+語(yǔ)言程序設(shè)計(jì)C+語(yǔ)言程序設(shè)計(jì)清華大學(xué) 鄭莉2本章主要內(nèi)容本章主要內(nèi)容l異常處理的基本思想異常處理的基本思想lC+異常處理的實(shí)現(xiàn)異常處理的實(shí)現(xiàn)l異常處理中的構(gòu)造與析構(gòu)異常處理中的構(gòu)造與析構(gòu)C+語(yǔ)言程序設(shè)計(jì)清華大學(xué) 鄭莉3異常處理的基本思想異常處理的基本思想函數(shù)f()捕獲并處理異常函數(shù)h() 引發(fā)異常函數(shù)g()調(diào)用者異常傳播方向調(diào)用關(guān)系C+語(yǔ)言程序設(shè)計(jì)清華大學(xué) 鄭莉4異常處理的實(shí)現(xiàn)機(jī)制異常處理的實(shí)現(xiàn)機(jī)制l拋擲異常的程序段拋擲異常的程序段.throw 表達(dá)式;.l捕獲并處理異常的程序段捕獲并處理異常的程序段try 復(fù)合語(yǔ)句catch
2、(異常類型聲明) 復(fù)合語(yǔ)句catch(異常類型聲明) 復(fù)合語(yǔ)句 C+語(yǔ)言程序設(shè)計(jì)清華大學(xué) 鄭莉5異常處理的實(shí)現(xiàn)機(jī)制(續(xù))異常處理的實(shí)現(xiàn)機(jī)制(續(xù))l若有異常則通過(guò)若有異常則通過(guò)throwthrow操作創(chuàng)建一個(gè)異常對(duì)象并拋擲。操作創(chuàng)建一個(gè)異常對(duì)象并拋擲。l將可能拋出異常的程序段嵌在將可能拋出異常的程序段嵌在trytry塊之中??刂仆ㄟ^(guò)正塊之中??刂仆ㄟ^(guò)正常的順序執(zhí)行到達(dá)常的順序執(zhí)行到達(dá)trytry語(yǔ)句,然后執(zhí)行語(yǔ)句,然后執(zhí)行trytry塊內(nèi)的保護(hù)段。塊內(nèi)的保護(hù)段。l如果在保護(hù)段執(zhí)行期間沒(méi)有引起異常,那么跟在如果在保護(hù)段執(zhí)行期間沒(méi)有引起異常,那么跟在trytry塊塊后的后的catchcatch子句就
3、不執(zhí)行。程序從子句就不執(zhí)行。程序從trytry塊后跟隨的最后一塊后跟隨的最后一個(gè)個(gè)catchcatch子句后面的語(yǔ)句繼續(xù)執(zhí)行下去。子句后面的語(yǔ)句繼續(xù)執(zhí)行下去。lcatchcatch子句按其在子句按其在trytry塊后出現(xiàn)的順序被檢查。匹配的塊后出現(xiàn)的順序被檢查。匹配的catchcatch子句將捕獲并處理異常(或繼續(xù)拋擲異常)。子句將捕獲并處理異常(或繼續(xù)拋擲異常)。l如果匹配的處理器未找到,則運(yùn)行函數(shù)如果匹配的處理器未找到,則運(yùn)行函數(shù)terminateterminate將被將被自動(dòng)調(diào)用,其缺省功能是調(diào)用自動(dòng)調(diào)用,其缺省功能是調(diào)用abortabort終止程序。終止程序。C+語(yǔ)言程序設(shè)計(jì)清華大學(xué)
4、鄭莉6例例12-1處理除零異常處理除零異常#include#includeint Div(int x,int y);int Div(int x,int y);int main()int main() trytry cout5/2=Div(5,2)endl; cout5/2=Div(5,2)endl; cout8/0=Div(8,0)endl; cout8/0=Div(8,0)endl; cout7/1=Div(7,1)endl; cout7/1=Div(7,1)endl; catch(int) catch(int) coutexcept of deviding zero.n; coutexce
5、pt of deviding zero.n; coutthat is ok.n;coutthat is ok.n; int Div(int x,int y)int Div(int x,int y) if(y=0) throw y;if(y=0) throw y;return x/y;return x/y; 程序運(yùn)行結(jié)果如下:程序運(yùn)行結(jié)果如下:5/2=25/2=2except of deviding zero.except of deviding zero.that is ok.that is ok.C+語(yǔ)言程序設(shè)計(jì)清華大學(xué) 鄭莉7異常接口聲明異常接口聲明l可以在函數(shù)的聲明中列出這個(gè)函數(shù)可可以在
6、函數(shù)的聲明中列出這個(gè)函數(shù)可能拋擲的所有異常類型。能拋擲的所有異常類型。例如:void fun() throw(A,B,C,D);l若無(wú)異常接口聲明,則此函數(shù)可以拋若無(wú)異常接口聲明,則此函數(shù)可以拋擲任何類型的異常。擲任何類型的異常。l不拋擲任何類型異常的函數(shù)聲明如下:不拋擲任何類型異常的函數(shù)聲明如下:void fun() throw();C+語(yǔ)言程序設(shè)計(jì)清華大學(xué) 鄭莉8異常處理中的構(gòu)造與析構(gòu)異常處理中的構(gòu)造與析構(gòu)l找到一個(gè)匹配的找到一個(gè)匹配的catch異常處理后異常處理后初始化參數(shù)。將從對(duì)應(yīng)的try塊開始到異常被拋擲處之間構(gòu)造(且尚未析構(gòu))的所有自動(dòng)對(duì)象進(jìn)行析構(gòu)。從最后一個(gè)catch處理之后開始
7、恢復(fù)執(zhí)行。C+語(yǔ)言程序設(shè)計(jì)清華大學(xué) 鄭莉9例例12-2 異常處理時(shí)的析構(gòu)異常處理時(shí)的析構(gòu)#include #include void MyFunc( void );void MyFunc( void );class Exptclass Expt public: public: Expt(); Expt(); Expt(); Expt(); const char const char * *ShowReason() constShowReason() const return Expt return Expt類異常。類異常。; ; ;class Democlass Demo public: pu
8、blic: Demo(); Demo(); Demo(); Demo();Demo:Demo()Demo:Demo() cout cout構(gòu)造構(gòu)造 Demo.endl;Demo.endl; Demo:Demo()Demo:Demo() cout cout析構(gòu)析構(gòu) Demo.endl;Demo.endl; 10void MyFunc()void MyFunc() Demo D; Demo D; cout cout在在MyFunc()MyFunc()中拋擲中拋擲ExptExpt類異常。類異常。endl;endl; throw Expt(); throw Expt(); int main()int
9、main() cout cout在在mainmain函數(shù)中。函數(shù)中。endl;endl; try try cout cout在在trytry塊中,調(diào)用塊中,調(diào)用MyFunc()MyFunc()。 endl; endl; MyFunc(); MyFunc(); 11 catch( Expt E ) catch( Expt E ) cout cout在在catchcatch異常處理程序中。異常處理程序中。endl;endl; cout cout捕獲到捕獲到ExptExpt類型異常:類型異常:; coutE.ShowReason()endl; coutE.ShowReason()endl; catch( char catch( char * *str )str ) cout cout捕獲到其他的異常:捕獲到其他的異常:strendl;strendl; cout cout回到回到mainmain函數(shù)。從這里恢復(fù)執(zhí)行。函數(shù)。從這里恢復(fù)執(zhí)行。 endl; endl; return 0; return 0; 12程序運(yùn)行時(shí)輸出程序運(yùn)行時(shí)輸出:在main函數(shù)中。在try塊中,調(diào)用MyFunc()。構(gòu)造 Demo.在MyFunc()中拋擲Expt類異常。析構(gòu) Demo.在catch異常處理
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度煤炭管道運(yùn)輸服務(wù)協(xié)議
- 二零二五年度企業(yè)員工應(yīng)急資金借款管理合同
- 2025年度糧食儲(chǔ)備企業(yè)風(fēng)險(xiǎn)管理合作協(xié)議書
- 2025年度家族遺產(chǎn)繼承與分配協(xié)議書
- 2025年度股東借款轉(zhuǎn)為實(shí)收資本二零二五年度投資轉(zhuǎn)化協(xié)議
- 2025年度理發(fā)店與時(shí)尚設(shè)計(jì)師合作發(fā)型設(shè)計(jì)合同
- 二零二五年度港口裝卸工安全責(zé)任與權(quán)益保障協(xié)議
- 2025年度足浴技師入職服務(wù)與薪酬保障合同
- 二零二五年度飯店員工勞動(dòng)派遣服務(wù)合同
- 二零二五年度股東多人健康醫(yī)療合作協(xié)議合同
- 2025年河北供水有限責(zé)任公司招聘筆試參考題庫(kù)含答案解析
- Unit3 Sports and fitness Discovering Useful Structures 說(shuō)課稿-2024-2025學(xué)年高中英語(yǔ)人教版(2019)必修第一冊(cè)
- 農(nóng)發(fā)行案防知識(shí)培訓(xùn)課件
- 社區(qū)醫(yī)療抗菌藥物分級(jí)管理方案
- NB/T 11536-2024煤礦帶壓開采底板井下注漿加固改造技術(shù)規(guī)范
- 2024年九年級(jí)上德育工作總結(jié)
- 2024年儲(chǔ)罐呼吸閥項(xiàng)目可行性研究報(bào)告
- 控制特需醫(yī)療服務(wù)規(guī)模管理措施
- GB/T 45076-2024再生資源交易平臺(tái)建設(shè)規(guī)范
- 安徽大學(xué)大學(xué)生素質(zhì)教育學(xué)分認(rèn)定辦法
- 高度限位裝置類型及原理
評(píng)論
0/150
提交評(píng)論