C 中異常機制

2021-08-19 15:00:33 字數 1746 閱讀 9839

在程式執行時,可能會有一些隱藏的bug突然爆發,導致程式崩潰。遇到這樣的情況除錯起來難度較大,因此c++提供了一種異常不住丟擲機制,在不確定安全或者懷疑有重大隱患的**塊前面加上try關鍵字,後面使用catch關鍵字捕捉,如果捕捉到異常,可以在catch**塊中使用throw關鍵字丟擲異常。

用法如下:

try;

catch(異常型別1,異常物件1)

catch(異常型別2,異常物件2)

catch(....)

例如:

#includeusing namespace std;

class a

~a()

};int div(int a, int b)throw(int,char);//宣告了的丟擲型別下面一定要實現捕捉到他的程式,否則預設程式終止

int div(int a,int b)throw(int,char)

if(0==a)

else

}int main()

catch (int)//獲得了錯誤後的處理

catch(char)

return 0;

}

當b=0時try程式段會丟擲int型異常,不論throw與catch之間隔了多少層函式還是巢狀,他丟擲的異常都會被catch接收到而int型異常會被下面的catch(int)接受到並做處理,在處理未完成之前程式就會一直停滯在這個地方,但在c++中基本資料型別雖然只有幾種,但是我們可以建立自己的類來記錄各種各樣的錯誤型別

#includeusing namespace std;

class array

virtual const char *gete() = 0;//獲取錯誤原因的純虛函式

};class enegetive : public error

const char *gete()

};class ezero : public error

const char *gete()//對基類虛函式的重寫

};class etoosmall : public error

const char *gete()

};class etoobig : public error

const char *gete()

};array(int l);//對陣列類的建構函式

int &operator(int index);//陣列下表的過載

~array();

};array::array(int l)

if(l==0)

if(l>0&&l<10)

if(l>10000)

data = new int[length];//如果無措的話進行這一步

}array::~array()

}int &array::operator (int index)

int main()

catch(array::enegetive &e)

catch (array::ezero &e)

catch (array::etoosmall &e)

catch (array::etoobig &e)

return 0;

}

在c++中出了可以自己定義新的資料型別用來儲存錯誤型別,還可以使用他提供的基類exception,在exception中有個純虛what()函式,在繼承他的子類當中都要重寫這個函式

virtual const char* what()const throw();

c 中的異常機制

throw 拋,在出錯的地方丟擲異常資訊。try 嘗試捕獲throw丟擲的異常資訊。catch 有個引數用來接收捕獲的異常資訊 引數型別需和丟擲的錯誤資訊型別保持一致 catch 捕獲所有異常資訊 include using namespace std int divide int numone,i...

C 異常 異常機制

c 異常是丟程式執行過程中發生的異常情況 例如被0除 的一種響應。異常提供了將控制權從程式的乙個部分傳遞到另一部分的途徑。對異常的處理有3個組成部分 引發異常 使用處理程式捕獲異常 使用try塊。程式在出現問題時將引發異常。throw語句實際上是跳轉,即命令程式跳到另一條語句。throw關鍵字表示引...

C 異常機制

在c 中的函式呼叫中,是用棧來存放其中資料物件。表1.1 我們結合這張表,來簡單介紹函式的棧結構。其中每乙個函式在入棧的時候,編譯器會自動新增額外的資料結構,這裡的exception registration就是被額外新增進來的。對於這個結構體我們稍後解釋,首先來介紹函式的基本結構。從這張圖中可以清...