深入了解C 異常處理

2022-09-21 08:36:10 字數 2672 閱讀 3376

目錄

異常處理機制:暫緩問題處理,不在當前函式中處理,在他的呼叫者中處理(先上車,後補票)

什麼是異常:任何東西都可以認為是異常,錯誤只是異常的一種

異常一旦被丟擲,不做處理,如果引發異常,會呼叫預設abort函式終止程式

捕獲和處理異常:

throw 丟擲異常: (值是任何型別都可以,只是我們處理異常的乙個參照,類似返回值)

try(檢查,捕獲)和catch(處理異常): 必須是一起出現,並且它們的括號不能省略

tip: 任何東西都可以認為是異常,錯誤只是異常中的一種---出現一種情況不能讓程式正常執行

//求a和b的餘數 怎麼丟擲異常

int division(int a,int b)

void print(int a,int b)不能省略

trycatch(型別) //理解為switch中case語句

//乙個try可以對應多個catch

trycatch(int)

catch(double)

catch(string)

//catch和if else_if 執行機制是一樣的,只能執行乙個匹配項

小知識:

int division(int a,int b)

void print(int a,int b)

void printdata() noexcept

任何型別的異常都捕獲 不管丟擲啥,在**丟擲的,只要引發異常都可以捕獲到

catch(...)

int main()

catch (string str) //把throw的內容賦值給str**fgiojcdx str="除數不能為0"

}注意string型別與const char* 型別區別 --- 出現型別不匹配,c++對傳參型別要求更嚴格

int divisor(int a, int b)

int main()

catch (const char* str) //丟擲的是char* 型別,不能當作string

trycatch (string str) //如果要捕獲string型別,需要自己構造乙個string物件返回

}class error

const char* what()const

protected:

string str;};

void insertarray(int array, int* curnum, int posdata,int maxlength)

//0 1 2

array[*curnum] = posdata;程式設計客棧 //array[3]=3

(*curnum)++;}

int main();

int curnum = 0;

for (int i = 0; i < 4; i++)

}catch (error str)

return 0;

}#include //父類(基類)

子類很多,子類描述的問題不同而已

例子: const char* _ptr; 乙個資料成員,用於描述標準庫當中異常的字串,用字元指標存放那個字串

what( )方法 用於返回資料成員的 1.虛函式 2.不存在異常

return _ptr ? _ptr : "unknow";判斷char* 型別的指標是不是為空,不等於空,返回你描述的錯誤,等於空(由於沒有傳參),返回未知錯誤"unknow"

發現**出現abort( )錯誤,可以通過這種方式找到,這裡是針對記憶體申請失敗做了單一處理,如果不做處理,會直接呼叫abort函式終止程式

#include

#include

using namespace std;

class exception

/*建構函式 乾掉

常屬性*/

virtual const char* what() const //父類是虛函式 且不存在異常

protected:

char* ptr;

};//子類繼承父類

class bad_alloc :public exception

/*呼叫父類

的建構函式丟擲bad exception*/

protected:

};//子類繼承父類 呼叫父類建構函式

class run_time :public exception

protected:};

int main()

} catch (bad_alloc& object) /* 記憶體申請失敗,呼叫bad_alloc 標準庫中的異常,建立乙個物件接收一

下,子類中的what()方法呼叫父類中的what()方法列印 */

return 0;

}/*輸出*/

bad allocation //呼叫時丟擲 bad allocation 是子類物件呼叫繼承下來的what()方法

//一般寫**出現莫名的中斷,原因是不做異常處理,引發了abort函式中斷程式,一般這種錯誤都是特殊錯誤

標準庫中傳兩個引數起到標識作用,由於:引發了不同的錯誤,不同錯誤對應了不同的錯誤編碼 對這些錯誤有特定的描述 ---> 工具 ---> 錯誤查詢 ---> 輸入錯誤編碼

值:3錯誤資訊:系統找不到指定的路徑

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...

深入了解C語言

文章內容如下 首先,我們先來看下面這個經典的 int main 從這段 裡你看到了什麼問題?我們都知道,這段程式裡少了乙個 include 還少了乙個return 0 的返回語句。不過,讓我們來深入的學習一下,這段 在c 下無法編譯,因為c 需要明確宣告函式 這段 在c的編譯器下會編譯通過,因為在編...