Maison > développement back-end > C++ > le corps du texte

Exceptions de fonctions C++ et exceptions de classe : plusieurs stratégies de gestion des exceptions

WBOY
Libérer: 2024-05-03 17:18:01
original
311 Les gens l'ont consulté

La gestion des exceptions C++ est divisée en deux types : les exceptions de fonction et les exceptions de classe. Plusieurs stratégies de gestion des exceptions incluent la gestion une par une et la capture des classes de base. En combat réel, les stratégies de gestion des exceptions peuvent être utilisées pour gérer les exceptions provenant de différentes sources et imprimer différents messages d'erreur en fonction du type d'exception.

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

Exceptions de fonctions et exceptions de classe C++ : stratégies de gestion d'exceptions multiples

Vue d'ensemble

La gestion des exceptions est un mécanisme puissant en C++ pour gérer les erreurs d'exécution. Il permet aux programmes de répondre correctement et de récupérer lorsque des exceptions se produisent. Il existe deux types d’exceptions en C++ : les exceptions de fonction et les exceptions de classe. Cet article explorera ces deux types d'exceptions et montrera comment utiliser plusieurs stratégies de gestion des exceptions pour les gérer simultanément.

Exception de fonction

L'exception de fonction est une exception lancée directement dans la fonction. Ils utilisent le mot-clé throw, suivi d'un type ou d'un objet d'exception. Par exemple : throw 关键字,后面跟一个异常类型或对象。例如:

void divide(int a, int b) {
  if (b == 0)
    throw std::runtime_error("Division by zero");
}
Copier après la connexion

类异常

类异常是由用户自定义类抛出的异常。它们使用 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();
}
Copier après la connexion

多重异常处理策略

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

1. 逐一处理:

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

2. 捕获基类:

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

实战案例

考虑以下代码,它调用 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;
}
Copier après la connexion

Class exception

Class exception est une exception levée par une classe définie par l'utilisateur. Ils utilisent le mot-clé throw, suivi d'une instance de classe d'exception. Par exemple : 🎜
Division by zero occurred
Error in number check
Copier après la connexion
🎜Stratégies de gestion d'exceptions multiples🎜🎜Parfois, une fonction ou une classe peut lancer plusieurs exceptions en même temps. Dans ce cas, vous pouvez utiliser une stratégie de gestion de plusieurs exceptions pour gérer toutes les exceptions. Les stratégies suivantes sont couramment utilisées : 🎜🎜1. Traiter une par une : 🎜rrreee🎜2. Capturer la classe de base : 🎜rrreee🎜Cas pratique 🎜🎜Considérez le code suivant. , qui appelle les fonctions divide et checkNumber et imprime des messages selon différentes conditions d'exception : 🎜rrreee🎜Sortie : 🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal