首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載 | ||
![]() |
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試 MPA考試 | 中科院 |
|
![]() |
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT 新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語 |
|
![]() |
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證 華為認證 | Java認證 |
|
![]() |
公務員 | 報關員 | 銀行從業資格 | 證券從業資格 | 期貨從業資格 | 司法考試 | 法律顧問 | 導游資格 報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師 人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業資格 | 廣告師職業水平 駕駛員 | 網絡編輯 |
|
![]() |
衛生資格 | 執業醫師 | 執業藥師 | 執業護士 | |
![]() |
會計從業資格考試(會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師 注冊資產評估師 | 高級會計師 | ACCA | 統計師 | 精算師 | 理財規劃師 | 國際內審師 |
|
![]() |
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監理工程師 | 安全工程師 質量工程師 | 物業管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師 設備監理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環境影響評價師 | 環保工程師 城市規劃師 | 公路監理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師 |
|
![]() |
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲 |
知識點: c++異常機制
一、 概述
C++自身有著非常強的糾錯能力,發展到如今,已經建立了比較完善的異常處理機制。C++的異常情況無非兩種,一種是語法錯誤,即程序中出現了錯誤的語句,函數,結構和類,致使編譯程序無法進行。另一種是運行時發生的錯誤,一般與算法有關。
關于語法錯誤,不必多說,寫代碼時心細一點就可以解決。C++編譯器的報錯機制可以讓我們輕松地解決這些錯誤。
第二種是運行時的錯誤,常見的有文件打開失敗、數組下標溢出、系統內存不足等等。而一旦出現這些問題,引發算法失效、程序運行時無故停止等故障也是常有的。這就要求我們在設計軟件算法時要全面。比如針對文件打開失敗的情況,保護的方法有很多種,最簡單的就是使用“return”命令,告訴上層調用者函數執行失敗;另外一種處理策略就是利用c++的異常機制,拋出異常。
二、c++異常處理機制
C++異常處理機制是一個用來有效地處理運行錯誤的非常強大且靈活的工具,它提供了更多的彈性、安全性和穩固性,克服了傳統方法所帶來的問題.
異常的拋出和處理主要使用了以下三個關鍵字: try、 throw 、 catch 。
拋出異常即檢測是否產生異常,在C++中,其采用throw語句來實現,如果檢測到產生異常,則拋出異常。該語句的格式為:
throw 表達式;
如果在try語句塊的程序段中(包括在其中調用的函數)發現了異常,且拋棄了該異常,則這個異常就可以被try語句塊后的某個catch語句所捕獲并處理,捕獲和處理的條件是被拋棄的異常的類型與catch語句的異常類型相匹配。由于C++使用數據類型來區分不同的異常,因此在判斷異常時,throw語句中的表達式的值就沒有實際意義,而表達式的類型就特別重要。
try-catch語句形式如下 :
try
{
包含可能拋出異常的語句;
}
catch(類型名 [形參名]) // 捕獲特定類型的異常
{
}
catch(類型名 [形參名]) // 捕獲特定類型的異常
{
}
catch(...) // 三個點則表示捕獲所有類型的異常
{
}
【范例1】處理除數為0的異常。該范例將上述除數為0的異常可以用try/catch語句來捕獲異常,并使用throw語句來拋出異常,從而實現異常處理,實現代碼如代碼清單1-1所示。
// 代碼清單1-1
1 #include //包含頭文件
2 #include
3 double fuc(double x, double y) //定義函數
4 {
5 if(y==0)
6 {
7 throw y; //除數為0,拋出異常
8 }
9 return x/y; //否則返回兩個數的商
10 }
11 void main()
12 {
13 double res;
14 try //定義異常
15 {
16 res=fuc(2,3);
17 cout<<"The result of x/y is : "<
18 res=fuc(4,0); //出現異常,函數內部會拋出異常
19 }
20 catch(double) //捕獲并處理異常
21 {
22 cerr<<"error of dividing zero.\n";
23 exit(1); //異常退出程序
24 }
25 }
【范例2】自定義異常類型 (在本文開始的代碼中已經給出示范)
相關推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |