MFC异常与C++标准异常

来源:互联网 发布:费洛伊德算法 编辑:程序博客网 时间:2024/05/01 19:11

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
 逻辑错误:使用一个超出有效范围的值


注:运行时错误是指在某语句计算过程中产生的错误,逻辑错误是指在某语句执行前检查到的错误。
 
   exception、bad_alloc、bad_cast类型只定义了默认构造函数,而其它类型则只定义了一个使用string作为参数的构造函数。基类exception提供了一个what()成员函数,其返回const char*类型的C风格字符串。对于以string初始化的异常类,what()将返回该string对应的C风格字符串;否则返回的值是未定义的。
标准异常都派生自一个公共的基类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();
};
原创粉丝点击