C 異常處理(二)

2021-06-26 03:59:18 字數 1409 閱讀 7297

1. 標準異常

c++標準庫中定義一組類,用於報告在標準庫中的函式遇到的問題。程式設計師以在自己編寫的程式中使用這些標準異常類。標準庫異常類定義在四個標頭檔案中:

①exception標頭檔案中定義了最常見的異常類,類名是exception,這個類只通知異常的產生,不會提供更多的資訊

②stdexcept標頭檔案中定義了以下幾個異常類:runtime_error, range_error, overflow_error, underflow_error,logic_error, domain_error, invalid_argument, length_error, out_of_range

③new標頭檔案中定義了bad_alloc異常型別

④type_info標頭檔案中定義了bad_cast異常型別

從這幅圖中我們也可以看到exception為基類,因此在寫catch子句時候必須反映類的層次性。例如

try

catch(overflow_error const &eobj)

catch(runtime_error const &re)

catch(exception const &e)

這裡overflow_error類繼承runtime_error類,runtime_error類繼承exception類,在使用來自繼承層次的異常時,catch子句應該從最低派生型別到最到派生型別排序,以便派生型別的處理**出現在其基類型別的catch之前。

class exception

;

exception 型別所定義的唯一操作是乙個名為what 的虛成員,該函式返回const char* 物件,它一般返回用來在丟擲位置構造異常物件的資訊。因為 what是虛函式,如果捕獲了基類型別引用,對 what 函式的呼叫將執行適合異常物件的動態型別的版本。

2.呼叫new失敗了怎麼辦?

無論您是否相信,即使有乙個非常龐大的儲存器和非常複雜的作業系統,而可以作為空閒的儲存空間的儲存單元總是很有限的。因此,在使用new時程式可能會超過這個空閒的儲存空間。如果確實發生了這種情況,那麼operatornew()的呼叫將會丟擲乙個std::bad_alloc 型別的異常,它是乙個在標頭檔案new 中定義的類。因此我們可捕獲這一異常。

#include "stdafx.h"

#include using namespace std;

int _tmain(int argc, _tchar* argv)

catch(std::bad_alloc const &ba)// 捕獲丟擲的異常

else

{ cout<

異常處理(二 C語言的異常處理)

1 異常終止 標準c庫提供了abort 和exit 兩個函式,它們可以強行終止程式的執行,其宣告處於 標頭檔案中。這兩個函式本身不能檢測異常,但在c程式發生異常後經常使用這兩個函式進行程式終止。下面的這個例子描述了exit 的行為 code include include int main void...

C 異常處理習題(題二)

二。設計乙個直線類line 設直線方程為ax by c 0 其中包含三個資料成員a,b,c,乙個顯示資料成員的disp成員函式 和乙個求兩直線交點的友元函式setpoint,要求考慮當兩直線平行或交點座標的絕對值大於等於10 8時,可丟擲異常資訊,並進行相應的處理。實現 如下 include inc...

異常簡述 二 C 的異常處理機制

上文簡述了在c語言中異常的處理機制,本文主要講解c 中的異常處理.在c 中,異常的丟擲和處理主要使用了以下三個關鍵字 try throw catch.其格式如下 當我們在程式中想丟擲乙個異常時,可以這樣 1 2 3 4 5 6 7 8 9 include include usingnamespace...