Exception C++


Exception C++

Lors de l'exécution de code C++, différentes erreurs peuvent se produire : erreurs de codage faites par le programmeur, erreurs dues à une mauvaise saisie ou à d'autres choses imprévisibles.

Lorsqu'une erreur se produit, C++ s'arrête normalement et génère un message d'erreur. Le terme technique pour cela est : C++ lèvera une exception (lancera une erreur).


C++ essayer et attraper

La gestion des exceptions en C++ consiste en trois mots-clés : try, throwet catch:

L' tryinstruction vous permet de définir un bloc de code à tester pour les erreurs pendant son exécution.

Le mot- throwclé lève une exception lorsqu'un problème est détecté, ce qui nous permet de créer une erreur personnalisée.

L' catchinstruction vous permet de définir un bloc de code à exécuter, si une erreur se produit dans le bloc try.

Les mots-clés tryet catchvont par paires :

Exemple

try {
  // Block of code to try
  throw exception; // Throw an exception when a problem arise
}
catch () {
  // Block of code to handle errors
}

Considérez l'exemple suivant :

Exemple

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw (age);
  }
}
catch (int myNum) {
  cout << "Access denied - You must be at least 18 years old.\n";
  cout << "Age is: " << myNum;
}

Exemple expliqué

Nous utilisons le trybloc pour tester du code : si la agevariable est inférieure à 18, nous créerons throwune exception et la gérerons dans notre catchbloc.

Dans le catchbloc, nous attrapons l'erreur et faisons quelque chose à ce sujet. L' catch instruction prend un paramètre : dans notre exemple, nous utilisons une intvariable ( myNum) (car nous lançons une exception de inttype dans le trybloc ( age)), pour afficher la valeur de age.

Si aucune erreur ne se produit (par exemple, si ageest 20au lieu de 15, ce qui signifie qu'il sera supérieur à 18), le catchbloc est sauté :

Exemple

int age = 20;

Vous pouvez également utiliser le mot- throwclé pour générer un numéro de référence, comme un numéro/code d'erreur personnalisé à des fins d'organisation :

Exemple

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw 505;
  }
}
catch (int myNum) {
  cout << "Access denied - You must be at least 18 years old.\n";
  cout << "Error number: " << myNum;
}

Gérer tout type d'exceptions (...)

Si vous ne connaissez pas le throw type utilisé dans le trybloc, vous pouvez utiliser la syntaxe "trois points" ( ...) à l'intérieur du catchbloc, qui gérera tout type d'exception :

Exemple

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw 505;
  }
}
catch (...) {
  cout << "Access denied - You must be at least 18 years old.\n";
}