Maison  >  Article  >  développement back-end  >  Exemple de programme C++ montrant la gestion des exceptions

Exemple de programme C++ montrant la gestion des exceptions

WBOY
WBOYavant
2023-09-05 16:53:051188parcourir

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

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
  • 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);
      }
    sortie
  • long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}};
    solve(2, arr);

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer