荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Rage (Rage My Dream), 信区: Program
标  题: 掌握C++ Builder以代码为基础的调试方法(2)
发信站: 荔园晨风BBS站 (Wed May 23 13:41:02 2001), 转信



  就是它!(不是十分好,下面我们会继续完善它)。简单高效,而且便于自定
义。也许你现在会问:“我可以使抛出异常了,但是,怎么控制它们呢?我的意思
是,我想在代码的最前面排除异常。”C++Builder为我们中定义了try {} catch
(...) {}机制。这和我们刚刚定义的异常机制的结构很相似。这个机制完全可以按
照需要自定义。要使用异常处理了,只要把要执行的代码放到try块里面,为了让
程序知道出现异常后应该做什么,还需要定义一个catch()或是__finally块。
catch()语句里面可以指定一个要捕捉的类型或是变量(比如例1,就是
catch(MyException &E){ /* 异常处理代码/}这个机制很强大,甚至可以用它来捕
捉树结构或是继承类的异常,如果捕捉了基类的异常,它就能捕捉到继承这个基类
的所有的类的异常。比如,在VCL中,所有的异常都是继承于Exception类。所以,
catch(Exception& E)可以捕捉到除了EsocketError的所有VCL异常。(这点请特别
注意,以后还将继续讨论。)为了让这个机制更强大,C++Builder中还定义了
catch(…)语句。(没错,就是三个点)使用这条语句可以捕捉到所有的异常。还
有更多的功能吗?当然,你可以添加更多的catch()语句,可以向使用if...else
if...语句那样使用它。注意,在一系列的catch()语句中,错误不会被重复的捕捉
,也就是说,如果前面的catch()语句捕捉到了错误,后面的catch()语句将不会捕
捉这条错误。


  例2:

  //----------------------

  try

  {

   // 正常代码

  }

  catch(EDBEngineError &E)

  {

   // 处理数据库引擎错误

  }

  catch(EExternalError &E)

  {

   // 处理窗口类的错误

  }

  catch(Exception &E)

  {

   // 处理所有的VCL错误

  }

  //----------------------

  请看例2,它的代码运行流程是这样的:“错误是EDBEngineError吗?是->处
理它。不是->运行下一个catch语句”“错误是EExternalError吗?是-〉处理它。
不是-〉运行下一个catch语句”等等。

--

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.215]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店