1
MFC異常
MFC
較好地將異常封裝到CException類及其派生類中,自成體系,下表給出了MFC 提供的預(yù)定義異常:
異常類
|
含義
|
CMemoryException
|
內(nèi)存不足
|
CFileException
|
文件異常
|
CArchiveException
|
存檔/序列化異常
|
CNotSupportedException
|
響應(yīng)對(duì)不支持服務(wù)的請求
|
CResourceException
|
Windows
資源分配異常
|
CDaoException
|
數(shù)據(jù)庫異常(DAO 類)
|
CDBException
|
數(shù)據(jù)庫異常(ODBC 類)
|
COleException
|
OLE
異常
|
COleDispatchException
|
調(diào)度(自動(dòng)化)異常
|
CUserException
|
用消息框警告用戶然后引發(fā)一般 CException 的異常
|
?2 標(biāo)準(zhǔn)異常
下面給出了C++提供的一些標(biāo)準(zhǔn)異常:
namespace std
{
??? //exception
派生
??? class logic_error; //
邏輯錯(cuò)誤,在程序運(yùn)行前可以檢測出來
???
??? //logic_error
派生
??? class domain_error; //
違反了前置條件
??? class invalid_argument; //
指出函數(shù)的一個(gè)無效參數(shù)
??? class length_error; //
指出有一個(gè)超過類型size_t的最大可表現(xiàn)值長度的對(duì)象的企圖
??? class out_of_range; //
參數(shù)越界
??? class bad_cast; //
在運(yùn)行時(shí)類型識(shí)別中有一個(gè)無效的dynamic_cast表達(dá)式
??? class bad_typeid; //
報(bào)告在表達(dá)試typeid(*p)中有一個(gè)空指針p
???
??? //exception
派生
??? class runtime_error; //
運(yùn)行時(shí)錯(cuò)誤,僅在程序運(yùn)行中檢測到
???
??? //runtime_error
派生
??? class range_error; //
違反后置條件
??? class overflow_error; //
報(bào)告一個(gè)算術(shù)溢出
??? class bad_alloc; //
存儲(chǔ)分配錯(cuò)誤
}
請注意觀察上述類的層次結(jié)構(gòu),可以看出,標(biāo)準(zhǔn)異常都派生自一個(gè)公共的基類exception。基類包含必要的多態(tài)性函數(shù)提供異常描述,可以被重載。下面是exception類的原型:
class exception
{
public:
??? exception() throw();
??? exception(const exception& rhs) throw();
??? exception& operator=(const exception& rhs) throw();
??? virtual ~exception() throw();
??? virtual const char *what() const throw();
};
其中的一個(gè)重要函數(shù)為what(),它返回一個(gè)表示異常的字符串指針。