




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、異常處理一、異常處理的機制1、異常處理的機制異常處理概述異常:程序執(zhí)行時遇到的任何錯誤情況或意外行為。異常處理:異常處理就是指當程序出現(xiàn)這些錯誤后,給與恰當處理,為程序提供退出的通道。異??赡苄源a或調用的代碼(如共享庫)中有錯誤;操作系統(tǒng)資源不可用;公共語言運行庫遇到意外情況(如無法驗證代碼);用戶的錯誤操作等;2、異常處理的機制傳統(tǒng)的錯誤處理方法綜合應用實例:/*/*copyright (C),2015-2020,TanZhou EDU.Co.,.FileName:Exception.cppAuthor:VicoVer: 1.0Date: 2015年月日Description:/模塊描述V
2、er:/版本信息Function List: /主要函數(shù)及其功能1._tmain.2.FuctionTpro1.History: /歷史修改Vico2015年月日1.0build this moudle*/*/ Exception.cpp : 定義控制臺應用程序的點。/#includestdafx.h#includeiostream#includefstreamusing namespatd;_tmain(argc,_TCHAR* argv)char str50;char msg=Can not open infile student.txt;ifstream fin(student.txt)
3、;if(!fin)/傳統(tǒng)異常處理方法coutmsgstr;coutstrendl;fin.close();return 0;弊端:例如函數(shù)返回 NULL代表出現(xiàn)異常,但是如果函數(shù)確實要返回 NULL 這個正確的值時就會出現(xiàn)沸淆。可讀性降低,將程序代碼與處理異常的代碼混在一起;由調用函數(shù)的程序來分析錯誤,這就要求客戶程序員對庫函數(shù)有很深入的了解。要求:需要更加靈活、程序可讀性強、降低程序員勞動強度的處理方式。C+異常處理機制:在于當遇到異常時,系統(tǒng)不是馬上終止運行,而是允許用戶排除錯誤,繼續(xù)運行程序,至少給出出錯提示信息。在大型復雜的系統(tǒng)中,函數(shù)之間有明顯的分工和復雜的調用關系,發(fā)現(xiàn)錯誤函數(shù)一般
4、不具備處理錯誤的能力。這時只能導致一個異常,并拋出異常,讓它的調用者捕獲這個異常處理,如果調用者也不能處理就傳送給它的調用者,這樣一直上傳到能處理為止。如果始終沒有處理就上交到 C+運行系統(tǒng),運行系統(tǒng)調用 abort 函數(shù)強行終止整個程序。二、C+異常處理的實現(xiàn)1、異常的處理實現(xiàn)異常處理過程try,throw 和 catch 語句就是用于實現(xiàn)異常處理的機制的程序子句:確定要保護的代碼段確定要保護的代碼段(敏感代碼)的工作由 try 子句來實現(xiàn)。如果預料某段代碼可能出現(xiàn)異常,就將此段代碼放在 try語句中。這段代碼在運行時真的出現(xiàn)了錯誤,就通過其中的 throw 語句拋擲異常對象的類型和異常的內(nèi)
5、容。拋擲異常拋擲異常的工作由 throw 子句來實現(xiàn),在受保護的可能產(chǎn)生異常的語句中進行錯誤檢測,異常就通過 throw 語句拋擲異常對象的類型和異常的內(nèi)容。定義異常處理程序通過throw 拋擲原異常對象和異常內(nèi)容,被 catch 子句捕獲,并處理捕獲的異常對象。即將出現(xiàn)異常后對異常的處理語句放在 catch 語句塊中,捕捉異常并處理,catch 子句賣到了異常處理器的作用。綜合應用實例:/*/*copyright (C),2015-2020,TanZhou EDU.Co.,.FileName:Exception.cppAuthor:VicoVer:1.0Date: 2015年月日Descri
6、ption:/模塊描述Ver:/版本信息Function List:/主要函數(shù)及其功能1._tmain.2.FuctionTpro1.History: /歷史修改Vico2015年月日1.0build this moudle*/*/ Exception.cpp : 定義控制臺應用程序的點。/#includestdafx.h#includeiostream#includefstream#includestringusing namespatd;_tmain(argc,_TCHAR* argv)char str50;char msg=Can not open infile student.txt;
7、ifstream fin(student.txt);/如果打開成功fin就為真否則fin為假tryif (!fin)throw string(msg);elsecout文件打開成功endl;catch (string s)coutsendl;return 0;參考:執(zhí)行過程如下:1、通過正確的控制順序執(zhí)行到 try 語句,進入 try 塊內(nèi)執(zhí)行保護段程序。2、在 try 語句塊中,如果 try 中沒有異常,后面的 catch 語句不執(zhí)行,繼續(xù)執(zhí)行 catch 后的程序的語句。如果有多個 catch 語句塊時,跑到最后一個 catch 語句塊的后面執(zhí)行。3、在 try 語句塊中,有異常時,就通過
8、 throw 語句創(chuàng)建一個異常對象,例如 fin 為空(NULL),則通過 throw 創(chuàng)建一個異常對象,這里用字符串 msg,創(chuàng)建一個 string 的 s 對象。4、當異常被拋擲后,try 語句塊后的 catch 語句便依次檢查,若某個 catch 子句的異常與被拋擲的異常類型一致,則執(zhí)行該異常處理程序。5、如果沒有一個catch 的類型與其匹配,則函數(shù) termainate 被調用,terminate 函數(shù)的功能就是調用 abort 函數(shù)終止程序執(zhí)行。綜合應用實例:/*/*copyright (C),2015-2020,TanZhou EDU.Co.,.FileName:Exceptio
9、n.cppAuthor:VicoVer: 1.0Date: 2015年月日Description:/模塊描述Ver:/版本信息Function List: /主要函數(shù)及其功能1._tmain.2.FuctionTpro1.History: /歷史修改Vico2015年月日1.0build this moudle*/*/ Exception.cpp : 定義控制臺應用程序的點。/#includestdafx.h#includeiostream#includestringusing namespatd;/除數(shù)為零的異常處理float Divi(floatx,float y)if(y=0)throw
10、 string(異常處理:除數(shù)不能為零);return x/y;_tmain(argc, _TCHAR*argv)x1=5,y1=6;x2=6,y2=0;x3=7,y3=2;trycoutx1/y1=Divi(x1,y1)endl;coutx2/y2=Divi(x2,y2)endl;coutx3/y3=Divi(x3,y3)endl;catch (string s)coutsendl;return 0;注意:1、C+只處理受的程序的異常;2、try 語句后必需緊跟一個或多個 catch 語句,目的是對發(fā)生的異常進行捕獲并處理。3、catch()括號中只能一個形參,當預定義的類型與拋擲的異常對象
11、類型匹配時,該 catch()便捕獲了一個異常,程序執(zhí)行進入其塊中執(zhí)行。綜合應用實例:/*/*copyright (C),2015-2020,TanZhou EDU.Co.,.FileName:Exception.cppAuthor:VicoVer: 1.0Date: 2015年月日Description:/模塊描述Ver:/版本信息Function List:/主要函數(shù)及其功能1._tmain.2.FuctionTpro1.History: /歷史修改Vico2015年月日1.0build this moudle*/*/ Exception.cpp : 定義控制臺應用程序的點。/#inclu
12、destdafx.h#includeiostream#includestringusing namespatd;/成員函數(shù)拋擲異常對象的例子class StudentDeptpublic:StudentDept(char *p)DepName=new charstrlen(p);strcpy(DepName,p);DepNamestrlen(p)=0;char seek(i)if(i=0 & istrlen(DepName)return DepNamei;elsethrow 超出了系名字符個數(shù)。;/拋出異常對象private:char *DepName;_tmain(argc, _TCHAR*
13、 argv)StudentDept dep(Computer);trycoutdep.seek(8)endl;catch (char *m)coutmendl;return0;三、標準程序庫異常的用法1、綜合實用:利用標準程序庫提供的異常處理來實現(xiàn)對象內(nèi)存申請操作過量,導致系統(tǒng)發(fā)出 bad_calloc 異常的處理:/*/*copyright (C),2015-2020,TanZhou EDU.Co.,.FileName:Exception.cppAuthor:VicoVer: 1.0Date: 2015年月日Description:/模塊描述Ver:/版本信息Function List:/主
14、要函數(shù)及其功能1._tmain.2.FuctionTpro1.History: /歷史修改Vico2015年月日1.0build this moudle*/*/ Exception.cpp : 定義控制臺應用程序的點。/#includestdafx.h#includeiostream#includestringusing namespatd;class BigClasspublic:BigClass()BigClass()doubigArray999999999; /;_tmain(argc, _TCHAR* argv)tryBigClass *p=new BigClass;catch(bad
15、_alloc a)const char*temp=a.what();couttempendl;coutThrew a bad_alloc execption.endl;return 0;四、異常處理中的構造與析構在異常拋擲前構造異常對象和自動銷毀異常對象。綜合應用實例:/*/*copyright (C),2015-2020,TanZhou EDU.Co.,.FileName:Exception.cppAuthor:VicoVer:1.0Date: 2015年月日Description:/模塊描述Ver:/版本信息Function List:/主要函數(shù)及其功能1._tmain.2.Fuction
16、Tpro1.History: /歷史修改Vico2015年月日1.0build this moudle*/*/ Exception.cpp : 定義控制臺應用程序的點。/#includestdafx.h#includeiostream#includestringusing namespatd;class Exceptionpublic:Exception()cout構造Exception的對象endl;/5Exception(Exception &exp)cout拷貝構造Exception的對象endl;/6Exception()/11被執(zhí)行兩次,自己本身,拷貝cout析構Execption的
17、對象endl;char *Show()/10return Exception類異常。;class StudentDeptpublic:StudentDept(char *p)DepName=new charstrlen(p);strcpy(DepName,p);DepNamestrlen(p)=0;cout構造StudentDept的對象=0 & istrlen(DepName)return DepNamei;elsecout要拋出Exception類異常.endl;/3throw Exception();/拋出異常對象/4StudentDept()cout析構StudentDept的對象en
18、dl;/7private:char *DepName;_tmain(argc, _TCHAR* argv)tryStudentDept dep(Computer);coutdep.seek(12)endl;catch (Exception e)/8cout在catch異常程序處理中。endl;cout捕獲到Exception類異常:;coute.Show()endl;/9catch (char *m)cout捕獲到其它類的異常:mendl;return0;五、多個異常事件的處理綜合應用實例:/*/*copyright (C),2015-2020,TanZhou EDU.Co.,.FileName:Exception.cppAuthor:VicoVer: 1.0Date: 2015年月日Description:/模塊描述Ver:/版本信息Function List: /主要函數(shù)及其功能1._tmain.2.FuctionTpro1.His
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)項目 服務合同范本
- 合伙開武館合同范本
- 街道兩層樓房買賣合同書(29篇)
- 音樂基礎知識:音和音符
- 預防壓瘡講課
- 芯片行業(yè)研究報告
- 重癥肺炎應急搶救流程
- 青馬工程培訓會
- 2024年單招數(shù)學函數(shù)的性質專項復習試題和答案
- 藍天消防主機操作指南
- (正式版)JBT 14449-2024 起重機械焊接工藝評定
- 口語交際《演講》:會演講的人成功機會多兩倍-【中職專用】高一語文(高教版2023基礎模塊下冊)
- 2023年財政部部屬單位招聘考試真題及答案
- 成人癌性疼痛指南解讀護理課件
- 醫(yī)療糾紛預防和處理條例通用課件
- 家具類抖音直播策劃方案
- 廠房安全管理制度
- 第四單元整本書閱讀《平凡的世界》(第一課時)公開課一等獎創(chuàng)新教案-【中職專用】(中職語文高教版2023-2024-基礎模塊上冊)
- 逾期催收技巧培訓課件
- 客服面試常見問題及回答技巧(3篇)
- 《觀察力的培養(yǎng)》課件
評論
0/150
提交評論