第10章異常處理_第1頁
第10章異常處理_第2頁
第10章異常處理_第3頁
第10章異常處理_第4頁
第10章異常處理_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、第第14章章 1、什么是異常、什么是異常 在程序執(zhí)行過程中出現(xiàn)了不平常在程序執(zhí)行過程中出現(xiàn)了不平常(意外意外)的情況,的情況,我們稱之為異常。我們稱之為異常。2、異常處理機制、異常處理機制 C+的基本思想是將異常的檢測與處理分離。的基本思想是將異常的檢測與處理分離。當(dāng)在一個函數(shù)體中檢測到異常條件存在,但卻無法確當(dāng)在一個函數(shù)體中檢測到異常條件存在,但卻無法確定相應(yīng)的處理方法時,該函數(shù)將引發(fā)一個異常,由函定相應(yīng)的處理方法時,該函數(shù)將引發(fā)一個異常,由函數(shù)的數(shù)的直接或間接調(diào)用者直接或間接調(diào)用者捕獲這個異常并處理這個錯誤。捕獲這個異常并處理這個錯誤。 14.1 異常處理異常處理1、異常程序示例:、異常程

2、序示例:#include void main( )float x,y,z;cinxy;z=x/y;coutzendl; 2、程序分析:、程序分析: 假設(shè)在程序執(zhí)行過程中,輸入的假設(shè)在程序執(zhí)行過程中,輸入的y=0,將出現(xiàn),將出現(xiàn)除數(shù)為除數(shù)為0的異常。的異常。3、解決方法:、解決方法: 對輸入的對輸入的y作判斷,然后才相除。作判斷,然后才相除。#include void main()float x,y,z;cinxy;if ( y!=0) z=x/y; coutzendl; else cout errorendl;4、存在的問題:、存在的問題: 程序正常的操作與異常處理混在一塊,使程序程序正常的操

3、作與異常處理混在一塊,使程序變得更加復(fù)雜變得更加復(fù)雜。C+的基本思想是將異常的檢測與處理分離。的基本思想是將異常的檢測與處理分離。當(dāng)在一個函數(shù)體中檢測到異常條件存在,但卻無法確當(dāng)在一個函數(shù)體中檢測到異常條件存在,但卻無法確定相應(yīng)的處理方法時,該函數(shù)將引發(fā)一個異常,由函定相應(yīng)的處理方法時,該函數(shù)將引發(fā)一個異常,由函數(shù)的數(shù)的直接或間接調(diào)用者直接或間接調(diào)用者捕獲這個異常并處理這個錯誤。捕獲這個異常并處理這個錯誤。 1、throw 語句格式:語句格式:throw; throw 語句語句作用:作用:當(dāng)某段程序發(fā)現(xiàn)了自己不當(dāng)某段程序發(fā)現(xiàn)了自己不能處理的異常,就可以使用能處理的異常,就可以使用throw語句

4、將這個異常拋擲語句將這個異常拋擲給調(diào)用者。給調(diào)用者。throw語句的使用與語句的使用與return語句相似,如果程序語句相似,如果程序中有多處要拋擲異常,應(yīng)該用不同的表達式類型來互中有多處要拋擲異常,應(yīng)該用不同的表達式類型來互相區(qū)別,但表達式的值不能用來區(qū)分不同的異常。相區(qū)別,但表達式的值不能用來區(qū)分不同的異常。2、 try 語句的格式:語句的格式: try 語句序列語句序列 語句說明:語句說明:try語句后的語句序列是代碼的保護語句后的語句序列是代碼的保護段段(即可能發(fā)生異常的程序段即可能發(fā)生異常的程序段)。如果預(yù)料某段程序代碼如果預(yù)料某段程序代碼(或?qū)δ硞€函數(shù)的調(diào)用或?qū)δ硞€函數(shù)的調(diào)用)有有

5、可能發(fā)生異常,就將它放在可能發(fā)生異常,就將它放在try語句之后。語句之后。如果這段代碼如果這段代碼(或被調(diào)函數(shù)或被調(diào)函數(shù))運行時真的發(fā)生了異運行時真的發(fā)生了異常情況,其中的常情況,其中的throw語句就會拋擲這個異常,由相應(yīng)語句就會拋擲這個異常,由相應(yīng)的的catch語句來處理這個異常。語句來處理這個異常。3、 catch語句的格式:語句的格式:catch(異常類型異常類型 參數(shù)參數(shù) )針對異常類型針對異常類型 的處理語句的處理語句 語句說明:語句說明:每個每個catch語句后的語句是異常處理語句后的語句是異常處理程序,捕獲由程序,捕獲由throw表達式拋擲的異常。表達式拋擲的異常。4、異常處理

6、的執(zhí)行過程、異常處理的執(zhí)行過程 控制通過正常的順序執(zhí)行到達控制通過正常的順序執(zhí)行到達try語句,然后語句,然后執(zhí)行執(zhí)行try塊內(nèi)的保護段。塊內(nèi)的保護段。 如果在保護段執(zhí)行期間沒有引起異常,那么跟如果在保護段執(zhí)行期間沒有引起異常,那么跟在在try塊后的所有塊后的所有catch語句就不執(zhí)行。語句就不執(zhí)行。 如果在保護段執(zhí)行期間或在保護段調(diào)用的任何如果在保護段執(zhí)行期間或在保護段調(diào)用的任何函數(shù)中函數(shù)中(直接或間接的調(diào)用直接或間接的調(diào)用)有異常被拋擲,有異常被拋擲, 按按catch處處理程序在理程序在try塊后出現(xiàn)的順序檢查。如果找到了一個匹塊后出現(xiàn)的順序檢查。如果找到了一個匹配異常類型,就進入相應(yīng)的配

7、異常類型,就進入相應(yīng)的catch處理程序。處理程序。5、程序示例:、程序示例:/異常處理程序設(shè)計示例異常處理程序設(shè)計示例1:除數(shù)為:除數(shù)為0的異常處理的異常處理#include int Div(int x,int y)if(y=0) throw y; else return x/y; void main( ) try cout5/2=Div(5,2)endl; /正常執(zhí)行正常執(zhí)行 cout8/0=Div(8,0)endl; /出現(xiàn)異常,進入出現(xiàn)異常,進入catch語句語句 cout7/1=Div(7,1)endl; /沒有執(zhí)行沒有執(zhí)行 catch(int) cout除數(shù)為除數(shù)為0endl; /

8、異常處理程序設(shè)計示例異常處理程序設(shè)計示例2: 利用利用C+的異常處理,編寫程序求一元二次方程的根,的異常處理,編寫程序求一元二次方程的根,當(dāng)方程無實數(shù)根時,輸出當(dāng)方程無實數(shù)根時,輸出“方程無實根方程無實根”。#include #include void root(int a,int b,int c)double x1,x2;int d;d=b*b - 4*a*c;if (d0)throw 0;x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);cout方程的根為:方程的根為:;coutx1=x1 ,x2=x2endl;void main( )int a,b,c;

9、trycoutabc;root(a,b,c);catch(int)cout方程無實根!方程無實根!endl; /異常處理程序設(shè)計示例異常處理程序設(shè)計示例3: 采用采用C+異常處理的方法,編寫程序防止數(shù)組下標(biāo)越界。異常處理的方法,編寫程序防止數(shù)組下標(biāo)越界。#include int a =2,5,4,7,8;int fun(int x)if (x4) throw error;return ax; void main( )for(int i=0;i=5; i+) try coutai=fun(i)endl; catch(char *) cout數(shù)組下標(biāo)越界錯誤數(shù)組下標(biāo)越界錯誤endl; void m

10、ain( )int i;for(i=0;i=5; i+)trycoutai=fun(i)endl;catch(char *)cout數(shù)組下標(biāo)越界錯誤數(shù)組下標(biāo)越界錯誤endl;/異常處理程序設(shè)計示例異常處理程序設(shè)計示例4: 利用利用C+的異常處理,編寫程序求一元二次方程的根,的異常處理,編寫程序求一元二次方程的根,當(dāng)方程無實數(shù)根時,輸出當(dāng)方程無實數(shù)根時,輸出“方程無實根方程無實根”,增加判斷輸入的,增加判斷輸入的一元二次方程的系數(shù)一元二次方程的系數(shù)a是否等于是否等于0。 。#include #include void root(int a,int b,int c)double x1,x2;int d;if (a=0) throw error;d=b*b-4*a*c;if (d0) throw 0;x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論