第十一課C 異常

2021-10-08 04:40:12 字數 1946 閱讀 1808

異常的機制,格式如下:

try//後面可以抓取很多和catch(),編譯器會根據

//引數來進行匹配

catch(char *s)

catch(int a)

catch(…)//表示剩下全部的情況

#include

#include

using

namespace std;

classa;

voidk(

void

)voidkk(

void

)catch

(char a)

//如果是執行throw(10),丟擲的是整形的異常,由於這裡沒有

//捕捉到這個異常,是不會正常往下執行,會繼續往外面丟擲異常

cout<<

"kk程式結束"

<

}int

main()

catch

(int a)

//如果kk丟擲來的異常,main函式沒有對應的型別接住的話,

//程式就執行到此結束了,不會往下執行了。

cout<<

"main程式結束"

總結:1)異常機制與函式機制互不同,異常機制捕捉的方式是基於型別匹配。捕捉相當於函式返回型別的匹配,而不是函式引數的匹配。

2.)丟擲乙個類要加上括號,例如throw(a());

3)如果丟擲乙個異常,但是沒有相應的catch的話,這個異常就會一層一層往外拋,指導main函式為止,如果main函式沒有相應的動作的話,那就直接執行預設處理函式terminate將被自動呼叫,其預設功能是呼叫abort終止程式。

修改系統預設行為:

 可以通過set_terminate函式修改捕捉不住異常的預設處理器,從而使得發生捉不住異常時,被自定義函式處理:

 void myterminate()

 set_terminate(myterminate);

 set_terminate函式在標頭檔案exception中宣告,引數為函式指標void(*)().

棧解旋異常被丟擲後,從進入try塊起,到異常被拋擲前,這期間在棧上的構造的所有物件,都會被自動析構。析構的順序與構造的順序相反。這一過程稱為棧的解旋(unwinding)。

#include

#include

using

namespace std;

classa~

a(void)}

;classb~

b(void)}

;classc~

c(void)}

;voidkk(

void

)int

main()

catch

(c) cout<<

"main程式結束"

1)為了加強程式的可讀性,可以在函式宣告中列出可能丟擲的所有異常型別,例如:

void func() throw (a, b, c , d); //這個函式func()能夠且只能丟擲型別a b c d及其子型別的異常。

2)如果在函式宣告中沒有包含異常介面宣告,則次函式可以拋擲任何型別的異常,例如:

void func();

3)乙個不拋擲任何型別異常的函式可以宣告為:

void func() throw();

4) 如果乙個函式丟擲了它的異常介面宣告所不允許丟擲的異常,unexpected函式會被呼叫,該函式預設行為呼叫terminate函式中止程式。

CoreJava學習第十一課 異常處理

異常是程式執行過程中不正常的情況.1.異常的傳遞方式 異常的傳遞方式 狀態碼方式 包含的資訊有限 可能和正常結果衝突 如果是銀行卡的餘額顯示,則可能和狀態碼衝突 不強制要求處理 分層開發中,有時狀態碼傳遞到中層時,可能會不傳遞或處理 異常物件的方式 通過 throw 手動丟擲異常,相當於 retur...

Linux第十一課

apache 一 虛擬主機 apache可基於ip位址 主機網域名稱 埠號實現提供多個 同時為外部提供訪問服務的技術。使用網域名稱,要在 etc hosts檔案中做本地強制解析 基於埠號,要注意新增用於監聽埠的引數 二 訪問控制 基於源主機名 源ip位址 或源主機上的瀏覽器特徵等資訊對 上的資源繼續...

C 入門第十一課

class player public player string name public player string name,int atk this name public player string name,int atk,int hp this name,atk static void ...