C++為我們提供了標準的異常處理類,它用來拋出C++標準庫中函數執行時的異常。 C++提供的標準異常類別的層次結構如圖:
可以看到,所有的異常類別都繼承自exception基類,exception類別下的logic_error和runtime_error又是兩個比較大類,包含有多個自類,它們分錶代表邏輯類別錯誤和執行時間錯誤。
舉例說明,如:
1. 我們使用new開闢記憶體時,如果遇到空間不足,則會拋出bad_alloc例外。
2. 我們使用dynamic_cast()進行動態類型轉換失敗時,則拋出bad_typeid異常。
3. 我們在計算數值超過該類型表示的最大範圍時,則拋出overflow_error異常,表示運算上溢,同理,underflow_error表示運算下溢。
4. 我們在使用string類別下標但越界時,則拋出out_of_range異常。
等等...等等... 請大家自行了解更多。
需要注意的是,使用C++自帶的標準異常類,需要包含對應的頭文件,因為exception、bad_exception類在頭文件exception中定義,bad_alloc類在頭文件new中定義,bad_typeid類在頭文件typeinfo中定義,ios_base::failure類別在頭文件ios中定義,其他異常類別在stdexcept中定義。
下面,給大家展示如何使用C++標準異常類別:
#include<iostream>#include<new>#include<stdexcept>usingnamespacestd;//異常處理intmain(){string*s;try{s=newstring(www.dotcpp.com);cout<<s->substr( 15,5);}catch(bad_alloc&t){cout<<Exceptionoccurred:<<t.what()<<endl;}catch(out_of_range&t){cout<<Exceptionoccurred:<<t.what()<<endl;} return0;}
運行結果如下圖:
請大家自行上機試驗學習使用方法!