通常,引發異常的函式將傳遞乙個物件。這樣做的重要優點之一是,可以使用不同的異常型別來區分不同的函式在同情況下引發的異常。另外,物件可以攜帶資訊,程式設計師可以根據這些資訊來確定引發異常的原因。同時,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...