




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第十一章 異常處理C+開發實例教程劉暢主編 電子工業出版社本章學習內容異常處理機制的概述;異常處理機制的實現。目 錄第三十二講 異常處理基礎知識 本章小結 結 束第三十二講 異常處理基礎知識一、異常處理機制 二、異常類的定義 練一練返回本章目錄一、異常處理機制 【實例11-1】閱讀下面的程序片斷,分析程序運行時可能出現的錯誤。 點擊打開【實例11-1】源程序x11_1_1.cpp 程序分析: 程序從標準輸入設備鍵盤讀數據x和y后執行除法運算,并顯示運算結果。分析一下可能導致這個程序出現錯誤的情況:如果輸入y=0,即除法運算的除數為0,此時執行除法x/y就會導致錯誤,程序被終止。當輸入y=0時的
2、錯誤信息為:返回本講目錄因此,在編寫程序時,在可能出現錯誤的代碼處,要加入錯誤處理代碼段,避免程序繼續執行而導致嚴重后果。除法運算時為避免錯誤而采用的典型方法如下:點擊打開【實例11-1】源程序x11_1_2.cpp 程序運行結果如下(當輸入y=0時): 當出現除數為0錯誤時,由于程序中進行了判斷并發現了這個錯誤,所以沒有執行系統的終止程序,而是執行程序中的錯誤處理代碼。返回本講目錄事實上,在C+系統中,還提供了異常處理機制來管理程序運行期間出現的錯誤,從而形成結構化的異常處理模式。 點擊打開【實例11-1】源程序x11_1_3.cpp 程序運行結果如下(當輸入y=0時):返回本講目錄1異常處
3、理概述 程序運行時,可能因為發生了某種錯誤而終止,這些錯誤可以分為不可預料的邏輯錯誤和可以預料的運行錯誤。為處理可預料的運行錯誤,典型的方法是考慮到可能出現的錯誤,設計當錯誤發生時執行專門的錯誤處理代碼,中斷程序的正常執行流程,不會因繼續執行而產生嚴重或不可預料的后果。但是這種方法,不能區分程序中的正常處理代碼與錯誤處理代碼,不是結構化的設計方法。應用C+異常處理機制則可以顯式地區別程序中的正常處理代碼與錯誤處理代碼,提高程序的可讀性。 返回本講目錄2異常處理實現 【實例11-1】中使用了異常處理機制,將正常處理代碼與錯誤處理代碼區別開來,體現了C+中異常處理機制的基本思想:異常的檢測與處理分
4、離。當語句被檢測到錯誤時,將拋出一個異常,再由程序捕獲并處理這個異常。這一基本思想用3個關鍵字實現:throw、try和catch,其作用是: try:標識程序中可能出現異常語句塊的開始。 throw:拋出異常。 catch:捕獲并處理相應的異常。返回本講目錄異常處理的執行過程(1)程序通過正常的順序執行到try語句,然后執行try塊內的保護段。(2)如果在保護段執行期間沒有引起異常,那么跟在try塊后的catch子句就不被執行,程序從try塊后跟隨的最后一個catch子句后面的語句繼續執行下去。(3)如果在保護段執行期間或保護段調用的任何函數中(直接或間接的調用)有異常拋出,catch處理程
5、序按其在try塊后出現的順序被檢查,如果找到了匹配的catch異常處理類型,就執行該段異常處理程序。(4)如果沒有找到匹配的處理程序,則系統函數terminate被自動調用,其默認功能是調用abort終止程序。 返回本講目錄說明:(1)try子句后大括號中的復合語句是代碼的保護段。如果預料到某段程序代碼有可能發生異常,就將代碼放在try子句后的復合語句中,如果這段代碼運行時真的出現了異常,其中的throw就會拋出這個異常。(2)使用throw拋出異常,如果程序中要拋出多種類型的異常,應該用不同的類型來相互區別,的值不能用來區別不同的異常。(3)catch子句后大括號中的復合語句是異常處理程序,
6、捕獲由throw拋出的異常。catch子句中的異常類型指明該子句能處理的異常類型,類型可以是C+中任何有效的數據類型,包括類類型。當異常被拋出后,catch子句依次被檢查,若某個catch子句中的異常類型與拋出的異常類型一致,則執行該段異常處理程序。如果異常類型是catch(),則該段異常處理程序能夠捕獲并處理任何類型的異常,catch()必須是最后一個catch子句。 返回本講目錄3自定義的終止函數 返回本講目錄如果一個異常拋出后,系統找不到一個與該異常類型相匹配的catch子句,則自動調用預定義的運行時刻終止函數terminate,執行默認的abort程序退出程序。用戶也可以定義自己的終止
7、函數。【實例11-2】閱讀程序,學習編寫用戶自定義的終止函數。點擊打開【實例11-2】源程序程序運行結果: 當打開文件操作失敗拋出異常后,系統找不到一個與該異常類型(char *)相匹配的異常處理程序,則執行指定的myTerminate函數,顯示如下信息: 返回本講目錄【實例11-3】閱讀下面的程序,學習異常類的定義。點擊打開【實例11-3】源程序本實例拋出的是一個自定義的異常類except的對象,自動調用異常類的構造函數初始化異常類數據成員;catch子句捕獲并調用異常類的成員函數來輸出錯誤信息后,調用exit(1)退出程序;若執行的過程中沒有異常產生,則執行正常的除法運算,將運算結果寫入到
8、打開的文件中,操作結束后要關閉打開的文件。二、異常類的定義 返回本講目錄程序運行結果如下:若打開文件操作失敗,顯示的錯誤信息為: 若打開文件操作成功,但輸入了0作為除數,顯示的錯誤信息為: 4標準C+庫中的異常類 標準C+庫中包含了1個異常基類和9個異常派生類,它們可以分為運行時異常和邏輯異常:(1)由異常基類exception(在頭文件中定義)直接派生的類: runtime_error logic_error每個派生類又可以派生其他類。exception提供成員函數what(),在每個派生類中重定義,發出相應的錯誤消息。 返回本講目錄(2)logic_error類是幾個標準異常類的基類,表示
9、程序邏輯中的錯誤,可以通過編寫正確的代碼來防止,派生的異常類有: length_error:長度異常,長度大于所操作對象允許的最大長度 domain_error:域異常 out_of_range_error:越界異常,數組下標值超界 invalid_argument:參數異常,向函數傳入了無效參數返回本講目錄(3)runtime_error類是幾個其他異常類的基類,表示程序中只能在執行時發現的錯誤,派生的異常類有: range_error:范圍異常 overflow_error:運算上溢出異常 underflow_error:運算下溢出異常標準C+庫中的這些異常并沒有全部被顯示使用,因為C+標
10、準庫中很少發生異常,但是這些標準異常類可以為編程人員提供一些開發自己的異常類的經驗。返回本講目錄5多路捕獲 很多程序可能有若干不同種類的運行錯誤,可以使用異常處理機制,每種錯誤與一個類、一種數據類型或一個值相關。這樣,在程序中就會出現多路捕獲。 【實例11-4】閱讀下面的程序,學習多路捕獲的應用。 點擊打開【實例11-4】源程序程序運行結果如下:返回本講目錄練一練【練習11-1】 編寫一個程序,使用指針創建一個整數數組,并對數組中的元素賦值,要求采用異常處理機制,處理申請操作不成功的情況。解:使用指針創建一個整數數組,可以通過new運算符申請一塊保存數組的內存單元。對于指針的動態內存分配,應在
11、分配操作結束以后,首先檢查返回的地址值是否為0,以確認內存申請是否成功。只有在分配成功以后,才可以使用這個指針。返回本講目錄(1)程序分析如下: 定義一個整數指針p。 動態申請指針p所需的內存空間(假設整型數組的元素為5個),并檢查申請操作是否成功。此操作要放在try塊中,若指針的返回值為0,內存分配不成功,要拋出一個異常,程序不能繼續執行。 使用指針p給數組賦值,并將元素值顯示出來。 點擊打開【練習11-1】源程序程序運行結果如下: 內存分配成功時: 若內存分配失敗,執行異常處理代碼后,程序終止: 返回本講目錄本 章 小 結利用C+系統的異常處理,可以捕獲所有類型的異常、捕獲特定類型的所有異常和捕獲相關類型的所有異常,這樣就可以使程序更加健壯。異常處理使程序可以捕獲和處理錯誤,而不是任其發生和造成惡果。程序員在try塊中放上出錯時產生異常的代碼。try塊后面是一個或幾個catch塊。每個catch塊指定捕獲和處理一種異常,而且每個catch塊包含一個異常處理器(異常處理程序)。返回本章目錄拋出異常時,程序控制離開try塊,從catch塊中搜索相應異常處理器。如果異常類型與catch塊中的參數類型相匹配,則執行該catch塊的代碼。如果找不到相應的異常處理器,則調用terminate
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年一級建造師之一建建設工程經濟題庫附答案(基礎題)
- 2025年租賃預訂合同協議范本
- 線路建設維護方案范本
- 農田水溝包工合同樣本
- 公司酒類銷售合同樣本
- 外墻廣告鏟除方案范本
- 鋼骨架輕墻板施工方案
- 蚌埠污水池施工方案
- 鄉鎮糧油購銷合同樣本
- 培養學生批判性思維的路徑計劃
- 2024年高三班主任畢業評語15篇
- 2025年中國稀土集團招聘筆試參考題庫含答案解析
- photoshop圖形圖像處理-中國院子知到智慧樹章節測試課后答案2024年秋青島西海岸新區職業中等專業學校
- 道路勘測設計-平縱線形組合設83課件講解
- 設施農業課件
- 中國建筑校招二輪測試題庫
- 第46屆世界技能大賽河南省選拔賽-3D數字游戲藝術項目-樣題
- 《職場溝通技巧》(第三版)課件全套 陶莉 項目1-9 有效溝通基本功 - 有效溝通綜合實訓
- 2024中華人民共和國學前教育法詳細解讀課件
- DB34T4912-2024二手新能源汽車鑒定評估規范
- 汞中毒課件教學課件
評論
0/150
提交評論