异常和异常处理
程序执行过程中出现的问题称为异常。
在C ++中,异常是程序运行时产生的错误的反应,例如试图除以零。
抛出异常
C ++异常处理基于三个关键字:try,catch和throw。
当问题出现时throw是用来抛出异常的。
int fatherAge = 18;
int sonAge = 38;
if (sonAge > fatherAge) {
throw "你爸真年轻~";
}
上述代码中,当sonAge比fatherAge大的时候就会抛出异常。
在throw语句中,参数确定异常的类型。 这可以是任何表达式。 表达式结果的类型将决定抛出异常的类型。
捕捉异常
try标识将激活用于检测异常的代码块。 接下来是一个或多个catch块。 catch关键字表示在引发特定异常时执行的代码块。
可以生成异常的代码被try / catch块包围。
您可以通过设置关键字catch后面的括号中显示的异常声明来捕获哪种类型的异常。
try {
int fatherAge = 18;
int sonAge = 38;
if (sonAge > fatherAge) {
throw 666;
}
}
catch (int x) {
cout<<"你确定这是你爸?"<<x;
}
//输出 "你确定这是你爸? 666"
try块引发异常,然后catch块处理它。
错误代码666是一个整数,它出现在throw语句中,所以它会导致int类型的异常。
可能会列出多个catch语句来处理各种异常,以防try块引发多个异常。
处理异常
例如,一个程序要求用户输入两个数字,然后进行整除,为了确保被除数不为0,你就需要用异常处理。
int main() {
int num1;
cout <<"输入第一个数字:";
cin >> num1;
int num2;
cout <<"输入第二个数字:";
cin >> num2;
cout <<"结果:"<<num1 / num2;
}
如果用户输入除0外的任何数字,程序将正常运行。
但是当用户在第二个数字的时候输入了0,则程序会崩溃
现在我们需要使用try / catch块来处理抛出的异常。
int main() {
try {
int num1;
cout <<"输入第一个数字:";
cin >> num1;
int num2;
cout <<"输入第二个数字:";
cin >> num2;
if(num2 == 0) {
throw 0;
}
cout <<"结果:"<<num1 / num2;
}
catch(int x) {
cout <<"请勿输入0!";
}
}
上述代码将会避免出现当num2为0时导致程序崩溃的问题,同时会抛出异常。
捕获任意异常
在我们的例子中,我们只捕获整数类型的异常。 可以指定你的catch块处理在try块中抛出的任何类型的异常。可以通过在catch的括号之间添加一个省略号(…)实现。
try {
// 要执行的代码
} catch(...) {
// 用来处理异常的代码
}
小练习
请对2/0进行异常处理,防止程序崩溃
如果你有兴趣的话,欢迎把你的答案在评论区中发表