知識(shí)點(diǎn): c++異常機(jī)制
一、 概述
C++自身有著非常強(qiáng)的糾錯(cuò)能力,發(fā)展到如今,已經(jīng)建立了比較完善的異常處理機(jī)制。C++的異常情況無非兩種,一種是語法錯(cuò)誤,即程序中出現(xiàn)了錯(cuò)誤的語句,函數(shù),結(jié)構(gòu)和類,致使編譯程序無法進(jìn)行。另一種是運(yùn)行時(shí)發(fā)生的錯(cuò)誤,一般與算法有關(guān)。
關(guān)于語法錯(cuò)誤,不必多說,寫代碼時(shí)心細(xì)一點(diǎn)就可以解決。C++編譯器的報(bào)錯(cuò)機(jī)制可以讓我們輕松地解決這些錯(cuò)誤。
第二種是運(yùn)行時(shí)的錯(cuò)誤,常見的有文件打開失敗、數(shù)組下標(biāo)溢出、系統(tǒng)內(nèi)存不足等等。而一旦出現(xiàn)這些問題,引發(fā)算法失效、程序運(yùn)行時(shí)無故停止等故障也是常有的。這就要求我們?cè)谠O(shè)計(jì)軟件算法時(shí)要全面。比如針對(duì)文件打開失敗的情況,保護(hù)的方法有很多種,最簡單的就是使用“return”命令,告訴上層調(diào)用者函數(shù)執(zhí)行失敗;另外一種處理策略就是利用c++的異常機(jī)制,拋出異常。
二、c++異常處理機(jī)制
C++異常處理機(jī)制是一個(gè)用來有效地處理運(yùn)行錯(cuò)誤的非常強(qiáng)大且靈活的工具,它提供了更多的彈性、安全性和穩(wěn)固性,克服了傳統(tǒng)方法所帶來的問題.
異常的拋出和處理主要使用了以下三個(gè)關(guān)鍵字: try、 throw 、 catch 。
拋出異常即檢測(cè)是否產(chǎn)生異常,在C++中,其采用throw語句來實(shí)現(xiàn),如果檢測(cè)到產(chǎn)生異常,則拋出異常。該語句的格式為:
throw 表達(dá)式;
如果在try語句塊的程序段中(包括在其中調(diào)用的函數(shù))發(fā)現(xiàn)了異常,且拋棄了該異常,則這個(gè)異常就可以被try語句塊后的某個(gè)catch語句所捕獲并處理,捕獲和處理的條件是被拋棄的異常的類型與catch語句的異常類型相匹配。由于C++使用數(shù)據(jù)類型來區(qū)分不同的異常,因此在判斷異常時(shí),throw語句中的表達(dá)式的值就沒有實(shí)際意義,而表達(dá)式的類型就特別重要。
try-catch語句形式如下 :
try
{
包含可能拋出異常的語句;
}
catch(類型名 [形參名]) // 捕獲特定類型的異常
{
}
catch(類型名 [形參名]) // 捕獲特定類型的異常
{
}
catch(...) // 三個(gè)點(diǎn)則表示捕獲所有類型的異常
{
}
【范例1】處理除數(shù)為0的異常。該范例將上述除數(shù)為0的異?梢杂胻ry/catch語句來捕獲異常,并使用throw語句來拋出異常,從而實(shí)現(xiàn)異常處理,實(shí)現(xiàn)代碼如代碼清單1-1所示。
相關(guān)推薦:2010年9月計(jì)算機(jī)等級(jí)考試成績查詢時(shí)間匯總
2011年計(jì)算機(jī)等級(jí)考試二級(jí)C++輔導(dǎo)筆記匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |