C++中异常处理是一种用于处理程序运行期间发生的错误或异常情况的机制。一般情况下,C++中的异常处理包括三个关键字:try、throw、catch。
- try:try语句块中的代码是需要被监控的代码。当try语句块中的代码抛出异常时,异常会被传递到catch块中进行处理。
- throw:throw语句抛出一个异常,它抛出的值可以是任意类型的,包括一个简单的数字类型或一个自定义的类型。
- catch:catch语句块是用来处理try块中抛出的异常的。当try块中抛出异常时,catch块中的代码会被执行。
下面我们分别针对try、throw、catch关键字做详细介绍,并给出两个示例说明。
try关键字
try语句块是需要被监控的代码。当try语句块中的代码抛出异常时,异常会被传递到catch块中进行处理。
try语句块的语法如下:
try {
// 可能会抛出异常的代码块
}
catch (exception_type ex) {
// 处理异常的代码块
}
在try语句块中,当出现异常时,异常会被抛出。抛出异常的代码可以写在catch块中,如下示例:
try {
// 可能抛出异常的代码
throw 20; // 抛出一个整数类型的异常
}
catch (int ex) {
// 处理异常的代码
cout << "Caught an exception: " << ex << endl;
}
throw关键字
throw语句用于抛出一个异常。当执行throw语句时,程序将终止当前流程,并且异常值将被抛出。
throw语句的语法如下:
throw exception_value;
其中,exception_value为抛出的异常值,可以是任何数据类型。
以下示例演示了如何使用throw抛出自定义异常:
#include <iostream>
using namespace std;
class MyException { }; // 定义一个自定义异常类
int main() {
try {
throw MyException(); // 抛出自定义异常
}
catch (MyException ex) { // 捕捉自定义异常
cout << "Caught MyException" << endl;
}
return 0;
}
以下示例演示了如何使用throw抛出内置类型异常:
#include <iostream>
using namespace std;
int main() {
try {
throw 20; // 抛出整数类型的异常
}
catch (int ex) { // 捕捉整型异常
cout << "Caught an exception: " << ex << endl;
}
return 0;
}
catch关键字
catch语句块是用来处理try块中抛出的异常的。当try块中抛出异常时,catch语句块中的代码会被执行。catch语句块中的代码根据异常类型来处理异常。
catch语句块的语法如下:
try {
// 可能会抛出异常的代码块
}
catch (exception_type ex) {
// 处理异常的代码块
}
以下是一个示例程序,演示了如何使用catch来捕捉异常并处理异常:
#include <iostream>
using namespace std;
int main() {
try {
int a = 0;
int b = 10;
int c = b / a; // 除数为0,抛出异常
}
catch (exception ex) {
cout << "Caught an exception: " << ex.what() << endl;
}
return 0;
}
当a为0时,程序执行到第6行时,会抛出一个异常并终止当前的流程。catch语句块会捕捉该异常并输出该异常信息。
示例一
下面的示例程序演示了如何使用try、throw、catch关键字来计算平均数,如果分母为0,则抛出异常,并提示错误信息。
#include <iostream>
#include <exception>
using namespace std;
double calculateAverage(int sum, int count) {
if (count == 0) { // 分母为0,抛出异常
throw runtime_error("Divide by 0 exception.");
}
return static_cast<double>(sum) / static_cast<double>(count); // 强制类型转换,防止整型相除产生0
}
int main() {
int sum = 10;
int count = 0;
double average = 0;
try {
average = calculateAverage(sum, count);
}
catch (exception ex) {
cout << "Caught an exception: " << ex.what() << endl;
}
return 0;
}
该程序中,calculateAverage函数用于计算平均数,当count为0时会抛出一个运行期错误,Catch语句块会捕捉该运行时错误并输出错误信息。
示例二
下面的示例程序演示如何使用try、throw、catch关键字来模拟栈,并在栈空时抛出异常。
#include <iostream>
#include <exception>
using namespace std;
class myStack {
private:
int *stack;
int top;
public:
myStack() {
stack = new int[10];
top = -1;
}
void push(int value) {
if (top >= 9) { // 栈已满,抛出异常
throw runtime_error("Stack overflow!");
}
stack[++top] = value;
}
int pop() {
if (top < 0) { // 栈已空,抛出异常
throw runtime_error("Stack underflow!");
}
return stack[top--];
}
};
int main() {
myStack aStack;
try {
aStack.push(1);
aStack.push(2);
aStack.push(3);
cout << aStack.pop() << endl;
cout << aStack.pop() << endl;
cout << aStack.pop() << endl;
cout << aStack.pop() << endl; // pop一个空栈,抛出异常
}
catch (exception ex) {
cout << "Caught an exception: " << ex.what() << endl;
}
return 0;
}
该程序中,模拟了一个栈的数据结构,如果栈满了则抛出溢出异常,如果栈为空则抛出栈下溢异常,通过使用try、throw、catch关键字模拟了栈的操作过程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中try throw catch异常处理的用法示例 - Python技术站