版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第14章章 1、什么是異常、什么是異常 在程序執(zhí)行過程中出現(xiàn)了不平常在程序執(zhí)行過程中出現(xiàn)了不平常(意外意外)的情況,的情況,我們稱之為異常。我們稱之為異常。2、異常處理機(jī)制、異常處理機(jī)制 C+的基本思想是將異常的檢測與處理分離。的基本思想是將異常的檢測與處理分離。當(dāng)在一個(gè)函數(shù)體中檢測到異常條件存在,但卻無法確當(dāng)在一個(gè)函數(shù)體中檢測到異常條件存在,但卻無法確定相應(yīng)的處理方法時(shí),該函數(shù)將引發(fā)一個(gè)異常,由函定相應(yīng)的處理方法時(shí),該函數(shù)將引發(fā)一個(gè)異常,由函數(shù)的數(shù)的直接或間接調(diào)用者直接或間接調(diào)用者捕獲這個(gè)異常并處理這個(gè)錯(cuò)誤。捕獲這個(gè)異常并處理這個(gè)錯(cuò)誤。 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、解決方法:、解決方法: 對(duì)輸入的對(duì)輸入的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)在一個(gè)函數(shù)體中檢測到異常條件存在,但卻無法確當(dāng)在一個(gè)函數(shù)體中檢測到異常條件存在,但卻無法確定相應(yīng)的處理方法時(shí),該函數(shù)將引發(fā)一個(gè)異常,由函定相應(yīng)的處理方法時(shí),該函數(shù)將引發(fā)一個(gè)異常,由函數(shù)的數(shù)的直接或間接調(diào)用者直接或間接調(diào)用者捕獲這個(gè)異常并處理這個(gè)錯(cuò)誤。捕獲這個(gè)異常并處理這個(gè)錯(cuò)誤。 1、throw 語句格式:語句格式:throw; throw 語句語句作用:作用:當(dāng)某段程序發(fā)現(xiàn)了自己不當(dāng)某段程序發(fā)現(xiàn)了自己不能處理的異常,就可以使用能處理的異常,就可以使用throw語句
4、將這個(gè)異常拋擲語句將這個(gè)異常拋擲給調(diào)用者。給調(diào)用者。throw語句的使用與語句的使用與return語句相似,如果程序語句相似,如果程序中有多處要拋擲異常,應(yīng)該用不同的表達(dá)式類型來互中有多處要拋擲異常,應(yīng)該用不同的表達(dá)式類型來互相區(qū)別,但表達(dá)式的值不能用來區(qū)分不同的異常。相區(qū)別,但表達(dá)式的值不能用來區(qū)分不同的異常。2、 try 語句的格式:語句的格式: try 語句序列語句序列 語句說明:語句說明:try語句后的語句序列是代碼的保護(hù)語句后的語句序列是代碼的保護(hù)段段(即可能發(fā)生異常的程序段即可能發(fā)生異常的程序段)。如果預(yù)料某段程序代碼如果預(yù)料某段程序代碼(或?qū)δ硞€(gè)函數(shù)的調(diào)用或?qū)δ硞€(gè)函數(shù)的調(diào)用)有有
5、可能發(fā)生異常,就將它放在可能發(fā)生異常,就將它放在try語句之后。語句之后。如果這段代碼如果這段代碼(或被調(diào)函數(shù)或被調(diào)函數(shù))運(yùn)行時(shí)真的發(fā)生了異運(yùn)行時(shí)真的發(fā)生了異常情況,其中的常情況,其中的throw語句就會(huì)拋擲這個(gè)異常,由相應(yīng)語句就會(huì)拋擲這個(gè)異常,由相應(yīng)的的catch語句來處理這個(gè)異常。語句來處理這個(gè)異常。3、 catch語句的格式:語句的格式:catch(異常類型異常類型 參數(shù)參數(shù) )針對(duì)異常類型針對(duì)異常類型 的處理語句的處理語句 語句說明:語句說明:每個(gè)每個(gè)catch語句后的語句是異常處理語句后的語句是異常處理程序,捕獲由程序,捕獲由throw表達(dá)式拋擲的異常。表達(dá)式拋擲的異常。4、異常處理
6、的執(zhí)行過程、異常處理的執(zhí)行過程 控制通過正常的順序執(zhí)行到達(dá)控制通過正常的順序執(zhí)行到達(dá)try語句,然后語句,然后執(zhí)行執(zhí)行try塊內(nèi)的保護(hù)段。塊內(nèi)的保護(hù)段。 如果在保護(hù)段執(zhí)行期間沒有引起異常,那么跟如果在保護(hù)段執(zhí)行期間沒有引起異常,那么跟在在try塊后的所有塊后的所有catch語句就不執(zhí)行。語句就不執(zhí)行。 如果在保護(hù)段執(zhí)行期間或在保護(hù)段調(diào)用的任何如果在保護(hù)段執(zhí)行期間或在保護(hù)段調(diào)用的任何函數(shù)中函數(shù)中(直接或間接的調(diào)用直接或間接的調(diào)用)有異常被拋擲,有異常被拋擲, 按按catch處處理程序在理程序在try塊后出現(xiàn)的順序檢查。如果找到了一個(gè)匹塊后出現(xiàn)的順序檢查。如果找到了一個(gè)匹配異常類型,就進(jìn)入相應(yīng)的配
7、異常類型,就進(jìn)入相應(yīng)的catch處理程序。處理程序。5、程序示例:、程序示例:/異常處理程序設(shè)計(jì)示例異常處理程序設(shè)計(jì)示例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)異常,進(jìn)入出現(xiàn)異常,進(jìn)入catch語句語句 cout7/1=Div(7,1)endl; /沒有執(zhí)行沒有執(zhí)行 catch(int) cout除數(shù)為除數(shù)為0endl; /
8、異常處理程序設(shè)計(jì)示例異常處理程序設(shè)計(jì)示例2: 利用利用C+的異常處理,編寫程序求一元二次方程的根,的異常處理,編寫程序求一元二次方程的根,當(dāng)方程無實(shí)數(shù)根時(shí),輸出當(dāng)方程無實(shí)數(shù)根時(shí),輸出“方程無實(shí)根方程無實(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方程無實(shí)根!方程無實(shí)根!endl; /異常處理程序設(shè)計(jì)示例異常處理程序設(shè)計(jì)示例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)越界錯(cuò)誤數(shù)組下標(biāo)越界錯(cuò)誤endl; void m
10、ain( )int i;for(i=0;i=5; i+)trycoutai=fun(i)endl;catch(char *)cout數(shù)組下標(biāo)越界錯(cuò)誤數(shù)組下標(biāo)越界錯(cuò)誤endl;/異常處理程序設(shè)計(jì)示例異常處理程序設(shè)計(jì)示例4: 利用利用C+的異常處理,編寫程序求一元二次方程的根,的異常處理,編寫程序求一元二次方程的根,當(dāng)方程無實(shí)數(shù)根時(shí),輸出當(dāng)方程無實(shí)數(shù)根時(shí),輸出“方程無實(shí)根方程無實(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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度綠色停車場運(yùn)營外包合同3篇
- 二零二五年商鋪?zhàn)赓U合同范本(包含租賃物維護(hù)保養(yǎng)責(zé)任)2篇
- 二零二五年度環(huán)保設(shè)備采購合同模板3篇
- 二零二五年度家電銷售代理合同
- 二零二五年度房地產(chǎn)開發(fā)商土地收購轉(zhuǎn)讓合同模板3篇
- 二零二五年度國際學(xué)校教室租賃合同(含跨文化教育協(xié)議)3篇
- 二零二五年度旅游產(chǎn)品銷售合同修訂與服務(wù)質(zhì)量標(biāo)準(zhǔn)
- 二零二五版水利工程水車租賃及安全評(píng)估合同3篇
- 二零二五年度花卉展會(huì)參展商鮮花采購協(xié)議3篇
- 二零二五年度教育培訓(xùn)委托協(xié)議書:提升員工素質(zhì)的定制化培訓(xùn)項(xiàng)目3篇
- 城市基礎(chǔ)設(shè)施修繕工程的重點(diǎn)與應(yīng)對(duì)措施
- GB 12710-2024焦化安全規(guī)范
- 【??途W(wǎng)】2024秋季校園招聘白皮書
- 圖像識(shí)別領(lǐng)域自適應(yīng)技術(shù)-洞察分析
- 個(gè)體戶店鋪?zhàn)赓U合同
- (正式版)YS∕T 5040-2024 有色金屬礦山工程項(xiàng)目可行性研究報(bào)告編制標(biāo)準(zhǔn)
- 【奧運(yùn)會(huì)獎(jiǎng)牌榜預(yù)測建模實(shí)證探析12000字(論文)】
- 阻燃壁紙匯報(bào)
- 梁若瑜著-十二宮六七二象書增注版
- 企業(yè)年會(huì)盛典元旦頒獎(jiǎng)晚會(huì)通用PPT模板
- 2017年安徽省中考數(shù)學(xué)試卷及答案解析
評(píng)論
0/150
提交評(píng)論