C++ 中的自定义异常

Muhammad Husnain 2024年2月15日
  1. C++ 中的异常处理
  2. C++ 中的自定义异常
C++ 中的自定义异常

这个简短的编程教程是关于在 C++ 中实现自定义异常类和在 C++ 中实现用户定义的异常类的基本规则。

C++ 中的异常处理

在 C++ 中,异常处理是一种处理运行时问题的方法。我们处理异常,因此即使发生运行时问题,也可以维持应用程序的正常流程。

在 C++ 中,异常是在运行过程中抛出的一个对象,会干扰程序的正常执行。

std::exception 类是所有异常的根源。如果我们不处理任何异常,应用程序将打印一条错误消息并终止。

异常允许控制从一个程序区域传递到另一个程序区域。三个关键字 trycatchthrow 处理 C++ 中的异常。

  1. throw - 如果你的代码中的某个段可能导致问题,那么我们使用 throw 关键字抛出异常并指定可能发生的异常类型。
  2. try - 它包含可能导致错误并需要抛出异常的代码段。
  3. catch - 抛出异常时调用的块。在这段代码中,我们可以通知用户错误并在需要时以编程方式结束程序。

一个常见的异常示例是运行时发生的除以零错误。它是程序中最常发生的异常。

让我们看一下下面的代码片段,它很容易出现这种除以零运行时异常。

#include <iostream>
using namespace std;
float divideFunc(int a, int b) {
  if (b == 0) {
    throw "User made a division with zero!";
  }
  return (a / b);
}
int main() {
  int num1 = 20;
  int num2 = 0;
  float result = 0;
  try {
    result = divideFunc(num1, num2);
    cout << result << endl;
  } catch (const char* msg) {
    cout << msg << endl;
  }
}

输出:

除以零运行时异常

异常类层次结构

exception 是一个有许多类作为子类的类,所有这些类都是异常的类型。C++ 有一组预定义的常见异常类型,可以在程序中轻松使用。

异常类层次结构

C++ 中的自定义异常

C++ 中未指定的自定义异常可能有助于在特定情况下生成。在 C++ 中,任何满足特定条件的类型都可以被捕获或抛出。

这些包括具有有效复制构造函数和析构函数的类型。

自定义异常为异常处理机制提供了有关问题的有用信息。它们可以通过创建具有必要属性的新类并抛出该类的实例或通过从 std::exception 继承并覆盖 what() 函数来创建。

假设我们需要在程序中获取正数输入。如果输入负数,我们可以抛出异常。

我们可以如下创建一个自定义异常类。

class MyExceptionClass : public exception {
 public:
  const char* what() const throw() { return "Negative number not allowed\n"; }
};

这可以在驱动程序中捕获,如下所示。

int main() {
  try {
    int a;
    cout << "Enter a number : \n";
    cin >> a;
    if (a < 0) {
      MyExceptionClass c;
      throw c;
    } else {
      cout << "you entered: " << a << endl;
    }
  } catch (exception& e) {
    cout << e.what();
  }
}

输出:

异常输出

我们可以在上面的代码中看到,我们已经使用 Exception 类继承了我们的自定义异常类,并覆盖了一个将在抛出异常时调用的方法 what()

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

相关文章 - C++ Exception