异常思想
基本语法:
1) 若有异常则通过 throw 操作创建一个异常对象并抛掷。
2) 将可能抛出异常的程序段嵌在 try 块之中。控制通过正常的顺序执行到达 try 语句,然后执行 try 块内的保护段。
3) 如果在保护段执行期间没有引起异常,那么跟在 try 块后的 catch 子句就不执行。程序从 try 块后跟随的最后一个 catch 子句后面的语句继续执行下去。
4) catch 子句按其在 try 块后出现的顺序被检查。匹配的 catch 子句将捕获并处理异常(或继续抛掷异常)。
5) 如果匹配的处理器未找到,则运行函数 terminate 将被自动调用,其缺省功能是调用 abort
终止程序。
6) 处理不了的异常,可以在 catch 的最后一个分支,使用 throw 语法,向上扔。
#include <iostream>
using namespace std;
//1.异常可以跨函数
//2.异常可以继续抛出 如果始终不做任何处理 程序中断
void divideData(int i, int j) {
if (j == 0) {
throw i;
}
cout << "i / j= " << i / j << endl;
}
//发生异常直接跨函数
void divideObj(int i, int j) {
divideData(i, j);
}
void divideObj2(int i,int j) {
try {
divideData(i, j);
}
catch (int e) {
cout << "continue throw " << endl;
throw; //继续抛出不做处理
}
}
int main1() {
try {
divideData(100, 2);
divideData(10, 0);
}
catch (int e) {
cout << " e " << "divide 0" << endl;
}
system("pause");
return 0;
}
int main2() {
try {
//发生异常跨函数
divideObj(100, 0);
}
catch (int e) {
cout << " e " << "divide 0" << endl;
}
system("pause");
return 0;
}
int main() {
try {
divideObj2(10, 0);//函数继续抛出异常 main函数如果不作任何处理 程序报错
}
catch(int e){
cout << "main method process ---" << endl;
}
system("pause");
return 0;
}