深入了解C++異常處理_第1頁(yè)
深入了解C++異常處理_第2頁(yè)
深入了解C++異常處理_第3頁(yè)
深入了解C++異常處理_第4頁(yè)
深入了解C++異常處理_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論