1
MFC異常
MFC
較好地將異常封裝到CException類及其派生類中,自成體系,下表給出了MFC 提供的預定義異常:
異常類
|
含義
|
CMemoryException
|
內存不足
|
CFileException
|
文件異常
|
CArchiveException
|
存檔/序列化異常
|
CNotSupportedException
|
響應對不支持服務的請求
|
CResourceException
|
Windows
資源分配異常
|
CDaoException
|
數據庫異常(DAO 類)
|
CDBException
|
數據庫異常(ODBC 類)
|
COleException
|
OLE
異常
|
COleDispatchException
|
調度(自動化)異常
|
CUserException
|
用消息框警告用戶然后引發一般 CException 的異常
|
?2 標準異常
下面給出了C++提供的一些標準異常:
namespace std
{
??? //exception
派生
??? class logic_error; //
邏輯錯誤,在程序運行前可以檢測出來
???
??? //logic_error
派生
??? class domain_error; //
違反了前置條件
??? class invalid_argument; //
指出函數的一個無效參數
??? class length_error; //
指出有一個超過類型size_t的最大可表現值長度的對象的企圖
??? class out_of_range; //
參數越界
??? class bad_cast; //
在運行時類型識別中有一個無效的dynamic_cast表達式
??? class bad_typeid; //
報告在表達試typeid(*p)中有一個空指針p
???
??? //exception
派生
??? class runtime_error; //
運行時錯誤,僅在程序運行中檢測到
???
??? //runtime_error
派生
??? class range_error; //
違反后置條件
??? class overflow_error; //
報告一個算術溢出
??? class bad_alloc; //
存儲分配錯誤
}
請注意觀察上述類的層次結構,可以看出,標準異常都派生自一個公共的基類exception?;惏匾亩鄳B性函數提供異常描述,可以被重載。下面是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();
};
其中的一個重要函數為what(),它返回一個表示異常的字符串指針。