




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第深入了解C++異常處理//某個(gè)函數(shù)不存在異常,在某個(gè)函數(shù)后面用throw()描述,表示它不存在異常
voidprint()throw()
cout"當(dāng)前函數(shù)不存在拋出異常操作"endl;
voidprintData()noexcept
cout"c++新標(biāo)準(zhǔn)中的關(guān)鍵字:不存在拋出異常操作"endl;
//throw0;一旦說明沒有異常操作,就不能拋出
}
刪減符...
任何類型的異常都捕獲
不管拋出啥,在哪里拋出的,只要引發(fā)異常都可以捕獲到
catch(...)
cout"捕獲任何類型的異常"endl;
}
異常處理中的傳參操作
---可以寫一個(gè)變量進(jìn)去
catch(inta)/*隱藏了一個(gè)傳參操作可以傳任何類型,包括自定義類型都可以*/
注意c++中string的處理
/*string類型與constchar*類型區(qū)別*/
代碼解析:
對(duì)
通過拋出字符串,隱藏了一個(gè)傳參操作
的理解
intdivisor(inta,intb)
if(b==0)
throwstring("除數(shù)不能為0");
returna/b;
intmain()
divisor(1,0);
catch(stringstr)//把throw的內(nèi)容賦值給strstr="除數(shù)不能為0"
coutstrendl;
}
注意string類型與constchar*類型區(qū)別
---出現(xiàn)類型不匹配,c++對(duì)傳參類型要求更嚴(yán)格
intdivisor(inta,intb)
if(b==0)
throw"除數(shù)不能為0";//拋出異常解析為char*類型寫catch時(shí)不能直接當(dāng)作string
if(b==1)
throw"除數(shù)不能為1";/*不同問題的拋出,不能用固定類型(int、char...),可以選擇
拋出不同字符串處理string1,string2,string3...通過傳
參的方式去描述問題*/
if(b==2)
throwstring("除數(shù)不能為2");//需構(gòu)造無名參數(shù)作捕獲對(duì)象處理---需要自己觸發(fā)
returna/b;
intmain()
divisor(1,0);//直接觸發(fā)異常
catch(constchar*str)//拋出的是char*類型,不能當(dāng)作string
coutstrendl;
divisor(1,2);
catch(stringstr)//如果要捕獲string類型,需要自己構(gòu)造一個(gè)string對(duì)象返回
coutstrendl;//直接輸出str
}
可以拋出自己類的對(duì)象
classError
public:
Error(constchar*str="未知錯(cuò)誤"):str(str){}
constchar*what()const
returnstr.c_str();
protected:
stringstr;
voidinsertArray(intarray[],int*curNum,intposData,intmaxLength)
if(*curNum=maxLength)//3=3
throwError("數(shù)組下標(biāo)溢出!");
//012
array[*curNum]=posData;//array[3]=3
(*curNum)++;
intmain(){
intarray[3]={0,0,0};
intcurNum=0;
for(inti=0;ii++)
insertArray(array,curNum,i,3);
catch(Errorstr)
coutstr.what()endl;
return0;
}
標(biāo)準(zhǔn)庫(kù)當(dāng)中的異常類
#includeexception//父類(基類)
子類很多,子類描述的問題不同而已
例子:constchar*_ptr;一個(gè)數(shù)據(jù)成員,用于描述標(biāo)準(zhǔn)庫(kù)當(dāng)中異常的字符串,用字符指針存放那個(gè)字符串
what()方法
用于返回?cái)?shù)據(jù)成員的
1.虛函數(shù)
2.不存在異常
return_ptr_ptr:"unknow";判斷char*類型的指針是不是為空,不等于空,返回你描述的錯(cuò)誤,等于空(由于沒有傳參),返回未知錯(cuò)誤"unknow"
引發(fā)標(biāo)準(zhǔn)庫(kù)中內(nèi)存申請(qǐng)失敗的異常
發(fā)現(xiàn)代碼出現(xiàn)abort()錯(cuò)誤,可以通過這種方式找到,這里是針對(duì)內(nèi)存申請(qǐng)失敗做了單一處理,如果不做處理,會(huì)直接調(diào)用abort函數(shù)終止程序
#includeexception
#includeiostream
usingnamespacestd;
classException
public:
Exception(constchar*ptr="UNKNOW"):ptr(const_castchar*(ptr)){}/*構(gòu)造函數(shù)干掉
常屬性*/
virtualconstchar*what()const//父類是虛函數(shù)且不存在異常
returnptr;
protected:
char*ptr;
//子類繼承父類
classBad_alloc:publicException
public:
Bad_alloc(constchar*_Message="badexception"):Exception(_Message){}/*調(diào)用父類
的構(gòu)造函數(shù)拋出badexception*/
protected:
//子類繼承父類調(diào)用父類構(gòu)造函數(shù)
classRun_time:publicException
public:
Run_time(constchar*_Message="run_timeerror"):Exception(_Message){}
protected:
intmain()
try
while(1)
int*p=newint[1024*1024*10];//一直做內(nèi)存申請(qǐng),不做釋放,最后一定會(huì)內(nèi)存申請(qǐng)失敗
catch(bad_allocobject)/*內(nèi)存申請(qǐng)失敗,調(diào)用bad_alloc標(biāo)準(zhǔn)庫(kù)中的異常,創(chuàng)建一個(gè)對(duì)象接收一
下,子類中的what()方法調(diào)用父類中的what()方法打印*/
coutobject.what()endl;
return0;
/*輸出*/
badallocation//調(diào)用時(shí)拋出badallocation是子類對(duì)象調(diào)用繼承下來的what()方法
//一般寫代碼出現(xiàn)莫名的中斷,原因是不做異常處理,引發(fā)了abort函數(shù)中斷程序,一般這種錯(cuò)誤都是特殊錯(cuò)誤
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療數(shù)據(jù)新紀(jì)元醫(yī)療信息共享平臺(tái)的建設(shè)與隱私保護(hù)
- 醫(yī)療行業(yè)運(yùn)維知識(shí)庫(kù)的大數(shù)據(jù)應(yīng)用前景
- 親子拓展心得體會(huì)模版
- 醫(yī)療大數(shù)據(jù)在診斷中的創(chuàng)新應(yīng)用
- 辦公室健康的守護(hù)者-精準(zhǔn)醫(yī)療嵌入式辦公技術(shù)
- 醫(yī)療團(tuán)隊(duì)在數(shù)字化時(shí)代的轉(zhuǎn)型發(fā)展
- 2025年幼兒園后勤工作總結(jié)模版
- 代加工月餅合同樣本
- 醫(yī)療設(shè)備追溯的區(qū)塊鏈技術(shù)應(yīng)用案例
- 傳媒公司拍攝合同標(biāo)準(zhǔn)文本
- GB/T 37507-2025項(xiàng)目、項(xiàng)目群和項(xiàng)目組合管理項(xiàng)目管理指南
- 2025年郵政社招筆試試題及答案
- 2025年保密觀知識(shí)測(cè)試題及答案
- 信用評(píng)級(jí)ppt全套教學(xué)課件
- 2022年煙臺(tái)毓璜頂醫(yī)院醫(yī)護(hù)人員招聘考試筆試題庫(kù)及答案解析
- 抖音認(rèn)證公函(企業(yè)認(rèn)證申請(qǐng)公函)
- 《現(xiàn)代漢語(yǔ)語(yǔ)法》PPT課件(完整版)
- 柜式氣體滅火系統(tǒng)培訓(xùn)
- 用人單位常見用工風(fēng)險(xiǎn)防范與應(yīng)對(duì)培訓(xùn)講義(PPT42張)課件
- 135調(diào)速器操縱手柄設(shè)計(jì)工藝卡片
- 《山東省消防條例》(2022年最新版)[1]
評(píng)論
0/150
提交評(píng)論