15.3.4 将对象用作异常类型(1)
通常,引发异常的函数将传递一个对象。这样做的重要优点之一是,可以使用不同的异常类型来区分不同的函数在不同情况下引发的异常。另外,对象可以携带信息,程序员可以根据这些信息来确定引发异常的原因。同时,catch块可以根据这些信息来决定采取什么样的措施。例如,下面是针对函数hmean( )引发的异常而提供的一种设计:
可以将一个bad_hmean对象初始化为传递给函数hmean( )的值,而方法mesg( )可用于报告问题(包括传递给函数hmena( )的值)。函数hmean( )可以使用下面这样的代码:
上述代码调用构造函数bad_hmean( ),以初始化对象,使其存储参数值。
程序清单15.10和15.11添加了另一个异常类bad_gmean以及另一个名为gmean( )的函数,该函数引发bad_gmean异常。函数gmean( )计算两个数的几何平均值,即乘积的平方根。这个函数要求两个参数都不为负,如果参数为负,它将引发异常。程序清单15.10是一个头文件,其中包含异常类的定义;而程序清单15.11是一个示例程序,它使用了该头文件。注意,try块的后面跟着两个catch块:
如果函数hmean( )引发bad_hmean异常,第一个catch块将捕获该异常;如果gmean( )引发bad_gmean异常,异常将逃过第一个catch块,被第二个catch块捕获。
程序清单15.10 exc_mean.h