异常处理实例

异常处理实例:

#include 
#include 
using namespace std;
class MyException
{
public:
    MyException(const string&message):
        message(message) {}
    ~MyException() {}
    const string &getMessage() const
    {
        return message;
    }
private:
    string message;
};
class Demo
{
public:
    Demo()
    {
        cout<<"Constructor of Demo"<

#include 
using namespace std;
void f2();
void f3();
void f1()
{
    try{f2();}
    catch(char)
    {
        cout<<"OK1!";
    }
    cout<<"END1"<

1)在main函数的try块中调用f1函数,在f1函数的try块中调用f2函数,在f2函数的try块中义调用f3函数。
2)在执行f3函数过程中执行了throw语句,抛出double型异常信息a。由于在f3中没找到和a类型相匹配的catch子句,于是将a抛给f3的调用者f2函数,在f2没有找到和a类型相匹配的catch子句,又将a抛给f2的凋用者f1函数,在f1中没找到和a类刷相匹配的catch子句,又将a抛给f1的调用者main函数。
3)而main函数中的try—catch结构中找到和a类型相匹配的catch子句,main中的catch子句就是离throw最近的且与之匹配的catch广句,执行该子句的复合语句,输出”OK0!”,再执行该catch 后的 cout语句。
1、异常处理的语法格式:
    1)  throw   表达式;
     2)try----catch的结构:
          try
               {被检查的语句}
          catch(异常信息类型)
               {进行异常处理的语句}
  说明:
     (1)被检测的函数调用必须放在try块中,否则不起作用。
     (2)try块和catch块作为一个整体出现,catch块是try--catch结构中的一部分,必须紧跟跟在

try块之后,不能单独使用,在二者之间不能插入其它语句,

(3)try和catch块必须用花括号括起来的复合语句,即使花括号内只有一个语句也不能省略{ }。
(4)一个try—catch结构中只能有一个try块,但却可以有多个catch块,以便与不同的异常信息匹配;
    例如:try {  }
                catch  (double)
                catch  (int)
                catch  (char)
                   ……….
(5)catch后面的圆括号中只写异常信息的类型名,catch只检查所捕获异常信息的类型,而不检查它们

的值,例如a,b,c都是double 类型,虽然它们的值不同,但在throw语句中写成throw a、throw b或

throw c,作用均相同。
注意:异常信息可以是C++预定义的标准类型,也可以是用户自定义的类型(类或结构体)。

(6)如果在catch子句中没指定异常信息类型,而是用“…”,例如  :
       Catch(…){cout<<“ok”<

异常借口声明:
可以在函数的声明中列出这个函数可能抛掷的所有异常类型。
例如:void fun() throw(A,B,C,D);
若无异常接口声明,则此函数可以抛掷任何类型的异常。
不抛掷任何类型异常的函数声明如下:
void fun() throw();


你可能感兴趣的:(异常处理,SDUT-OJ)