Exception personnalisée en C++

Muhammad Husnain 15 février 2024
  1. Gestion des exceptions en C++
  2. Exception personnalisée en C++
Exception personnalisée en C++

Ce bref didacticiel de programmation concerne l’implémentation de classes d’exception personnalisées en C++ et de règles fondamentales pour implémenter des classes d’exception définies par l’utilisateur en C++.

Gestion des exceptions en C++

En C++, la gestion des exceptions est une méthode de traitement des problèmes d’exécution. Nous gérons les exceptions afin que le flux habituel de l’application puisse être maintenu même lorsque des problèmes d’exécution surviennent.

En C++, une exception est un objet lancé pendant le processus d’exécution et perturbe l’exécution normale du programme.

La classe std::exception est la racine de toutes les exceptions. Si nous ne gérons aucune exception, l’application affichera un message d’erreur et se terminera.

Les exceptions permettent de passer le contrôle d’une zone de programme à une autre. Les trois mots clés try, catch et throw gèrent les exceptions en C++.

  1. throw - Si un segment de votre code peut causer un problème, nous levons une exception à l’aide du mot-clé throw et spécifions le type d’exception qui peut se produire.
  2. try - Il contient ce segment de code qui peut provoquer une erreur et doit lever une exception.
  3. catch - le bloc appelé lorsqu’une exception est levée. Dans ce bloc de code, nous pouvons informer l’utilisateur de l’erreur et terminer le programme par programmation si nécessaire.

Un exemple courant d’exceptions est l’erreur diviser par zéro qui se produit lors de l’exécution. C’est l’exception la plus fréquente dans les programmes.

Examinons l’extrait de code suivant, qui est sujet à cette exception d’exécution diviser par zéro.

#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;
  }
}

Production:

division par zéro exception d&rsquo;exécution

Hiérarchie des classes d’exception

L’exception est une classe avec de nombreuses classes comme sous-classes, et toutes ces classes sont des types d’exceptions. C++ dispose d’un ensemble prédéfini de types d’exceptions communs à utiliser facilement dans les programmes.

Hiérarchie des classes d&rsquo;exception

Exception personnalisée en C++

Les exceptions personnalisées non spécifiées en C++ peuvent être bénéfiques à produire dans des circonstances spécifiques. En C++, tout type qui répond à certains critères peut être intercepté ou lancé.

Ceux-ci incluent le type ayant un constructeur de copie et un destructeur valides.

Les exceptions personnalisées offrent le mécanisme de gestion des exceptions avec des informations utiles sur un problème. Ils peuvent être créés soit en créant une nouvelle classe avec les propriétés nécessaires et en lançant une instance de cette classe, soit en héritant de std::exception et en remplaçant la fonction what().

Supposons que nous ayons besoin d’entrer le nombre positif dans notre programme. Nous pouvons lancer une exception si un nombre négatif est entré.

Nous pouvons créer une classe d’exception personnalisée comme suit.

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

Cela peut être détecté dans le programme du pilote comme suit.

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();
  }
}

Production:

Sortie exceptionnelle

Nous pouvons voir dans le code ci-dessus que nous avons hérité de notre classe d’exception personnalisée avec la classe Exception et remplacer une méthode what() qui sera appelée lorsque l’exception sera levée.

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

Article connexe - C++ Exception