




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1第十二章第十二章 異常處理異常處理清華大學清華大學 鄭鄭 莉莉C+語言程序設計C+語言程序設計清華大學 鄭莉2本章主要內容本章主要內容l異常處理的基本思想異常處理的基本思想lC+異常處理的實現異常處理的實現l異常處理中的構造與析構異常處理中的構造與析構C+語言程序設計清華大學 鄭莉3異常處理的基本思想異常處理的基本思想函數f()捕獲并處理異常函數h() 引發(fā)異常函數g()調用者異常傳播方向調用關系C+語言程序設計清華大學 鄭莉4異常處理的實現機制異常處理的實現機制l拋擲異常的程序段拋擲異常的程序段.throw 表達式;.l捕獲并處理異常的程序段捕獲并處理異常的程序段try 復合語句catch
2、(異常類型聲明) 復合語句catch(異常類型聲明) 復合語句 C+語言程序設計清華大學 鄭莉5異常處理的實現機制(續(xù))異常處理的實現機制(續(xù))l若有異常則通過若有異常則通過throwthrow操作創(chuàng)建一個異常對象并拋擲。操作創(chuàng)建一個異常對象并拋擲。l將可能拋出異常的程序段嵌在將可能拋出異常的程序段嵌在trytry塊之中??刂仆ㄟ^正塊之中??刂仆ㄟ^正常的順序執(zhí)行到達常的順序執(zhí)行到達trytry語句,然后執(zhí)行語句,然后執(zhí)行trytry塊內的保護段。塊內的保護段。l如果在保護段執(zhí)行期間沒有引起異常,那么跟在如果在保護段執(zhí)行期間沒有引起異常,那么跟在trytry塊塊后的后的catchcatch子句就
3、不執(zhí)行。程序從子句就不執(zhí)行。程序從trytry塊后跟隨的最后一塊后跟隨的最后一個個catchcatch子句后面的語句繼續(xù)執(zhí)行下去。子句后面的語句繼續(xù)執(zhí)行下去。lcatchcatch子句按其在子句按其在trytry塊后出現的順序被檢查。匹配的塊后出現的順序被檢查。匹配的catchcatch子句將捕獲并處理異常(或繼續(xù)拋擲異常)。子句將捕獲并處理異常(或繼續(xù)拋擲異常)。l如果匹配的處理器未找到,則運行函數如果匹配的處理器未找到,則運行函數terminateterminate將被將被自動調用,其缺省功能是調用自動調用,其缺省功能是調用abortabort終止程序。終止程序。C+語言程序設計清華大學
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; 程序運行結果如下:程序運行結果如下:5/2=25/2=2except of deviding zero.except of deviding zero.that is ok.that is ok.C+語言程序設計清華大學 鄭莉7異常接口聲明異常接口聲明l可以在函數的聲明中列出這個函數可可以在
6、函數的聲明中列出這個函數可能拋擲的所有異常類型。能拋擲的所有異常類型。例如:void fun() throw(A,B,C,D);l若無異常接口聲明,則此函數可以拋若無異常接口聲明,則此函數可以拋擲任何類型的異常。擲任何類型的異常。l不拋擲任何類型異常的函數聲明如下:不拋擲任何類型異常的函數聲明如下:void fun() throw();C+語言程序設計清華大學 鄭莉8異常處理中的構造與析構異常處理中的構造與析構l找到一個匹配的找到一個匹配的catch異常處理后異常處理后初始化參數。將從對應的try塊開始到異常被拋擲處之間構造(且尚未析構)的所有自動對象進行析構。從最后一個catch處理之后開始
7、恢復執(zhí)行。C+語言程序設計清華大學 鄭莉9例例12-2 異常處理時的析構異常處理時的析構#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構造構造 Demo.endl;Demo.endl; Demo:Demo()Demo:Demo() cout cout析構析構 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函數中。函數中。endl;endl; try try cout cout在在trytry塊中,調用塊中,調用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函數。從這里恢復執(zhí)行。函數。從這里恢復執(zhí)行。 endl; endl; return 0; return 0; 12程序運行時輸出程序運行時輸出:在main函數中。在try塊中,調用MyFunc()。構造 Demo.在MyFunc()中拋擲Expt類異常。析構 Demo.在catch異常處理
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年吉林省中考語文試卷【含答案】
- 2024-2025學年滬教版九年級化學下冊 第7章《探索溶解現象》單元測試卷
- 2024-2025學年上海某中學高一年級上冊語文期末試題及答案
- 三位數除以一位數水平測驗口算題大全附答案
- 熱衰竭知識推廣
- 小兒斜視的健康宣教
- 小兒驚厥的護理
- 股動脈槍擊音的健康宣教
- 食管惡性腫瘤的健康宣教
- 2024屆泰安市重點中學中考五模數學試題含解析
- 2025年4月自考13887經濟學原理中級押題及答案
- 琴行規(guī)章制度
- 小學校長在月度教師會議總結發(fā)言:教學、管理、成長全回顧
- 如何通過合理膳食安排促進嬰幼兒成長發(fā)育
- JJF(紡織) 061-2024 圓盤取樣器校準規(guī)范
- 智能健康養(yǎng)老服務人才培養(yǎng)創(chuàng)新與實踐探索
- 人教版(2024)七年級下冊生物期中復習必背知識點提綱
- 統(tǒng)編歷史七年級下冊(2024版)第8課-北宋的政治【課件】j
- 抖音陪跑合同范本
- 2025年度灰渣采購與運輸一體化服務合同
- 城中村改造項目建設方案
評論
0/150
提交評論