C 基礎學習第十五課 異常處理

2021-10-22 03:42:55 字數 2291 閱讀 2931

10,異常處理

1,定義:

異常處理就是處理程式中的錯誤;

2,基本思想:

讓乙個函式在發現了自己無法處理的錯誤時,丟擲(throw)乙個異常,然後它的(直接或間接)呼叫者可以吹這個問題;------即將問題檢測和問題處理分離;

3,異常基本語法

1,丟擲異常使用throw;

2,捕獲異常使用try{}catch(){};

throw:當問題出現時,程式會丟擲乙個異常;

catch:在你想要處理問題的地方,通過異常處理程式捕獲異常;

try:try塊中的**標識將被啟用的特定異常,它後面通常跟著乙個或多個catch塊;

noexcept:用於宣告函式不丟擲異常,如果函式丟擲了異常,則直接中斷,不能**獲;

3,語法:

try

catch(exceptionname e1)//exceptionname是設定丟擲異常時,資料的型別;

catch(exceptionname e2)

4,捕獲異常時的注意事項:

1,catch的匹配過程是找最先匹配的,從上到下;

2,catch的匹配過程中,對型別的要求比較嚴格,不允許標準算術轉換和類型別的轉換;

(類型別的轉換包括兩種:通過建構函式的隱式型別轉換,和通過轉換操作符的型別轉換);

案例:

void n()

int nnm = 5 / res;

}try

catch (const char* n)

maker(const maker& other)

~maker()

};void fff()

int main()

catch (int d)

//輸出建構函式 析構函式

return 0;

}

6,c++標準的異常

c++提供了一系列標準的異常,定義在中,我們可以在程式中使用這些標準的異常,它們是以父子類層次結構組織起來的;

每個類所在的標頭檔案在圖下方標識出來:

標準異常類的成員:

1,在上述繼承體系中,每個類都有提供了建構函式,複製建構函式,和賦值操作符過載;

2,logic_error類及其子類,runtime_error類及其子類,它們的建構函式是接受乙個string型別的形式引數,用於異常資訊的描述;

3,所有的異常類都有乙個what()方法,返回const char* 型別(c風格字串)的值,描述異常資訊;

說明:異常

描述std::exception

該異常是所有標準c++異常的父類;

std::bad_alloc

該異常可以通過new丟擲;

std::bad_cast

該異常可以通過dynamic_cast丟擲;

std::bad_exception

這在處理c++程式中無法預期的異常時非常有用;

std::bad_typeid

該異常可以通過typeid丟擲;

std::logic_error

理論上可以通過讀取**來檢測到的異常;

std::domain_error

當使用了乙個無效的數學域時,會丟擲該異常;

std::invaild_argument

當使用了無效的引數時,會丟擲該異常;

std::length_error

當建立了太長的std::string時,會丟擲該異常;

std::out_of_range

該異常可以通過方法丟擲,例如:std::vector和std::bitset<>::operator ();

std::runtime_error

理論上不可以通過讀取**來檢測到的異常;

std::overflow_error

當發生數學上溢時,會丟擲該異常;

std::range_error

當嘗試儲存超出範圍的值時,會丟擲該異常;

std::underflow_error

當發生數學下溢時,會丟擲該異常;

7,編寫自己的異常類

class out_range:public exception//繼承父類異常

//第一種方法:

explicit out_range(const char*_msg):exception(_msg){}//第二種方法:

}...

void fun()

catch(out_range& e)

第十五課 Map補充,異常,執行緒

常用的迭代方式 set entryset key value封裝成entry set keyset 遍歷key collection values 遍歷value hashmap key無序,並且不重複 hashset 就是value一樣的 hashmap treemap key排好序的 linke...

IO流第十五課,總結

一 步驟 建立檔案源,也就是路徑 選擇輸入 輸出流 操作 讀取 寫出 釋放資源 二 流 節點流 離資料源程式最近的流 1 節點流 可以處理一切檔案的複製 拷貝 1 輸入流 inputstream fileinputstream bytearrayinputstream 操作 read 位元組陣列 中...

第十五課 儲存與狀態

1.v0 v0 vi v 0 1 e t rc 電容真正儲存的是電荷,但對於乙個線性電容來說,它儲存的也是電壓,稱其為state。狀態 將來所需的所有輸入的彙總 電容的狀態就是電壓 vi 在零時刻以前的值無關緊要 電容電壓的未來值 是 電容初始狀態和未來時間輸入變化 的函式 vc t f vc 0 ...