C++學(xué)習(xí)筆記之淺談異常處理
異常處理主要是針對(duì)能通過編譯但是運(yùn)行是在某個(gè)特定條件下會(huì)出現(xiàn)異常,程序崩潰,結(jié)果出錯(cuò)。來進(jìn)行的東西
C++處理異常的機(jī)制是由3個(gè)部分組成的,即檢查(try)、拋出(throw)和捕捉(catch)。把需要檢查的語句放在try塊中,throw用來當(dāng)出現(xiàn)異常時(shí)發(fā)出一個(gè)異常信息,而catch則用來捕捉異常信息,如果捕捉到了異常信息,就處理它。
try {被檢查的語句}
catch(異常信息類型 [變量名])
{進(jìn)行異常處理的語句}
粘一個(gè)簡單的異常處理的題:
如果三角形滿足三角形內(nèi)角和大于第三邊才會(huì)有輸出,否則進(jìn)行異常處理。
#include<iostream>
using namespace std;
int main()
{
double triangler(double a, double b, double c);
{
double a, b, c;
cin >> a >> b >> c;
try //在try塊中包含要檢查的函數(shù)
{
while (a > 0 && b > 0 && &c > 0)
{
cout << triangler(a, b, c) << endl;
cin >> a >> b >> c;
}
}
//catch (double) //只能拋出對(duì)應(yīng)類型的異常
//{
// {cout << "a=" << a << ",b=" << b << ",c=" << c << ",that is not a triangler!" << endl; }
// cout << "end" << endl;
//}
catch (...) //”...“代表可以拋出任何類型的異常
{
{cout << "a=" << a << ",b=" << b << ",c=" << c << ",that is not a triangler! it is all typical!" << endl; }
cout << "end" << endl;
}
}
}
double triangler(double a, double b, double c)
{
double s = (a + b + c) / 2;
if (a + b <= c || a + c <= b || b + c <= a) throw a; //拋出異常對(duì)象
return sqrt(s * (s - a) * (s - b) * (s - c));
}

1.在主函數(shù)中添加需要檢查的語句或者程序段到try語句下;如果運(yùn)行到try區(qū)域出現(xiàn)異常 則會(huì)拋出一個(gè)throw,然后返回上一級(jí)程序。在進(jìn)行異常處理后,程序并不會(huì)自動(dòng)終止,繼續(xù)執(zhí)行catch子句后面的語句。若是沒有發(fā)現(xiàn)異常,直接跳到catch以后的程序
2.throw拋出的數(shù)據(jù)類型又人們自己來定義,catch(后的括號(hào)有什么數(shù)據(jù)類型則會(huì)檢查什么數(shù)據(jù)類型的錯(cuò)誤),如果比較懶的花括號(hào)里寫三個(gè)點(diǎn)(...)代表所有類型
3.try catch結(jié)構(gòu)可以與throw不在一起,甚至不在一個(gè)函數(shù)里。如果throw出一個(gè)異常,throw 會(huì)首先在本函數(shù)里找try catch函數(shù)如果找不到則會(huì)采取就近原則。
4.可以單獨(dú)出現(xiàn)try,但不能單獨(dú)出現(xiàn)catch
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
c++調(diào)用動(dòng)態(tài)庫LNK2019和LNK1120無法解析的外部命令
本文主要介紹了c++調(diào)用動(dòng)態(tài)庫LNK2019和LNK1120無法解析的外部命令, 出現(xiàn)這個(gè)錯(cuò)誤一般都是函數(shù)只找到聲明但沒有實(shí)現(xiàn),或者是少了什么鏈接庫,下面就來解決一下2024-06-06
C++運(yùn)算符重載實(shí)例代碼詳解(調(diào)試環(huán)境 Visual Studio 2019)
這篇文章主要介紹了C++運(yùn)算符重載實(shí)例(調(diào)試環(huán)境 Visual Studio 2019),本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
C++實(shí)現(xiàn)LeetCode(190.顛倒二進(jìn)制位)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(190.顛倒二進(jìn)制位),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
C語言控制臺(tái)實(shí)現(xiàn)打飛機(jī)小游戲
這篇文章主要為大家詳細(xì)介紹了C語言控制臺(tái)實(shí)現(xiàn)打飛機(jī)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
c語言中的局部跳轉(zhuǎn)及全局跳轉(zhuǎn)功能
本文介紹了C語言中的goto語句,以及如何使用setjmp和longjmp實(shí)現(xiàn)跨函數(shù)的跳轉(zhuǎn),詳細(xì)講解了setjmp和longjmp的使用方法和注意事項(xiàng),以及使用這種全局跳轉(zhuǎn)后變量狀態(tài)的不確定性,感興趣的朋友一起看看吧2024-09-09
C++ virtual destructor虛擬析構(gòu)函數(shù)
C++中基類采用virtual虛析構(gòu)函數(shù)是為了防止內(nèi)存泄漏。具體地說,如果派生類中申請(qǐng)了內(nèi)存空間,并在其析構(gòu)函數(shù)中對(duì)這些內(nèi)存空間進(jìn)行釋放,今天通過本文給大家介紹C++ virtual destructor虛擬析構(gòu)函數(shù)的相關(guān)知識(shí),感興趣的朋友一起看看吧2021-05-05

