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

Exemple de programme C++ montrant la gestion des exceptions

WBOY
Libérer: 2023-09-05 16:53:05
avant
1230 Les gens l'ont consulté

Exemple de programme C++ montrant la gestion des exceptions

Supposons qu'il existe une fonction qui calcule des opérations mathématiques complexes. Cependant, quelques exceptions peuvent survenir lors de l'opération. Nous devons gérer les différents types d'exceptions qui peuvent survenir et procéder comme suit.

  • Si l'ordinateur ne peut pas allouer de mémoire pour le calcul, nous devons imprimer « Mémoire insuffisante ! »
  • Si une autre exception liée au C++ se produit, nous devons imprimer « Exception : » suivi du message d'exception.
  • Si quelque chose d'autre se produit, nous imprimons "Exception non gérée".

Nous avons un tableau contenant une paire de valeurs et le passons à une fonction. Si une exception se produit, nous la traitons, sinon nous imprimons la valeur.

Nous devons uniquement gérer les exceptions, quel que soit le mécanisme par lequel les fonctions génèrent des exceptions.

Donc, si l'entrée est arr = {{361643035132, 2297873642249}, {-17, 15}};, alors la sortie sera -

Memory Low!
Exception: val1 is negative
Copier après la connexion

La première paire de valeurs est trop grande à gérer, donc "Out de mémoire" est imprimé. La première valeur de la deuxième paire de valeurs est un nombre négatif. La fonction fournie ne peut pas le gérer, donc l'exception "val1 est négatif" est générée/lancée,

Pour résoudre ce problème, nous suivrons les étapes suivantes −

  • Initialiser i := 0, mettre à jour quand i < Augmentez i de 1), exécutez −
    • val1 := valeurs[i, 0]
    • val2 := valeurs[i, 1]
    • try,
      • print (foo(val1, val2))
    • if Impossible d'allouer de la mémoire (exception bad_alloc interceptée), alors
      • imprime "Mémoire insuffisante !"
    • Sinon, si une autre exception C++ standard est interceptée,
      • imprime "Exception :"
      • imprime les détails de l'exception +
      • #include <iostream>
        #include <exception>
        #include <string>
        #include <stdexcept>
        #include <vector>
        #include <cmath>
        using namespace std;
        
        class Solution {
        private:
           static int value;
        public:
           static int foo(long long val1, long long val2) {
              value += 1;
              if(val1 < 0) {
                 throw std::invalid_argument("val1 is negative");
              }
              vector<int> vectorList(val1, 0);
              int r = -1, c = sqrt(-1);
              if(val2 == 0) throw 0;
              r = (val1 / val2) * r;
              int ans = vectorList.at(val2);
              return r + val1 - val2 * ans;
           }
           static int getVal() {
              return value;
           }
        };
        int Solution::value = 0;
        
        void solve(int t, long int values[][2]) {
           for (int i = 0; i < t; i++) {
              long long val1, val2;
              val1 = values[i][0];
              val2 = values[i][1];
              try {
                 cout << Solution::foo(val1, val2) << &#39;\n&#39;;
              }
              catch (const std::bad_alloc&) {
                 cout << "Memory Low!\n";
              }
              catch (const std::exception& e) {
                 cout << "Exception: " << e.what() << &#39;\n&#39;;
              }
              catch (...) {
                 cout << "Unhandled Exception\n";
              }
           }
        }
        int main() {
           long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}};
           solve(2, arr);
        }
        Copier après la connexion
      sortie
    • long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}};
      solve(2, arr);
      Copier après la connexion
    • 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:tutorialspoint.com
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