以下内容源于慕课网的学习整理,如有侵权,请告知删除。
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;
}