设为首页 加入收藏

TOP

15.3.8 exception类(1)
2013-10-07 15:46:19 来源: 作者: 【 】 浏览:83
Tags:15.3.8 exception

15.3.8  exception类(1)

C++(www.cppentry.com)异常的主要目的是为设计容错程序提供语言级支持,即异常使得在程序设计中包含错误处理功能更容易,以免事后采取一些严格的错误处理方式。异常的灵活性和相对方便性激励着程序员在条件允许的情况下在程序设计中加入错误处理功能。总之,异常是这样一种特性:类似于类,可以改变您的编程(www.cppentry.com)方式。

较新的C++(www.cppentry.com)编译器将异常合并到语言中。例如,为支持该语言,exception头文件(以前为exception.h或except.h)定义了exception类,C++(www.cppentry.com)可以把它用作其他异常类的基类。代码可以引发exception异常,也可以将exception类用作基类。有一个名为what( )的虚拟成员函数,它返回一个字符串,该字符串的特征随实现而异。然而,由于这是一个虚方法,因此可以在从exception派生而来的类中重新定义它:

 

如果不想以不同的方式处理这些派生而来的异常,可以在同一个基类处理程序中捕获它们:

 

否则,可以分别捕获它们。

C++(www.cppentry.com)库定义了很多基于exception的异常类型。

1.stdexcept异常类

头文件stdexcept定义了其他几个异常类。首先,该文件定义了logic_error和runtime_error类,它们都是以公有方式从exception派生而来的:

 

注意,这些类的构造函数接受一个string对象作为参数,该参数提供了方法what( )以C-风格字符串方式返回的字符数据。

这两个新类被用作两个派生类系列的基类。异常类系列logic_error描述了典型的逻辑错误。总体而言,通过合理的编程(www.cppentry.com)可以避免这种错误,但实际上这些错误还是可能发生的。每个类的名称指出了它用于报告的错误类型:

domain_error;

invalid_argument;

length_error;

out_of_bounds。

每个类独有一个类似于logic_error的构造函数,让您能够提供一个供方法what( )返回的字符串。

数学函数有定义域(domain)和值域(range)。定义域由参数的可能取值组成,值域由函数可能的返回值组成。例如,正弦函数的定义域为负无穷大到正无穷大,因为任何实数都有正弦值;但正弦函数的值域为 1到+1,因为它们分别是最大和最小正弦值。另一方面,反正弦函数的定义域为 1到+1,值域为 π到+ π。如果您编写一个函数,该函数将一个参数传递给函数std::sin( ),则可以让该函数在参数不在定义域 1到+1之间时引发domain_error异常。

异常invalid_argument指出给函数传递了一个意料外的值。例如,如果函数希望接受一个这样的字符串:其中每个字符要么是'0'要么是'1',则当传递的字符串中包含其他字符时,该函数将引发invalid_argument异常。

异常length_error用于指出没有足够的空间来执行所需的操作。例如,string类的append( )方法在合并得到的字符串长度超过最大允许长度时,将引发length_error异常。

异常out_of_bounds通常用于指示索引错误。例如,您可以定义一个类似于数组的类,其operator( ) [ ]在使用的索引无效时引发out_of_bounds异常。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇15.4.1 RTTI的用途 下一篇15.3.8 exception类(2)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)
·Linux常用命令60条( (2025-12-25 00:50:40)
·nginx 监听一个端口 (2025-12-25 00:19:30)
·整个互联网就没有一 (2025-12-25 00:19:27)