C++异常处理方式实例详解(超级详细!)
异常处理方式简介
在C++中,当程序发生意外情况时,可以通过异常处理方式来进行处理。异常处理方式可以使程序在发生异常时,从当前执行流程中跳转到异常处理流程中去。
异常处理流程由 try/catch 语句块构成。try 语句块用于包含可能抛出异常的代码,而 catch 语句块则用于捕捉并处理异常,从而避免程序崩溃或未预期的停机现象。当 try 语句块中的代码抛出异常时,程序会跳转到与异常类型相匹配的 catch 语句块中。
异常处理方式的语法格式
异常处理语法如下所示:
try {
// 可能抛出异常的代码
}
catch (exceptionType1 e1) {
// 处理异常的代码
}
catch (exceptionType2 e2) {
// 处理异常的代码
}
...
catch (exceptionTypen en) {
// 处理异常的代码
}
其中,try 语句块包含可能抛出异常的代码,catch 语句块则用于捕获并处理异常。catch 语句块中的参数为异常类型,异常类型可以是任何数据类型,包括派生自 std::exception 的用户自定义异常类型。
捕获异常时,程序会按照 catch 语句块罗列的顺序,从上往下进行匹配,一旦匹配成功,就跳转到对应的 catch 语句块中。
示例一:捕捉数组越界异常
下面的示例说明了如何使用异常处理方式来捕捉数组越界异常:
#include <iostream>
using namespace std;
int main() {
const int size = 10;
int a[size];
try {
for (int i = 0; i < size + 1; i++) {
if (i == size) {
// 抛出数组越界异常
throw "Array index out of bounds!";
}
else {
a[i] = i;
}
}
}
catch (char *e) {
// 处理数组越界异常的代码
cerr << e << endl;
}
return 0;
}
上述代码中,我们创建了一个大小为 10 的整型数组 a,并在 for 循环中对其进行赋值操作。当达到数组元素上限时,我们通过使用 throw 语句抛出了一个数组越界异常。
在 try 块中,我们捕捉了抛出的异常,使用 catch 块对其进行了处理。由于抛出的异常类型为 char *,因此在对异常进行处理时,我们使用了 catch 块中的 char * 参数来捕获异常。
示例二:捕捉除零异常
下面的示例说明了如何使用异常处理方式来捕捉除零异常:
#include <iostream>
using namespace std;
int main() {
int numerator, denominator;
try {
cout << "请输入分子和分母:";
cin >> numerator >> denominator;
if (denominator == 0) {
// 抛出除零异常
throw runtime_error("Divide by zero!");
}
cout << "结果为:" << numerator / denominator << endl;
}
catch (runtime_error &e) {
// 处理除零异常的代码
cerr << e.what() << endl;
}
return 0;
}
上述代码中,我们通过使用 try/catch 语句块来处理除零异常。当用户输入的分母为零时,我们通过使用 throw 语句抛出了一个 runtime_error 类型的异常。
在 try 块中,我们捕捉了抛出的异常,使用 catch 块对其进行了处理。由于抛出的异常类型为 runtime_error,因此在对异常进行处理时,我们使用了 catch 块中的 runtime_error &e 参数来捕获异常。在处理异常时,我们调用了 e.what() 成员函数,该函数用于获取异常消息并输出。
总结
异常处理方式是一种有效的防御性编程技术。当程序发生意外情况时,可以通过使用异常处理方式来捕捉并处理异常,避免程序崩溃或未预期的停机现象。需要注意的是,在使用异常处理方式时,应该尽量精细化地捕获异常,以便更准确地识别和解决问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++异常处理方式实例详解(超级详细!) - Python技术站