Heim  >  Artikel  >  Backend-Entwicklung  >  C++-Funktionsausnahmen und Klassenausnahmen: mehrere Strategien zur Ausnahmebehandlung

C++-Funktionsausnahmen und Klassenausnahmen: mehrere Strategien zur Ausnahmebehandlung

WBOY
WBOYOriginal
2024-05-03 17:18:01308Durchsuche

Die C++-Ausnahmebehandlung ist in zwei Typen unterteilt: Funktionsausnahmen und Klassenausnahmen. Mehrere Strategien zur Ausnahmebehandlung umfassen die Einzelbehandlung und die Erfassung von Basisklassen. Im tatsächlichen Kampf können Ausnahmebehandlungsstrategien verwendet werden, um Ausnahmen aus verschiedenen Quellen zu behandeln und je nach Ausnahmetyp unterschiedliche Fehlermeldungen auszugeben.

C++ 函数异常与类异常:多重异常处理策略

C++-Funktionsausnahmen und Klassenausnahmen: Mehrere Strategien zur Ausnahmebehandlung

Übersicht

Die Ausnahmebehandlung ist ein leistungsstarker Mechanismus in C++ zur Behandlung von Laufzeitfehlern. Dadurch können Programme ordnungsgemäß reagieren und sich erholen, wenn Ausnahmen auftreten. In C++ gibt es zwei Arten von Ausnahmen: Funktionsausnahmen und Klassenausnahmen. In diesem Artikel werden diese beiden Ausnahmetypen untersucht und gezeigt, wie Sie mehrere Ausnahmebehandlungsstrategien verwenden können, um sie gleichzeitig zu behandeln.

Funktionsausnahme

Funktionsausnahme ist eine Ausnahme, die direkt in der Funktion ausgelöst wird. Sie verwenden das Schlüsselwort throw, gefolgt von einem Ausnahmetyp oder -objekt. Zum Beispiel: throw 关键字,后面跟一个异常类型或对象。例如:

void divide(int a, int b) {
  if (b == 0)
    throw std::runtime_error("Division by zero");
}

类异常

类异常是由用户自定义类抛出的异常。它们使用 throw 关键字,后面跟一个异常类实例。例如:

class NegativeNumberException : std::exception {
public:
  const char *what() const override {
    return "Cannot accept negative numbers";
  }
};

void checkNumber(int n) {
  if (n < 0)
    throw NegativeNumberException();
}

多重异常处理策略

有时,函数或类可能同时抛出多种异常。在这种情况下,可以使用多重异常处理策略来处理所有异常。以下策略是常用的:

1. 逐一处理:

try {
  // 调用可能抛出异常的代码
} catch (std::runtime_error &e) {
  // 处理 std::runtime_error 异常
} catch (NegativeNumberException &e) {
  // 处理 NegativeNumberException 异常
} catch (...) {
  // 处理任何其他异常
}

2. 捕获基类:

try {
  // 调用可能抛出异常的代码
} catch (std::exception &e) {
  // 处理所有 std::exception 派生的异常
} catch (...) {
  // 处理任何其他异常
}

实战案例

考虑以下代码,它调用 dividecheckNumber

#include <iostream>
using namespace std;

void divide(int a, int b);
void checkNumber(int n);

int main() {
  try {
    divide(5, 0);
  } catch (std::runtime_error &e) {
    cout << "Division by zero occurred" << endl;
  } catch (NegativeNumberException &e) {
    cout << "Negative number detected" << endl;
  } catch (...) {
    cout << "Unknown exception occurred" << endl;
  }

  try {
    checkNumber(10);
  } catch (...) {
    cout << "Error in number check" << endl;
  }

  return 0;
}

Klassenausnahme

Klassenausnahme ist eine Ausnahme, die von einer benutzerdefinierten Klasse ausgelöst wird. Sie verwenden das Schlüsselwort throw, gefolgt von einer Ausnahmeklasseninstanz. Zum Beispiel: 🎜
Division by zero occurred
Error in number check
🎜Mehrere Strategien zur Ausnahmebehandlung🎜🎜Manchmal kann eine Funktion oder Klasse mehrere Ausnahmen gleichzeitig auslösen. In diesem Fall können Sie eine Strategie zur Behandlung mehrerer Ausnahmen verwenden, um alle Ausnahmen zu behandeln. Die folgenden Strategien werden häufig verwendet: 🎜🎜1. Verarbeiten Sie eine nach der anderen: 🎜rrreee🎜2. Erfassen Sie die Basisklasse: 🎜rrreee🎜Praktischer Fall 🎜🎜Beachten Sie den folgenden Code , die die Funktionen divide und checkNumber aufruft und Meldungen gemäß verschiedenen Ausnahmebedingungen ausgibt: 🎜rrreee🎜Ausgabe: 🎜rrreee

Das obige ist der detaillierte Inhalt vonC++-Funktionsausnahmen und Klassenausnahmen: mehrere Strategien zur Ausnahmebehandlung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn