日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 异常,标准异常类,自定义异常类,throw,try,catch语句

發布時間:2023/12/10 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 异常,标准异常类,自定义异常类,throw,try,catch语句 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要學習異常,首先就要學習throw和try,catch語句:

C++中try catch語句用法有非常靈活,有許多種組合;

這里簡單介紹以下最基本的用法;

1. 格式

try{ ... } catch{ ... }

try語句塊是用來判斷是否有異常;

catch語句塊捕捉異常,并進行處理;

throw是拋出異常;

2. 實例

?

首先通過一個簡單的例子來熟悉C++ 的?try/catch/throw(可根據單步調試來熟悉,try catch throw部分是如何運行的):

#include <iostream> #include <exception> using namespace std; int main () { try { throw 1; throw "error"; } catch(char *str) { cout << str << endl; } catch(int i) { cout << i << endl; } } #include <stdlib.h> #include "iostream" using namespace std;double fuc(double x, double y) //定義函數 {if(y==0){throw y; //除數為0,拋出異常}return x/y; //否則返回兩個數的商 }int _tmain(int argc, _TCHAR* argv[]) {double res;try //定義異常{res=fuc(2,3);cout<<"The result of x/y is : "<<res<<endl;res=fuc(4,0); //出現異常}catch(double) //捕獲并處理異常{cerr<<"error of dividing zero.\n";exit(1); //異常退出程序}return 0; }

?

?

【注】:catch 的數據類型需要與throw出來的數據類型相匹配的。

catch(…)能夠捕獲多種數據類型的異常對象,所以它提供給程序員一種對異常對象更好的控制手段,使開發的軟件系統有很好的可靠性。因此一個比較有經驗的程序員通常會這樣組織編寫它的代碼模塊,如下:

void Func() {try{// 這里的程序代碼完成真正復雜的計算工作,這些代碼在執行過程中// 有可能拋出DataType1、DataType2和DataType3類型的異常對象。}catch(DataType1& d1){}catch(DataType2& d2){}catch(DataType3& d3){}/*********************************************************注意上面try block中可能拋出的DataType1、DataType2和DataType3三種類型的異常對象在前面都已經有對應的catch block來處理。但為什么還要在最后再定義一個catch(…) block呢?這就是為了有更好的安全性和可靠性,避免上面的try block拋出了其它未考慮到的異常對象時導致的程序出現意外崩潰的嚴重后果,而且這在用VC開發的系統上更特別有效,因為catch(…)能捕獲系統出現的異常,而系統異常往往令程序員頭痛了,現在系統一般都比較復雜,而且由很多人共同開發,一不小心就會導致一個指針變量指向了其它非法區域,結果意外災難不幸發生了。catch(…)為這種潛在的隱患提供了一種有效的補救措施。*********************************************************/catch(…){} }

自定義異常類:

#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; } //標準異常類 #include<iostream>//頭文件 #include<stdExcept> using namespace std;/* 標準異常類體系如下: 縮進層次表示繼承關系 exception #include <exception>runtime_error #include <stdexcept>overflow_errorunderflow_errorrange_errorlogic_error #include <stdexcept>invalid_argumentlength_errorout_of_rangedomain_errorbad_alloc <new>bad_exceptionbad_cast <typeinfo>bad_typeid <typeinfo> 它們都是類。需要引用的頭文件已經標注。沒有標的,那么它的頭文件就是上一層的頭文件。 *///自定義異常類,繼承自exception class myException :public exception { public:myException(char* c){m_p = c;}//what()函數返回錯誤信息virtual char* what(){cout << "異常類型為 myException: "<< m_p << endl;return m_p;} private:char *m_p; };void test_func() {throw myException("出錯啦!");//throw bad_alloc(); } int main() {try{test_func();}catch (myException& e){e.what();}catch (bad_alloc& e){e.what();}catch (...){cout << "Unknown Error" << endl;}system("pause");return 0; }

?

參考資料:

https://www.cnblogs.com/MrYuan/p/4800257.html

https://blog.csdn.net/misayaaaaa/article/details/90108912

總結

以上是生活随笔為你收集整理的C++ 异常,标准异常类,自定义异常类,throw,try,catch语句的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。