C++語(yǔ)言程序設(shè)計(jì)(清華大學(xué)鄭莉)(1)_第1頁(yè)
C++語(yǔ)言程序設(shè)計(jì)(清華大學(xué)鄭莉)(1)_第2頁(yè)
C++語(yǔ)言程序設(shè)計(jì)(清華大學(xué)鄭莉)(1)_第3頁(yè)
C++語(yǔ)言程序設(shè)計(jì)(清華大學(xué)鄭莉)(1)_第4頁(yè)
C++語(yǔ)言程序設(shè)計(jì)(清華大學(xué)鄭莉)(1)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(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)介

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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論