目錄
異常處理機制:暫緩問題處理,不在當前函式中處理,在他的呼叫者中處理(先上車,後補票)
什麼是異常:任何東西都可以認為是異常,錯誤只是異常的一種
異常一旦被丟擲,不做處理,如果引發異常,會呼叫預設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的編譯器下會編譯通過,因為在編...