第10课 C++异常简介

时间:2023-03-10 04:48:10
第10课 C++异常简介

1. try-catch语句

(1)try语句处理正常代码逻辑

(2)catch语句处理异常情况

(3)try语句中的异常由对应的catch语句处理

(4)C++通过throw语句抛出异常信息

2. C++异常处理分析

(1)throw抛出的异常必须被catch处理

  ①当前函数能够处理异常,程序继续往下执行

  ②当前函数无法处理异常,则函数停止执行并返回

(2)未被处理的异常会顺着函数调用栈向上传播,直到被处理为止,否则程序将停止执行。

第10课 C++异常简介

(3)同一个try语句可以跟上多个catch语句

  ①catch语句可以定义具体处理的异常类型

  ②不同类型的异常由不同的catch语句负责处理

  ③try语句中可以抛出任何类型的异常

  ④catch(…)用于处理所有类型的异常

  ⑤任何异常都只能被捕获(catch)一次

(4)异常处理的匹配规则

第10课 C++异常简介

【编程实验】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)异常处理必须严格匹配,不进行任何的类型转换