Exceptions en C ++





exceptions en c ++, c ++ exceptions, Programmation pour les débutants

parfois, pendant les programmes, il y a des situations qui entravent encore leur travail normal. Par exemple, en divisant le nombre de zéro, le programme fonctionnera en dépit du fait, Combien d'utilisateurs travaillant dans le programme, et des données combien est faite. Le programme se ferme tout simplement. Et imaginez, si elle est introduite avant que les données du programme utilisateur et quelques heures passées calculs. При таком аварийном закрытии программы все эти данные и расчеты пропадут. accepter – pas très agréable. Il peut également répondre à cette situation, lorsqu'un programme tente d'ouvrir ne sont pas disponibles à ce fichier instant, ou demander plus, que la mémoire disponible.

Ce genre de situation, les programmeurs doivent essayer d'anticiper et d'applications de conception, de sorte qu'ils puissent répondre de manière flexible, au lieu de l'arrêt d'urgence. Dans mon livre préféré La ++ programmation en langage C. Conférences et séminaires автора С. Prata, compte tenu de la définition suivante des exceptions en C ++:

exceptions en c ++, c ++ exceptions, Programmation pour les débutants

Pour vous, il ne fut pas difficile de comprendre le mécanisme des exceptions en C ++, ils considèrent l'exemple simple. Dans ce document, nous prévoyons le cas, à un certain moment au cours des calculs du programme, может встретиться деление числа на 0. Наберите и скомпилируйте код, dessous. Pour vous assurer que, comment le programme répond à cette situation, remplir les numéros 0 variable num2 (il agit diviseur Exemple).

Depuis la variable était est 3, cycle tandis que, en situation normale, doit travailler trois fois. À chaque étape du cycle était décrémenté via décroissance. Mais comme nous avons juste valeur 0 variable num2, le programme ne se déroule pas jusqu'à la fin de même que la première étape du cycle. Elle interrompit.

La liste suivante, nous allons corriger cette omission – ajouter quelques composants, pour aider à répondre à cette situation sans interrompre le programme. à savoir:

  • bloc Essai ou Essai-bloc (tentative, échantillon);
  • генератор исключения – bloc jeter (traiter, course);
  • обработчик исключения, который его перехватывает -команда capture (capture, capture)

Comment une exception? – Les registres de programmeur dans le code (dans Essai-bloc) condition spécifique, que, si la variable num2 sera égal à 0, то в таком случае необходимо генерировать исключение в jeter. plus, то что сгенерировал jeter, перехватывает capture-bloc (en fonction du paramètre) et le programme va exécuter le code, qui est enregistré dans ce bloc.

exemple:

comprendre en détail. lignes 21-29 находится блок Essai. Il est nécessaire de placer le code, qui peut conduire à des erreurs irréversibles. Avant une expression arithmétique divisant les conditions données: si num2 Il est égal à 0, то пусть jeter génère un certain nombre 999 (par exemple). Dans le cas, immédiatement après la génération de, дальнейшие команды в блоке Essai ne seront plus effectués, et le grand nombre “tomber” в блок capture (en tant que paramètre). Ensuite, effectuer la, что указано в блоке capture – dans ce cas, ceci est un message d'erreur:

cout << "Numéro d'erreur" << thr << " - division par 0!!!" << endl;

et le programme va exécuter les commandes suivantes. Dans le cas, если число num2 != 0, elle ne génère rien et jeter capture-appareil ne fonctionne pas.

Regarder maintenant, comment réagir au programme, если вы введете num2 zéro. exécuter le programme.

exceptions en c ++, c ++ exceptions, Programmation pour les débutants

Comme vous pouvez le voir, où il pourrait y avoir une erreur et l'achèvement rapide du programme, nous avons vu un message erreur №999 – division par 0!!! programme “sauté” grâce à l'opération de division sur 0 и выполнила capture-bloc.

Pour vous aider à mieux comprendre, как значение генерируемое jeter перехватывает capture-bloc, remplacer le code dans les lignes 21 – 33 cette:

Dans cet exemple,, si num2 est 0, jeter génère une chaîne, et non le nombre. rangée “chutes” dans capture-et l'unité affichée.

Regardons un exemple, quand une exception est générée fonctions, divise ce nombre par un autre:

A l'exclusion a fonctionné correctement, эту функцию надо вызвать в блоке Essai:

capture le nombre d'interceptions 99, une division de 0 ne pourra être tenu.

principal, vous devez vous rappeler les exceptions en C ++:

  • la Essai-bloc (réessayez bloc) vous devez placer le code, ce qui pourrait potentiellement conduire à la fermeture du programme d'urgence;
  • Исключение генерируется в блоке jeter. si jeter сработает программа автоматически приступит к выполнению команд capture-bloc, en ignorant le reste du code dans Essai-bloc;
  • Le bloc de piège – capture-bloc, capture la, что генерирует блок jeter. Он обязательно должен находиться под Essai-bloc. Ничего не должно быть прописано между ними;
  • capture-appareil ne fonctionne pas, si l'exception n'a pas été générée. Le programme tout simplement ignorer.

Pour soutenir notre site – cliquez sur la tirelire. Il vous sera demandé d'envoyer un SMS. somme – votre choix.

Bulletin de nouvelles leçons sur la programmation:

date
page
Exceptions en C ++
évaluation
51étoile1étoile1étoile1étoile1étoile

4 réflexions sur "Exceptions en C ++

  1. en fait, тема исключений в любом языке программированиядостаточно скользкая. Такой механизм вносит как свои преимущества, так и свои недостатки и скрытые опасности использования.
    Язык C++производный от C, и в это развитие включили исключения. Следующее развитие (2008-2009г.г.) языка Cэто язык Go. Из него исключения были разработчиками исключены и с очень обстоятельной опубликованной аргументацией почему они это сделали.
    Реюме: исключения в C++ нужно использовать, но только там, где они крайне необходимы, где без них нельзя обойтись. В остальных случаях лучше использовать традиционный возврат кода ошибки.

  2. Помогите люди добрые!!! Что неправильно с try у меня?

    1. А у вас до throw дело не доходитаварийное завершение наступает раньше, при делении на 0.

      И параметром catch должно быть что-то, наследуемое от класса исключений:

  3. Здравствуйте. У вас ошибка в третьем листинге.

    cout << num1 / num2 << endl; //нужно вывести за пределы оператора if. иначе не работает.

Laisser un commentaire

Placez le code dans les balises: <pre class="lang:c ++ décodage:true ">VOTRE CODE</pré>