1. 异常处理和自定义异常概述
在C++编程中,如果程序出现了错误,可以使用C++异常处理机制来捕获和处理这些错误。异常处理就是在程序执行过程中出现了某种情况,导致程序无法正常继续执行,因此需要程序员对这种情况进行处理,使程序能够正常运行下去。
通常情况下,C++中的异常处理机制包含以下这些关键词:
try
:表示用来检测异常的语句块。
catch
:表示捕获异常的语句块。
throw
:表示引发异常的语句。
除了使用C++内置的异常机制外,程序员还可以自定义异常类型,以便更好地处理错误情况。在下面的代码示例中,您将看到如何使用C++创建自定义异常类型,并在程序中使用它来处理异常情况。
2. 创建自定义异常类型
2.1 创建异常类
要创建自定义异常类,您可以从任何C++类派生出一个新类,并添加用于错误处理的额外信息。
例如,假设您创建了一个名为MyException的异常类,它派生自C++的标准异常类std::exception。这个自定义异常类使用了宏定义,以便在程序参数不正确时引发异常。
#include <iostream>
#include <exception>
using namespace std;
#define ERROR_MSG "Invalid argument!" // 定义错误消息
class MyException : public exception {
public:
const char* what() const throw() {
return ERROR_MSG;
}
};
在上面的代码中,我们首先包含了必要的头文件,然后创建了一个名为MyException的异常类。该类派生自std::exception,这是C++标准库中的一个预定义基本异常类。我们在这个类中使用了一个名为ERROR_MSG的宏,它用于存储将在错误情况下抛出的错误消息。在类定义末尾,我们重写了what()函数,并使用const throw()
指定了该函数不会抛出异常。
2.2 抛出异常
当程序遇到一个异常情况时,可以使用throw
语句抛出一个异常,如下所示:
throw MyException();
在这个例子中,我们使用throw
语句来抛出一个新的MyException异常。
3. 自定义异常示例
现在,我们将演示如何在程序中使用自定义异常类型。
#include <iostream>
#include <exception>
using namespace std;
#define ERROR_MSG "Invalid input!" // 定义错误消息
class MyException : public exception {
public:
const char* what() const throw() {
return ERROR_MSG;
}
};
double division(int a, int b) {
if (b == 0) {
throw MyException();
}
return (double)a / (double)b;
}
int main() {
int x = 10, y = 0;
double result = 0.0;
try {
result = division(x, y);
}
catch (MyException& e) {
cerr << "Error: " << e.what() << endl;
}
return 0;
}
在这个例子中,我们首先包含了必要的头文件,并创建了一个名为MyException的异常类。我们还使用了一个名为ERROR_MSG的宏,它用于存储错误消息。
然后,我们定义了一个名为division的函数,该函数用于计算两个整数的商。如果b等于零,我们就使用throw
语句抛出一个新的MyException异常。否则,我们将返回计算结果。
在main函数中,我们声明两个整数变量x和y,以及一个名为result的浮点数变量。注意,我们将
然后,我们使用try
/catch
语句将division
函数的调用封装起来,以便在函数引发MyException异常时能够捕获该异常。如果没有异常发生,我们将输出结果。如果有异常发生,我们将输出错误消息。
4. 总结
在C++编程中,使用自定义异常类可以帮助我们更好地处理错误情况,以及更好地解决和调试程序中的异常问题。在本文中,我们演示了如何使用C++中的throw
/catch
语句,以及如何创建和使用自定义异常类。