2.1 try 试图执行 try{}中的内容
2.2 在可能出现异常的地方 抛出异常 throw
2.3 try下面 catch捕获异常
2.4 catch( 捕获类型 ) …代表 所有其他类型
2.5 如果不想处理异常,继续向上抛出 throw
2.6 如果没有任何处理异常的地方,那么成员调用terminate函数,中断程序
2.7 自定义异常类 ,可以抛出自定义的对象 ,捕获自定义的异常
3.1 从try开始 到 throw 抛出异常之前 所有栈上的对象 都会被释放 这个过程称为栈解旋
3.2 栈上对象构造顺序与析构顺序相反
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
class myException { //自定义异常类
public:
void printError() {
cout << "自定义异常" << endl;
}
};
class Person {
public:
Person() {
cout << "构造函数调用" << endl;
}
~Person() {
cout << "析构函数调用" << endl;
}
};
int myDevide(int a, int b) {
if (b == 0) {
//如果b是0 抛出异常
//throw 1; 抛出int类型异常
//throw 3.14; //抛出double类型异常 异常必须处理,如果不处理 就挂掉
//栈解旋
//从try开始 到 throw 抛出异常之前 所有栈上的对象 都会被释放 这个过程称为栈解旋
//构造和析构顺序相反
Person p1, p2;
throw myException(); //匿名对象
}
return a / b;
}
void test01() {
int a = 10;
int b = 0;
//int ret = myDevide(a, b); //早期如果返回-1 无法区分到底是结果还是异常
//C++中异常处理
try { //试一试
myDevide(a, b);
}
catch(double) {//捕获异常
//如果不想处理这个异常 ,可以继续向上抛出
throw;
cout << "double类型的错误" << endl;
}
catch (myException e) {
e.printError();
}
catch (...)
{
cout << "其他类型异常捕获" << endl;
}
}
int main(){
try{
test01();
}
catch(double) { //如果异常都没有处理,那么成员terminate函数,使程序中断
cout << "main函数中double类型的错误" << endl;
}
catch (...)
{
cout << "main函数中 其他类型异常捕获" << endl;
}
system("pause");
return 0;
}