MFC较好地将异常封装到CException类及其派生类中,自成体系,下表给出了MFC 提供的预定义异常:
异常类 含义
CMemoryException 内存不足
CFileException 文件异常
CArchiveException 存档/序列化异常
CNotSupportedException 响应对不支持服务的请求
CResourceException Windows 资源分配异常
CDaoException 数据库异常(DAO 类)
CDBException 数据库异常(ODBC 类)
COleException OLE 异常
COleDispatchException 调度(自动化)异常
CUserException 用消息框警告用户然后引发一般 CException 的异常
标准库异常类
C++标准库异常类定义在四个头文件中:
1) <exception>头文件中定义了异常类exception;
2) <stdexcept>头文件中定义了几种常见的异常类。
3) <new>头文件中定义了bad-alloc异常类。当new无法分配内存时将抛出该异常类对象。
4) <type_info>头文件中定义了bad_cast异常类。当dynamic_cast失败时将抛出该异常类对象。
标准异常类之间的关系:exception派生出runtime_error类、logic_error类、bad_cast类和bad_alloc类。由runtime_error派生出range_error、overflow_error、underflow_error;由logic_error派生出domain_error、invalid_argument、length_error、out_of_range。
exception
|
最常见的问题
|
runtime_error
|
运行时错误:仅在运行时才能检测到的问题
|
range_error
|
运行时错误:生成的结果超出了有意义的值域范围
|
overflow_error
|
运行时错误:计算上溢
|
underflow_error
|
运行时错误:计算下溢
|
logic_error
|
逻辑错误:可在运行前检测到的问题
|
domain_error
|
逻辑错误:域错误
|
invalid_argument
|
逻辑错误:无效参数
|
length_error
|
逻辑错误:试图生成一个超出该类型最大长度的对象
|
out_of_range
|
逻辑错误:使用一个超出有效范围的值
|
注:运行时错误是指在某语句计算过程中产生的错误,逻辑错误是指在某语句执行前检查到的错误。
{
public:
exception(const exception& rhs) throw();
exception& operator=(const exception& rhs) throw();
virtual ~exception() throw();
virtual const char *what() const throw();