聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

【干貨】C++異常處理的三種工具

來源:CSDN 時間:2023-03-14 08:52:37

程序運行時有時會遇到錯誤,導致程序無法正常運行下去,通常程序員會試圖預防這種意外。C++異常為處理這種情況提供了一種功能強大而靈活的工具。這里僅介紹三種:

調用abort()函數異常機制exception 類


(資料圖)

一、調用abort()函數

abort()函數的原型位于頭文件cstdlib(或stdlib.h)中,其典型實現是向標準錯誤流(即cerr使用的錯誤流)發送 abnormal program termination(程序異常終止),然后終止程序。調用Abort()時,不進行任何清理工作,直接終止程序。

示例程序1

#include"iostream"#include"cstdlib"using namespace std;double hmean(double a, double b);int main(){double x, y, z;cout << "Enter two numbers:";while (cin >> x >> y){z = hmean(x, y);cout << "Harmonic mean of" << x << "and" << y << "is" << z << endl;cout << "Enter next set of numbers:";}cout << "end" << endl;system("pause");return 0;}double hmean(double a, double b){if (a == -b){cout << "unenable arguments to hmean()" << endl;abort();}return 2.0*a*b / (a + b);}

二、異常機制

C++異常是對程序運行過程中發生的異常情況的一種響應。異常提供了將控制權從程序的一個部分傳遞到另一部分的途徑。對異常的處理有3個組成部分:

1.引發異常;

2.使用處理程序捕獲異常;

3.使用try塊。

C++異常處理的格式

try{   //標識可能出現的異常代碼段   throw  拋出一個異常} catch {  //異常處理程序的類型}

try塊標識其中特定的異??赡鼙患せ畹拇a塊,它后面跟一個或多個catch塊。throw語句實際是跳轉,即命令程序跳轉到另一條語句。Throw關鍵字表示引發異常,緊跟后面的值(例如字符串或對象),指出異常特征。Thow語句類似執行返回語句,因為他將終止函數的執行;但throw不是將控制權返回給調用程序,而是導致程序沿函數調用順序后退,直到找到包含try塊的函數。如果函數引發異常,而沒有try塊或沒有匹配的處理函數,程序最終降調用abort()函數。 示例程序2

#include"iostream"#include"cstdlib"using namespace std;double hmean(double a, double b);int main(){double x, y, z;cout << "Enter two numbers:";while (cin >> x >> y){ try{ z = hmean(x, y); }catch (const char *s){cout << s<< endl;//cout << "Harmonic mean of" << x << "and" << y << "is" << z << endl;cout << "Enter next set of numbers:";continue;}cout << "Harmonic mean of" << x << "and" << y << "is" << z << endl;cout << "Enter next set of numbers:";}cout << "end" << endl;system("pause");return 0; }double hmean(double a, double b){if (a == -b){throw "unenable arguments to hmean()" ;}return 2.0*a*b / (a + b);}

三、exception 類

較新的C++編譯器將異常合并到語言中,例如,為支持該語言,exception頭文件(以前為exception.h或except.h)定義了exception類,C++可以把它作為其他異類的基類。代碼可以引發exception異常,也可以將exception類作為基類,有一個名為what()的虛擬成員函數,他返回一個字符串,該字符串的特征隨實現而異。然而,由于這是一個虛方法,因此可以在從exception派生而來的類中重新定義它。C++庫定義了很多基于exception的異常類型。

示例程序3

#include"iostream"using namespace std;class nn_error : public std::exception {public:explicit nn_error(const std::string& msg) : msg_(msg) {}const char* what() const throw() override { return msg_.c_str(); }private:std::string msg_;};double hmean(double a, double b);int main(){double x, y, z;cout << "Enter two numbers:";while (cin >> x >> y){try{ z = hmean(x, y); }catch (const nn_error& e){cout << e.what() << endl;//cout << "Harmonic mean of" << x << "and" << y << "is" << z << endl;cout << "Enter next set of numbers:";continue;}cout << "Harmonic mean of" << x << "and" << y << "is" << z << endl;cout << "Enter next set of numbers:";}cout << "end" << endl;system("pause");return 0;}double hmean(double a, double b){if (a == -b){throw nn_error("unenable arguments to hmean()");}return 2.0*a*b / (a + b);}

更多資源:http://blog.csdn.net/zhy_cheng/article/details/8217896

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 岛国精品在线