MFC异常 与C++标准异常
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。基类包含必要的多态性函数提供异常描述,可以被重载。下面是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(),它返回一个表示异常的字符串指针。