您好,登錄后才能下訂單哦!
這篇文章主要介紹C++中異常處理的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
程序運行時常會碰到一些異常情況,例如:
做除法的時候除數為 0;
用 new 運算符動態分配空間時,空間不夠導致無法分配;
訪問數組元素時,下標越界;打開文件讀取時,文件不存在。
這些異常情況,如果不能發現并加以處理,很可能會導致程序崩潰。
所謂“處理”,可以是給出錯誤提示信息,然后讓程序沿一條不會出錯的路徑繼續執行;也可能是不得不結束程序,但在結束前做一些必要的工作,如將內存中的數據寫入文件、關閉打開的文件、釋放動態分配的內存空間等。
C++ 引入了異常處理機制。
異常提供了一種轉移程序控制權的方式。C++ 異常處理涉及到三個關鍵字:try、catch、throw。
throw: 當問題出現時,程序會拋出一個異常。這是通過使用 throw 關鍵字來完成的。
catch: 在您想要處理問題的地方,通過異常處理程序捕獲異常。catch 關鍵字用于捕獲異常。
try: try 塊中的代碼標識將被激活的特定異常。它后面通常跟著一個或多個 catch 塊。
舉個例子
#include <iostream> #include <exception> using namespace std; int main () { try { throw 1; throw "error"; } catch (const char* str) { cout << str << endl; } catch (int i) { cout << i << endl; } }
運行結果
也可以自己定義異常類來進行處理:
#include <iostream> #include <exception> using namespace std; //可以自己定義Exception class myexception: public exception { virtual const char* what() const throw() { return "My exception happened"; } }myex; int main () { try { if(true) //如果,則拋出異常; throw myex; } catch (exception& e) { cout << e.what() << endl; } return 0; }
可以使用 throw 語句在代碼塊中的任何地方拋出異常。throw 語句的操作數可以是任意的表達式,表達式的結果的類型決定了拋出的異常的類型。
以下是嘗試除以零時拋出異常的實例:
#include <iostream> using namespace std; double division(int a, int b) { if( b == 0 ) { throw "Division by zero condition!"; } return (a/b); } int main () { int x = 50; int y = 0; double z = 0; try { z = division(x, y); cout << z << endl; }catch (const char* msg) { cerr << msg << endl; } return 0; }
運行結果
catch(…)能夠捕獲多種數據類型的異常對象,所以它提供給程序員一種對異常對象更好的控制手段,使開發的軟件系統有很好的可靠性。因此一個比較有經驗的程序員通常會這樣組織編寫它的代碼模塊,如下:
void Func() { try { // 這里的程序代碼完成真正復雜的計算工作,這些代碼在執行過程中 // 有可能拋出DataType1、DataType2和DataType3類型的異常對象。 } catch(DataType1& d1) { } catch(DataType2& d2) { } catch(DataType3& d3) { } catch(…) { } }
例子
double division(int a, int b) { if (b == 0) { throw "Division by zero condition!"; } return (a / b); } int main() { try { int res = division(10,0); } catch (...) { cout << " * ********" << endl; } return 0; }
以上是“C++中異常處理的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。