C primer 十八 將物件用作異常型別

2021-07-25 14:45:35 字數 1121 閱讀 3530

通常,引發異常的函式將傳遞乙個物件。這樣做的重要優點之一是,可以使用不同的異常型別來區分不同的函式在同情況下引發的異常。另外,物件可以攜帶資訊,程式設計師可以根據這些資訊來確定引發異常的原因。同時,catch塊可以根據這些資訊來決定採取什麼樣的措施。例如,下面是針對函式hmean引發的異常而提供的一種設計:

class bad_hmean

void mesg();

};inline void bad_hmean::mesg()

上述**呼叫建構函式bad_hmean(以初始化物件,使其儲存引數值。•

程式清單excmean.h檔案

#include

class bad_hmean

void mesg();

};inline void bad_hmean::mesg()

const char *mesg();

};inline const char * bad_gmean::mesg()

程式清單error.cpp檔案

#include

#include

#include"excmean.h"

double hmean(double a,double b);

double gmean(double a,double b);

int main()

catch(bad_hmean &bg)

catch(bad_gmean &bg)

}std::cout<

return 0;

}double hmean(double a,double b)

return 2.0*a*b/(a+b);

}double gmean(double a,double b)

return std::sqrt(a*b);

}新增了另乙個異常類bad_gmean以及另乙個名為gmean()的函式,該函式引發bad_gmean如異常。函式gmean()計擇兩個數的幾何平均值即乘積的平方根。這個函式要求兩個引數都不為負,如罘引數為負,它將引發異常。

執行結果:

如何將物件用做異常型別

通常,引發異常的函式將傳遞乙個物件。這樣做的重要優點之一是,可以使不同的異常型別來區分不同的函式在不同情況下引發的異常。另外,物件可以攜帶資訊,coders可以根據這些資訊來確定引發異常的原因。同時,catch塊可以根據這些資訊來決定採取什麼樣的措施。示例 如下 exception class.cp...

未將物件引用設定到物件的例項 異常的原因

1 viewstate 物件為null。2 dateset 空。3 sql語句或datebase的原因導致datareader空。4 宣告字串變數時未賦空值就應用變數。5 未用new初始化物件。6 session物件為空。7 對控制項賦文字值時,值不存在 8 使用request.querystrin...

未將物件引用設定到物件的例項 異常的原因

1 viewstate 物件為null。2 dateset 空。3 sql語句或datebase的原因導致datareader空。4 宣告字串變數時未賦空值就應用變數。5 未用new初始化物件。6 session物件為空。7 對控制項賦文字值時,值不存在 8 使用request.querystrin...