在程式執行時,可能會有一些隱藏的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就是被額外新增進來的。對於這個結構體我們稍後解釋,首先來介紹函式的基本結構。從這張圖中可以清...