C++高级编程(异常处理)

转自:http://www.runoob.com/cplusplus/cpp-dynamic-memory.html

1.关键字

C++ 异常处理涉及到三个关键字:try、catch、throw

throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。

catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。

try: try 块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 catch 块。

        如果有一个块抛出一个异常,捕获异常的方法会使用 try 和 catch 关键字。try 块中放置可能抛出异常的代码,try 块中的代码被称为保护代码。使用 try/catch 语句的语法如下所示:


        如果 try 块在不同的情境下会抛出不同的异常,这个时候可以尝试罗列多个 catch 语句,用于捕获不同类型的异常。

2.抛出异常

        您可以使用 throw 语句在代码块中的任何地方抛出异常。throw 语句的操作数可以是任意的表达式,表达式的结果的类型决定了抛出的异常的类型。

以下是尝试除以零时抛出异常的实例:


3.捕获异常

        catch 块跟在 try 块后面,用于捕获异常。您可以指定想要捕捉的异常类型,这是由 catch 关键字后的括号内的异常声明决定的。


        上面的代码会捕获一个类型为 ExceptionName 的异常。如果您想让 catch 块能够处理 try 块抛出的任何类型的异常,则必须在异常声明的括号内使用省略号 ...,如下所示:


        下面是一个实例,抛出一个除以零的异常,并在 catch 块中捕获该异常。


        由于我们抛出了一个类型为 const char* 的异常,因此,当捕获该异常时,我们必须在 catch 块中使用 const char*。当上面的代码被编译和执行时,它会产生下列结果:


4.C++ 标准的异常

        C++ 提供了一系列标准的异常,定义在 <exception> 中,我们可以在程序中使用这些标准的异常。它们是以父子类层次结构组织起来的,如下所示:


5.定义新的异常

        您可以通过继承和重载 exception 类来定义新的异常。下面的实例演示了如何使用 std::exception 类来实现自己的异常:


这将产生以下结果:

MyException caught

C++ Exception

        在这里,what() 是异常类提供的一个公共方法,它已被所有子异常类重载。这将返回异常产生的原因。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 见惯了冷冰冰的秀场? 厌倦了没温度fashion Show? 如今这个时尚圈还有什么能为你带来感动 或许你也正在等...
    e270f4b27d8a阅读 271评论 0 1
  • 今天一位之前的老朋友晓雯发短信给我,向我倾诉:我那么爱他,甚至付出了我的所有去给予他,他为什么对我那么冷淡,甚至视...
    世界i阅读 1,442评论 0 0
  • 不知谁写的,越读越有味,送给出生于七十年代的人们。 我乃七零后,今年四十多。 生在土瓦房,吃饭四方桌。 吸的是母乳...
    建筑装饰阅读 330评论 0 2
  • 相对主义反对批判性思维、伦理研究和法律过程。批判性思维的目的是把真理与虚妄、合理与不合理区分开来;如果没有虚假或不...
    韫左寻阅读 112评论 0 0