第10课 C++异常简介
1. try-catch语句
(1)try语句处理正常代码逻辑
(2)catch语句处理异常情况
(3)try语句中的异常由对应的catch语句处理
(4)C++通过throw语句抛出异常信息
2. C++异常处理分析
(1)throw抛出的异常必须被catch处理
①当前函数能够处理异常,程序继续往下执行
②当前函数无法处理异常,则函数停止执行,并返回。
(2)未被处理的异常会顺着函数调用栈向上传播,直到被处理为止,否则程序将停止执行。
(3)同一个try语句可以跟上多个catch语句
①catch语句可以定义具体处理的异常类型
②不同类型的异常由不同的catch语句负责处理。
③try语句中可以抛出任何类型的异常
④catch(…)用于处理所有类型的异常
⑤任何异常都只能被捕获(catch)一次。
(4)异常处理的匹配规则
【编程实验】C++异常处理
//main.cpp
#include <iostream> using namespace std; double divide(double a, double b)
{
const double delta = 0.000000000000001;
double ret = ; if( !((-delta < b) && ( b < delta))){
ret = a / b;
}else{
throw ; //产生除0异常
} return ret;
} //匹配规则(自上而下,严格匹配、不进行类型转换)
void Demo1()
{
try{
throw 'c'; //抛出字符型的异常
}catch(int i){
cout << "catch(int i)" << endl;
}catch(double d){
cout << "catch(double d)" << endl;
}catch(char c){ //只能被这里的catch捕获
cout << "catch(char c)" << endl;
}
} void Demo2()
{
throw "Demo2"; //const char*
}
int main()
{
cout << "main() begin" << endl; try{
double c = divide(, );//产生异常
cout <<"c = " << c << endl; //无法被执行到!
}catch(...){
cout << "Divide by zero..." << endl;
} Demo1(); try{
Demo2();
}catch(char* c){
cout << "catch(char* c)" << endl;
}catch(const char* c){
cout << "catch(const char* c)" << endl;
}catch(...){
cout << "catch(...)" << endl;
} cout << "main() end" << endl;
return ;
}
/*输出结果
main() begin
Divide by zero...
catch(char c)
catch(const char* c)
main() end
*/
3. 小结
(1)C++中直接支持异常处理的概念
(2)try…catch…是C++中异常处理的专用语句
(3)try语句处理正常代码逻辑,catch语句处理异常情况
(4)同一个try语句可以跟上多个catch语句
(5)异常处理必须严格匹配,不进行任何的类型转换
第10课 C++异常简介的更多相关文章
- 第十课 C++异常简介
异常不是错误,异常是程序中可预料到的另一条执行分支,是可预见的.错误是不可预料的. C++内置了异常处理的语法元素try...catch...,如下: C++通过throw语句抛出异常信息: 上图中t ...
- Java异常(一) Java异常简介及其架构
概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.html ...
- Java异常简介、异常捕获还是上抛总结
概要 本章对Java中的异常进行介绍.内容包括:1.Java异常简介2.Java异常框架 一.Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制. Java异常机制可以使程序 ...
- Java异常(一)Java异常简介及其框架
Java异常(一)Java异常简介及其框架 概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机 ...
- JDBC 异常简介 jDBC简介(六)
SQL 异常简介 对于数据库的操作访问,必然也很可能抛出异常. JDBC中定义了SQLException,用于描述数据库相关操作中可能出现的异常情况. java.sql.SQLException ...
- 第10课_dg
export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1 export ORACLE ...
- 第10课 OpenGL 3D世界
加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由Lionel Brits (βtelge ...
- node基础10:处理异常
1.处理异常 当发生异常时,如果不作处理,那么服务器会奔溃.由于node的异步调用的特性,所以不但要考虑主程序的异常,还有处理异步调用的异常. 代码如下: /** * server.js */ var ...
- Java异常简介
异常指异于常态,和正常情况不一样,有错误出现.阻止当前方法或作用域执行的问题,称之为异常. Java中所有的与异常有关的类都继承于Throwable类,Throwable类有两个儿子,一个是Error ...
随机推荐
- Ubuntu:搜狗输入法不能输入中文
搜狗输入法不能输入中文 问题描述 可以打开搜狗输入法,可以打英文,但是不能切换成中文. 其他输入法正常使用(这个可以判断是不是fcitx是不是出现错误). 有一个关于sogou的内部错误提示 解决方法 ...
- css实现垂直居中的几种方法
方法1.这个方法把一些 div 的显示方式设置为表格,因此我们可以使用表格的 vertical-align 属性. #wrapper { //代表父元素 display: table; } #cell ...
- [LeetCode&Python] Problem 917. Reverse Only Letters
Given a string S, return the "reversed" string where all characters that are not a letter ...
- 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 lock-on-active
转载至:https://blog.csdn.net/wo541075754/article/details/75208955 lock-on-active 当在规则上使用ruleflow-group属 ...
- LG3369 【模板】普通平衡树
题意 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删除一个) 查询x数的排名(排名定义为比当前数小的数的个数+1.若有多个相 ...
- Linux内核中的机制学习总结
一.驱动中的poll机制 1.简介:select()和poll()系统调用的本质一样,前者在 BSD UNIX 中引入的,后者在 System V 中引入的. 应用程序使用 select() 或 po ...
- 使用cglib动态创建javabean
动态创建javabean对于我们进行开发,会有一定的帮助,一下是使用cglib动态创建javabean的一个例子: 先贴上code: package com.dalong.CreateCode; im ...
- android 图片解码显示流程
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jingxia2008/article/details/32327699 问题来源 android 能 ...
- kettle的输入输出组件和脚本组件
一. 输入组件 1.1表输入 从指定的数据库中,通过sql语句来查询数据加载到内存. 允许简易转换:勾选后可以避免不必要的字段的数据类型转换,从而提高性能. 替换sql语句里的变量:勾选后可以通过${ ...
- 海思3518EV200 SDK中获取和保存H.264码流详解
/****************************************** step 2: Start to get streams of each channel. ********** ...