【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )
文章目錄
- I 異常處理
- II 字符串異常
- III 異常對象
- IV 拋出任意類型對象
- V 自定義異常
- VI 異常相關代碼
I 異常處理
1. 異常處理 : 使用 " try{}catch(){} " 將拋出異常的代碼包起來 , 注意將可能拋出異常的代碼包裹在 try 后的大括號中 , 將異常處理邏輯放在 catch 后的大括號中 ;
- ① 包含可能出現異常的代碼 : 在 try 代碼塊中編寫可能拋出異常的代碼 ;
- ② 捕獲異常 : catch 后的括號中注明可能捕獲的異常類型 ;
- ③ 針對捕獲的異常進行處理 : 在 catch() 后的代碼塊中編寫異常處理代碼 ;
2. 異常處理代碼示例 :
// 2. 捕獲異常對象// 其中調用 exception 的 what() 方法即可獲得異常信息// 可以獲取異常信息 , 即構造函數中傳入的字符串try{throwException();}catch (exception &e){cout << " 捕獲了異常對象 " << e.what() << endl;}II 字符串異常
1. 拋出字符串 : 調用 " throw 字符串 " , 可以拋出一個異常 , 異常信息就是該字符串內容 ;
//拋出字符串異常的方法 void throwString() {throw "throwStringException 拋出異常字符串"; }2. 捕獲字符串異常 : 捕獲拋出的字符串異常 , 在 catch 后的括號中捕獲 const char* c 類型的異常 ;
- 捕獲異常類型 : const char* c
3. 代碼執行結果 :
捕獲了字符串異常 throwStringException 拋出異常字符串III 異常對象
C++ 中可以拋出任意一個對象 ;
1. 拋出對象 : 調用 " throw exception( 字符串 ) " , 調用 exception 構造方法 , 傳入異常信息字符串 ;
//拋出任意類型對象異常的方法 void throwException() {throw exception("throwException 拋出異常對象"); }2. 捕獲并處理異常對象 :
- 捕獲異常類型 : const char* c
- 捕獲異常對象 : 捕獲使用 exception 構造方法創建的異常 , 需要在 catch 后的括號中注明異常的類型 exception &e ;
- 獲取異常信息 : 調用異常的 what() 方法 , 可以獲取異常信息 , 即構造函數中傳入的字符串 ;
3. 代碼執行結果 :
捕獲了異常對象 throwException 拋出異常對象IV 拋出任意類型對象
1 . 拋出任意類型對象 : 這里拋出一個 Child 對象 , 調用 Child 類的構造方法 , 創建對象并拋出 ;
//拋出任意類型對象異常的方法 void throwChildObject() {throw Child(); }2 . 捕獲任意對象并處理 : 捕獲拋出的對象類型 , 注意要捕獲引用類型 , 因為拋出的是對象類型 , 不是指針 ;
- 捕獲異常類型 : Child& child
3 . 代碼執行結果 :
捕獲了 Child 異常對象 , 調用其方法 :子類方法V 自定義異常
1. 自定義異常 : 自定義類 , 繼承 exception 類 , 繼承使用 " : " 符號表示 , 注意這里的繼承作用于應使用 public , 否則將無法訪問父類的方法 ;
//自定義異常 class MyException : public exception { public :virtual char const* what() const {return "自定義異常 MyException what 異常信息";} };2. 拋出異常 : 調用自定義異常的構造函數 , 將異常拋出 ;
//拋出自定義異常 void throwMyException() {throw MyException(); }3. 異常捕獲處理 :
- 捕獲異常類型 : MyException& my
4. 代碼執行結果 :
捕獲了 自定義 MyException 異常對象 : 自定義異常 MyException what 異常信息VI 異常相關代碼
定義 拋出異常的方法 和 自定義異常類 :
//拋出字符串異常的方法 void throwString() {throw "throwStringException 拋出異常字符串"; }//拋出任意類型對象異常的方法 void throwException() {throw exception("throwException 拋出異常對象"); }//拋出任意類型對象異常的方法 void throwChildObject() {throw Child(); }//自定義異常 class MyException : public exception { public :virtual char const* what() const {return "自定義異常 MyException what 異常信息";} };//拋出自定義異常 void throwMyException() {throw MyException(); }捕獲處理異常代碼 :
// X . 異常// 1. 捕獲字符串異常try{throwString();}catch (const char* c){cout << " 捕獲了字符串異常 " << c << endl;}// 2. 捕獲異常對象// 其中調用 exception 的 what() 方法即可獲得異常信息// 可以獲取異常信息 , 即構造函數中傳入的字符串try{throwException();}catch (exception &e){cout << " 捕獲了異常對象 " << e.what() << endl;}// 3. 拋出任意對象// 捕獲該對象 , 并執行其中的方法try{throwChildObject();}catch (Child& child){cout << " 捕獲了 Child 異常對象 , 調用其方法 : " << endl;child.function();}// 4. 拋出自定義異常// 捕獲該對象 , 并執行其中的方法try{throwMyException();}catch (MyException& my){cout << " 捕獲了 自定義 MyException 異常對象 : " << my.what() << endl;}執行結果 :
捕獲了字符串異常 throwStringException 拋出異常字符串捕獲了異常對象 throwException 拋出異常對象捕獲了 Child 異常對象 , 調用其方法 :子類方法捕獲了 自定義 MyException 異常對象 : 自定義異常 MyException what 異常信息總結
以上是生活随笔為你收集整理的【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C++ 语言】类型转换 ( 转换操作符
- 下一篇: 【C++ 语言】文件操作 ( fopen