c++远征之多态篇——异常处理

来源:互联网 发布:亚丝娜的剑数据 编辑:程序博客网 时间:2024/05/29 04:46

以下内容源于慕课网的学习整理,如有侵权,请告知删除。


1、关于异常的一些概念

异常:程序运行期出现的错误。

  • 数组下标越界;
  • 除数为0;
  • 内存不足;
  • ……

异常处理:对有可能发生异常的地方做出预见性的安排。

异常处理使用的关键字

  • try {   这下面的代码是主体逻辑  }   catch{  这下面的代码异常处理 }
  • throw xxx 抛出异常,其中xxx可以是数字(各种类型的),也可以是类名?


基本思想:主逻辑和异常处理分离。


2、c++中异常处理流程

  • 假设其中f3调用f2,f2调用f1,在f1运行时出现错误。
  • 出现错误时,f1将错误抛给f2解决;
  • 如果f2不能解决,则把错误抛给f3解决;
  • 如果f3也解决不了,则把错误抛给操作系统。
  • 此时操作系统简单粗暴地提示崩溃。



3、细节讲解

  • try中运行fun1的代码,当fun1出现异常时,抛出1,给catch捕捉到,然后判断什么,决定哪种异常处理。


  • 也可能是一对多的关系;
  • 最后catch(…)表示都不匹配时,做的异常处理。这里…表示任何内容。



  • 例子如下
  • 此时在getChar出错,则不会执行cout<<ch<<endl;




4、异常处理和多态的关系

  • 定义一个异常类作为接口类,旗下细分各类异常;
  • 之后出现异常时,都可以用父类去捕获了。




5、代码示例

#include <iostream>#include <string>#include <stdlib.h>using namespace std;/*函数division的两个参数为dividend(被除数)和divisor(除数)要求用户输入除数和被除数,并作为参数传递给division函数如果除数为0,则抛出异常,并被捕获,将异常的内容显示到屏幕上*//** * 定义函数division * 参数整型dividend、整型divisor */int division(int dividend, int divisor){    if(0 == divisor){        // 抛出异常,字符串“除数不能为0”throw string("除数不能为0");}else{return dividend / divisor;}}int main(void){int d1 = 0;int d2 = 0;int r = 0;cin >> d1;cin >> d2;    // 使用try...catch...捕获异常try{ r=division(d1,d2);   }catch(const string& e){   // cout<<"除数不能为0"<<endl;   cout<<e<<endl;}return 0;}


阅读全文
0 0