C++ Primer第五章③

C++ Primer

第五章 语句

try语句块和异常处理

异常是指存在于运行时的反常行为,而且这些行为超出了函数正常功能的范围,就是说函数无法处理了,例如失去数据库连接以及遇到意外输入等。 C++有一套异常处理机制:

  1. throw表达式,用于异常检测,表示程序遇到了无法处理的问题,throw就是抛出异常
  2. try语句块,用于异常处理,try语句块以关键字try开始,并以一个或多个catch子句结束。也就是说,try语句块中代码抛出的异常会被某个catch子句处理。
  3. 一套异常类(exception class),用于在throw和catch语句之间传递异常的具体信息

    throw表达式

    我用原书的代码,检查两条数据是不是同一本书
    if(item1.isbn() != item2.isbn())
    {
     throw runtime_error("不是同一种书");
    }
    cout << item1 + item2;
    
    当然你也可以用cout输出,但是在项目程序中,对象相加的代码和用户交互的代码应该要分离开,我们上面的代码就做到了这一点,一旦抛出异常后,程序就把控制权转移给能处理该异常的代码。 类型runtime_error是标准库异常类型的一种

    try语句块

    接着上面的代码处理:
    while(cin >> item1 >> item2)
    {
     try //执行相加,不行抛异常
     {
         if(item1.isbn() != item2.isbn())
         {
             throw runtime_error("不是同一种书");
         }
         cout << item1 + item2;
     }
     catch(runtime_error err)
     {
         cout << err.what() << "再试一次?请输入yes或者 no" << endl;
         //what是库里的一个函数
         string str;
         cin >> str;
         if(!cin || str == "no") //如果没输入或者输入no,就跳出循环,结束程序
         {
             break;
         }
     }
    }
    
    如果没有找到匹配的catch子句,程序会转到terminat库函数,导致程序非正常退出。

    标准异常

    我没用过,直接贴图了
全部评论

相关推荐

01-15 19:59
中山大学 C++
牛客60887332...:你这是人写出来的? 本科标到硕士后面 留那么多空给 hr 填?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务