




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、1-1融智技術學院融智技術學院第20章 異 常 處 理楊章偉楊章偉e-mail:1-2融智技術學院融智技術學院課程內(nèi)容安排課程內(nèi)容安排錯誤與異常錯誤與異常 異常處理的實現(xiàn)異常處理的實現(xiàn) 類和結構的異常處理類和結構的異常處理 異常處理機制異常處理機制 字符串庫字符串庫 小結小結 習題習題 1-3融智技術學院融智技術學院錯誤與異常錯誤與異常 在實際的應用程序設計中,不可避免地會出現(xiàn)程序錯誤和異常在實際的應用程序設計中,不可避免地會出現(xiàn)程序錯誤和異常。因此,異常處理是每一種程序設計語言都必須包含的一個部。因此,異常處理是每一種程序設計語言都必須包含的一個部分,分,C+的異常處理功能非常完善,使用戶能
2、夠很快發(fā)現(xiàn)及捕的異常處理功能非常完善,使用戶能夠很快發(fā)現(xiàn)及捕獲異常,盡快地完成程序調試。獲異常,盡快地完成程序調試。 讀者可以理解,在實際程序設計中,無論用戶的編碼技術有多讀者可以理解,在實際程序設計中,無論用戶的編碼技術有多好,出現(xiàn)錯誤的可能性都很大。因此,程序都必須能處理可能好,出現(xiàn)錯誤的可能性都很大。因此,程序都必須能處理可能出現(xiàn)的錯誤和異常。出現(xiàn)的錯誤和異常。 1-4融智技術學院融智技術學院什么是異常什么是異常 簡單地說,異常就是程序在運行過程中,由于使用環(huán)境的變化簡單地說,異常就是程序在運行過程中,由于使用環(huán)境的變化及用戶的操作而產(chǎn)生的錯誤。例如,內(nèi)存不足時,應用程序及用戶的操作而產(chǎn)
3、生的錯誤。例如,內(nèi)存不足時,應用程序請求分配內(nèi)存,程序中出現(xiàn)了以零為除數(shù)的錯誤;打印機未請求分配內(nèi)存,程序中出現(xiàn)了以零為除數(shù)的錯誤;打印機未打開,導致程序運行中掛接這些設備失敗等,都會引發(fā)異常打開,導致程序運行中掛接這些設備失敗等,都會引發(fā)異常。對這些錯誤,應用程序如果不能進行合適的處理,將會使。對這些錯誤,應用程序如果不能進行合適的處理,將會使程序變得非常脆弱,甚至不可使用。程序變得非常脆弱,甚至不可使用。異常處理對于編寫健壯的軟件來說無疑是非常重要的,是否有異常處理對于編寫健壯的軟件來說無疑是非常重要的,是否有完善的異常處理機制也是評價某一程序設計語言優(yōu)劣的一個完善的異常處理機制也是評價某
4、一程序設計語言優(yōu)劣的一個重要標準。重要標準。 1-5融智技術學院融智技術學院異常處理的基本思想異常處理的基本思想 處理異常的基本思想是:在底層發(fā)生的問題,逐級上報,直到有處理異常的基本思想是:在底層發(fā)生的問題,逐級上報,直到有能力可以處理異常的那級為止?;蛘哒f,在應用程序中,如果能力可以處理異常的那級為止。或者說,在應用程序中,如果某個函數(shù)發(fā)現(xiàn)了錯誤并引發(fā)異常,這個函數(shù)就將該異常向上級某個函數(shù)發(fā)現(xiàn)了錯誤并引發(fā)異常,這個函數(shù)就將該異常向上級調用者傳遞,請求調用者捕獲該異常并處理該錯誤。如果調用調用者傳遞,請求調用者捕獲該異常并處理該錯誤。如果調用者不能處理該錯誤,就繼續(xù)向上級調用者傳遞,直到異常
5、被捕者不能處理該錯誤,就繼續(xù)向上級調用者傳遞,直到異常被捕獲錯誤被處理為止。獲錯誤被處理為止。如果程序最終沒有相應的代碼處理該異常,那么該異常最后被如果程序最終沒有相應的代碼處理該異常,那么該異常最后被C+系統(tǒng)所接受,系統(tǒng)所接受,C+系統(tǒng)就簡單地終止程序運行。系統(tǒng)就簡單地終止程序運行。 【范例范例20-1】異常處理的基本思想。該范例實現(xiàn)當除數(shù)為零時,異常處理的基本思想。該范例實現(xiàn)當除數(shù)為零時,停止運行并給出提示信息停止運行并給出提示信息 。1-6融智技術學院融智技術學院使用使用try/catch捕獲異常捕獲異常 通過前面的介紹,讀者已經(jīng)了解到,對異常的處理之前首通過前面的介紹,讀者已經(jīng)了解到,
6、對異常的處理之前首先需要捕獲到異常。在先需要捕獲到異常。在C+中,提供了語句中,提供了語句try/catch來捕來捕獲異常,其中,獲異常,其中,try和和catch分別用于定義異常和定義異常處分別用于定義異常和定義異常處理。定義異常是將可能產(chǎn)生錯誤的語句放在理。定義異常是將可能產(chǎn)生錯誤的語句放在try語句塊中。語句塊中。其格式是:其格式是:try可能產(chǎn)生錯誤的語句可能產(chǎn)生錯誤的語句定義異常處理是將異常處理的語句放在定義異常處理是將異常處理的語句放在catch語句塊中,以語句塊中,以便異常被傳遞來時處理。通常,異常處理是放在便異常被傳遞來時處理。通常,異常處理是放在try語句塊語句塊后的由若干個
7、后的由若干個catch語句組成的程序語句組成的程序 1-7融智技術學院融智技術學院使用使用throw拋出異常拋出異常 拋出異常(也稱為拋出異常)即檢測是否產(chǎn)生異常,在拋出異常(也稱為拋出異常)即檢測是否產(chǎn)生異常,在C+中,其中,其采用采用throw語句來實現(xiàn),如果檢測到產(chǎn)生異常,則拋出異常。該語句語句來實現(xiàn),如果檢測到產(chǎn)生異常,則拋出異常。該語句的格式為:的格式為:throw 表達式表達式;如果在如果在try語句塊的程序段中(包括在其中調用的函數(shù))發(fā)現(xiàn)了異常語句塊的程序段中(包括在其中調用的函數(shù))發(fā)現(xiàn)了異常,且拋棄了該異常,則這個異常就可以被,且拋棄了該異常,則這個異常就可以被try語句塊后的
8、某個語句塊后的某個catch語句所捕獲并處理,捕獲和處理的條件是被拋棄的異常的類型與語句所捕獲并處理,捕獲和處理的條件是被拋棄的異常的類型與catch語句的異常類型相匹配。由于語句的異常類型相匹配。由于C+使用數(shù)據(jù)類型來區(qū)分不同的使用數(shù)據(jù)類型來區(qū)分不同的異常,因此在判斷異常時,異常,因此在判斷異常時,throw語句中的表達式的值就沒有實際意語句中的表達式的值就沒有實際意義,而表達式的類型就特別重要義,而表達式的類型就特別重要 【范例范例20-2】處理除數(shù)為處理除數(shù)為0的異常。該范例將上述除數(shù)為的異常。該范例將上述除數(shù)為0的異??傻漠惓?梢杂靡杂胻ry/catch語句來捕獲異常,并使用語句來捕獲
9、異常,并使用throw語句來拋出異常,從語句來拋出異常,從而實現(xiàn)異常處理而實現(xiàn)異常處理 。1-8融智技術學院融智技術學院類和結構的異常處理類和結構的異常處理 C+異常處理的真正能力不僅在于它能處理各種不同類異常處理的真正能力不僅在于它能處理各種不同類型的異常,還在于它具有在異常拋棄前為構造的所有局型的異常,還在于它具有在異常拋棄前為構造的所有局部對象自動調用析構函數(shù)的能力。部對象自動調用析構函數(shù)的能力。當在程序中找到一個匹配的當在程序中找到一個匹配的catch異常處理后,如果異常處理后,如果catch()語句的異常類型聲明是一個值參數(shù),則其初始語句的異常類型聲明是一個值參數(shù),則其初始化方式是復
10、制被拋棄的異常對象;如果化方式是復制被拋棄的異常對象;如果catch()語句的語句的異常類型聲明是一個引用,則其初始化方式是使該引用異常類型聲明是一個引用,則其初始化方式是使該引用指向異常對象。指向異常對象。 1-9融智技術學院融智技術學院異常處理機制異常處理機制 C+異常處理機制是一個用來有效地處理運行錯誤的非常強異常處理機制是一個用來有效地處理運行錯誤的非常強大且靈活的工具,它提供了更多的彈性、安全性和穩(wěn)固性,大且靈活的工具,它提供了更多的彈性、安全性和穩(wěn)固性,克服了傳統(tǒng)方法所帶來的問題??朔藗鹘y(tǒng)方法所帶來的問題。 事實上,事實上,C+中的異常處理機制是一種把控制權從異常發(fā)生中的異常處理
11、機制是一種把控制權從異常發(fā)生的地點轉移到一個匹配的處理函數(shù)或功能塊的機制。其中,的地點轉移到一個匹配的處理函數(shù)或功能塊的機制。其中,異??梢允莾?nèi)建數(shù)據(jù)類型變量,也可以是對象。一般來說,異??梢允莾?nèi)建數(shù)據(jù)類型變量,也可以是對象。一般來說,異常處理機制包括異常處理機制包括4個部分。個部分。try語句塊:即一個定義異常的語句塊。語句塊:即一個定義異常的語句塊。catch語句塊:即一個或多個和語句塊:即一個或多個和try語句塊相關的處理,它們語句塊相關的處理,它們放在放在catch語句塊中。語句塊中。throw表達式:即拋出異常語句。表達式:即拋出異常語句。異常本身。異常本身。 1-10融智技術學院融
12、智技術學院本章主要介紹了本章主要介紹了C+中關于異常處理及其機制的內(nèi)容。異常中關于異常處理及其機制的內(nèi)容。異常處理是所有程序設計語言都需要包含的一個部分,處理是所有程序設計語言都需要包含的一個部分,C+的的異常處理機制主要由定義異常、定義異常處理和異常處理機制主要由定義異常、定義異常處理和throw語語句等組成。對于句等組成。對于C+中處理異常的語句主要包括:中處理異常的語句主要包括:try語語句、句、catch語句和語句和throw語句等。對于不同類型的異常處語句等。對于不同類型的異常處理,其理,其throw語句后的表達式類型較為重要,尤其是當處語句后的表達式類型較為重要,尤其是當處理類型為
13、結構體時。理類型為結構體時。小結小結 1-11融智技術學院融智技術學院1打開文件發(fā)生錯誤是經(jīng)常發(fā)生的情況。設計一個程序,該程打開文件發(fā)生錯誤是經(jīng)常發(fā)生的情況。設計一個程序,該程序可以處理一個處理文件時發(fā)生的異常。序可以處理一個處理文件時發(fā)生的異常。【解答解答】該試題主要考查該試題主要考查C+異常處理機制的應用。打開文件需異常處理機制的應用。打開文件需要使用到文件類并創(chuàng)建輸入輸出流對象,通過調用對象的要使用到文件類并創(chuàng)建輸入輸出流對象,通過調用對象的fail()成成員函數(shù)判斷其是否打開成功。此處需要使用到員函數(shù)判斷其是否打開成功。此處需要使用到try/catch語句來語句來進行異常的定義和捕獲,
14、其中異常定義語句寫在進行異常的定義和捕獲,其中異常定義語句寫在try語句中,異語句中,異常處理語句寫在常處理語句寫在catch語句中。語句中。 2定義一個異常處理類,該類需能捕獲錯誤類型并返回,在主定義一個異常處理類,該類需能捕獲錯誤類型并返回,在主函數(shù)中當用戶輸入整數(shù)函數(shù)中當用戶輸入整數(shù)1時發(fā)生異常,并調用類的成員函數(shù)進行時發(fā)生異常,并調用類的成員函數(shù)進行異處理。異處理。【解答解答】該試題主要考查異常處理的實現(xiàn)。首先在類中定義一個該試題主要考查異常處理的實現(xiàn)。首先在類中定義一個錯誤類型作為私有成員,而成員函數(shù)則是返回錯誤類型并對錯誤錯誤類型作為私有成員,而成員函數(shù)則是返回錯誤類型并對錯誤進行處理。在主函數(shù)中接收用戶輸入,當輸入為整數(shù)進行處理。在主函數(shù)中接收用戶輸入,當輸入為整數(shù)1時通過時通過trycatch語句捕獲該異常并進行處理。語句捕獲該異常并進行處理。 習題習題1-12融智技術學院融智技術學院習
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZGXK 024-2024 青儲玉米品種試驗規(guī)范
- 二零二五年度企業(yè)代為管理員工社保繳費及報銷流程合同
- 二零二五年度購房按揭貸款利率調整合同
- 2025年度酒店入住智能家居體驗合同
- 2025年度汽車零部件訂車合同違約賠償標準及責任界定
- 二零二五年度公寓樓出租合同樣本(含精裝修、家具家電及物業(yè)費)
- 二零二五年度醫(yī)院藥劑科藥品配送與勞務合作合同
- 二零二五年度臨時項目經(jīng)理聘用與項目風險預警協(xié)議
- 二零二五年度租賃型住房委托管理服務合同
- 二零二五年度旅游產(chǎn)業(yè)投資合作框架協(xié)議
- 2025年山東泰山財產(chǎn)保險股份有限公司招聘筆試參考題庫含答案解析
- 初中物理競賽及自主招生講義:第7講 密度、壓強與浮力(共5節(jié))含解析
- 農(nóng)村自建房施工合同范本(包工包料)
- 2024年八年級語文下冊《經(jīng)典常談》第一章《說文解字》練習題卷附答案
- 華為基建項目管理手冊
- 發(fā)育生物學1-9章全
- 基于單片機的交通信號燈模擬控制系統(tǒng)設計 答辯PPT
- 中國舞蹈家協(xié)會《中國舞蹈考級》 第四版教材
- 三年級數(shù)學下冊單元計劃【9個單元全】
- 鋼筋工程隱蔽檢查驗收記錄填寫實例
- 鐵路混凝土梁配件多元合金共滲防腐技術條件
評論
0/150
提交評論