91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中異常處理的示例分析

發布時間:2021-09-13 16:31:33 來源:億速云 閱讀:127 作者:小新 欄目:開發技術

這篇文章主要介紹C++中異常處理的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

一、背景

程序運行時常會碰到一些異常情況,例如:

  • 做除法的時候除數為 0;

  • 用 new 運算符動態分配空間時,空間不夠導致無法分配;

  • 訪問數組元素時,下標越界;打開文件讀取時,文件不存在。

這些異常情況,如果不能發現并加以處理,很可能會導致程序崩潰。
所謂“處理”,可以是給出錯誤提示信息,然后讓程序沿一條不會出錯的路徑繼續執行;也可能是不得不結束程序,但在結束前做一些必要的工作,如將內存中的數據寫入文件、關閉打開的文件、釋放動態分配的內存空間等。

二、C++ 異常處理

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;
	 }
}

運行結果

C++中異常處理的示例分析

也可以自己定義異常類來進行處理:

#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;
}

C++中異常處理的示例分析

三、拋出異常與捕獲異常

可以使用 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;
}

運行結果

C++中異常處理的示例分析

四、catch(...)的作用

  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++中異常處理的示例分析

以上是“C++中異常處理的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

定日县| 且末县| 榕江县| 手游| 新丰县| 临颍县| 塘沽区| 上思县| 财经| 石台县| 曲阜市| 桃园市| 万盛区| 井陉县| 桦川县| 万山特区| 子长县| 临朐县| 晋江市| 新巴尔虎右旗| 平舆县| 镇赉县| 崇信县| 邮箱| 水城县| 仙游县| 汶川县| 阆中市| 黄冈市| 昌图县| 巫山县| 乡宁县| 揭阳市| 广灵县| 靖江市| 筠连县| 东乌| 宁安市| 滕州市| 泸定县| 屏东县|