C++ : ​La gestion des erreurs avec les exceptions

Personnaliser les exceptions

Testez gratuitement nos 1247 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
En suivant des étapes précises, concevez vos propres exceptions. Vous allez les faire correspondre aux spécificités de vos besoins.
06:04

Transcription

Nous avons vu qu'il y avait un grand nombre d'exceptions standard. Nous allons maintenant voir comment faire nos propres exceptions. Pour manipuler un petit peu les exceptions standard, on va prendre un exemple ici il ne faut aller chercher bien loin, le ChampTexte prend deux informations, la taille minimale et la taille maximale. Si on regarde le constructeur du ChampTexte, il ne fait aucune vérification de ces deux informations pourtant ça peut être cause de bugs. En cas d'erreurs logiques, on a vu qu'il fallait le signaler le plus vite possible. En tant que concepteur de cette classe il faut que je vérifie, si j'ai une taille_min qui est inférieure à taille_max. Donc si elle est supérieure strictement. Elles peuvent être égales éventuellement. On peut imaginer un champ de taille exacte. Alors il faut que je lève une exception. Et là, c'est une exception logique standard. Invalid_argument est le plus polyvalent des arguments non valides. Et là, il faut que je précise quelque chose pour le développeur qui éventuellement m'a passé les mauvais paramètres ou en tout cas pour détecter d'où vient ce problème de paramètre, taille min doit être inferieure, comme il est en console il vaut mieux que je ne mette pas d'accent, a taille max. J'inclus le stdexcept et on a là un bon exemple d'utilisation d'exception standard. On va revenir à ce que l'on veut faire ici sur cette section c'est-à-dire voir comment avoir des exceptions personnalisées. Et là, il ne faut pas aller bien loin puisqu'on a des exceptions en suspens. On n'avait pas l'exception adéquate pour signaler notre problème de validation. On va pour ça créer une classe à nous, ExceptionValidation. Et pour qu'elle soit pratique à utiliser, qu'on puisse faire des affichages à utilisateurs pertinents, on va spécifier le champ qui pose problème. Comme ça quand on l'aura dans la liste pour les formulaires, on pourra spécifier quel champ pose problème et mettre une information, un message parlant, Texte trop court, et puis ici Texte trop long. Pour cela il va falloir créer une classe, ExceptionValidation. Je vais inclure cette classe avant même de l'avoir écrite. Il ne me le propose pas mais c'est normal puisqu'on va créer cette classe. Pour cela je crée un nouveau fichier, ExceptionValidation.h. Dans Code :: Blocks, j'ai l'espoir d'avoir un bon chemin. J'ai donc mon nouveau fichier ici, je vais pouvoir avec un .h, un peu compliqué peut-être, personnellement je mets plutôt EXCEPTIONVALIDATION_H. Cela me suffit. Après c'est à vous de voir en fonction. Ce que vous faites est ici, le code de mon exception, ici je suis donc toujours dans mon nouveau fichier je viens me coller le code pour gagner un peu de temps. On a notre classe ExceptionValidation qui est dérivée, cela est très important, c'est-à-dire runtime_error puisque c'est une erreur d’exécution c'est quelque chose de prévisible qui est dû à l'utilisateur. Donc, je ne peux pas contrôler ce que fait l'utilisateur au moment de la conception et donc ce n'est pas une erreur logique du programme. Je dois la gérer de la façon la plus normale possible pour l'utilisateur et pour l’accompagner pour corriger ce problème. Je le fais donc sous la forme d'une erreur runtime. Et je crée deux constructeurs pour des raisons pratiques. L'un qui prend une chaîne, l'autre const char * pour avoir plusieurs formats de messages. Ce message, je le passe à runtime_error qui lui le stocke mais aussi j'ai voulu ajouter un Champ pour des raisons pratiques ici qui est l'origine du problème, le champ qui est à l'origine qui permettra au formulaire de signaler sur ce champ-là et pas à un autre, qu'il y a eu un texte trop court. Et donc pour qu'il sache quel champ, je le stocke à l'intérieur de mon exception. Donc on a vraiment une exception personnalisée où on stocke des informations spécifiques. Et aussi on s'inspire et on utilise par l'héritage, le type exception standard runtime_error pour exception d’exécution. Je n'ai plus qu' à répercuter dans les autres classes où j'ai des champs aussi et des validations à spécifier : Là c'est ma classe, je vais récupérer l'exception levée dans ChampTexte. Et ici, non pas mettre Texte trop court mais Fichier inaccessible. Et puis ici un Nom de fichier requis. On inclut bien sûr Exception Validation.h. Ici j'ai trouvé puisque j'ai crée le fichier. Et pour la date, même chose, on va pouvoir satisfaire cette exception en disant, Date non valide. Bien sûr ma validation de date est relativement simple, on pourrait avoir des dates comme le 30 février, mais c'est juste pour l'exemple. En tout cas, on sait créer une exception dédiée au problème que l'on veut signaler à l'utilisateur en dérivant soit de runtime soit de logic_error selon la nature de l'exception. Il manque quelque chose de très important, qui est de capter une exception de façon à effectuer un traitement. C'est ce que nous allons voir juste après.

C++ : ​La gestion des erreurs avec les exceptions

Profitez des nombreux atouts des exceptions pour gérer les erreurs dans vos développements C++. Apprenez à les déclencher, les intercepter, les personnaliser, etc.

56 min (13 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :20 oct. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !