C++程序创建自定义异常

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函数中,我们声明两个整数变量xy,以及一个名为result的浮点数变量。注意,我们将的值设置为0,以便测试自定义异常的功能。

然后,我们使用try/catch语句将division函数的调用封装起来,以便在函数引发MyException异常时能够捕获该异常。如果没有异常发生,我们将输出结果。如果有异常发生,我们将输出错误消息。

4. 总结

在C++编程中,使用自定义异常类可以帮助我们更好地处理错误情况,以及更好地解决和调试程序中的异常问题。在本文中,我们演示了如何使用C++中的throw/catch语句,以及如何创建和使用自定义异常类。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签