C++ catch any exception

Description

C++ catch any exception

#include <iostream>
#include <string>
using std::string;

class Trouble/*w  ww .ja va  2s  .com*/
{
private:
  string message;
public:
  Trouble(string str = "There's a problem") : message {str} {}

  virtual ~Trouble(){}                               // Virtual destructor
  virtual string what() const { return message; }
};

class MoreTrouble : public Trouble {
public:
  MoreTrouble(string str = "There's more trouble...") : Trouble {str} {}
};

class BigTrouble : public MoreTrouble {
public:
  BigTrouble(string str = "Really big trouble...") : MoreTrouble {str} {}
};

int main(){
  Trouble trouble;
  MoreTrouble moreTrouble;
  BigTrouble bigTrouble;

  for (int i {}; i < 7; ++i){
    try{
      try{
        if (i == 3)
          throw trouble;
        else if (i == 5)
          throw moreTrouble;
        else if(i == 6)
          throw bigTrouble;
      }catch (...)                                // Catch any exception
      {
        std::cout << "We caught something! Let's rethrow it. " << std::endl;
        throw;                                   // Rethrow current exception
      }
    }
    catch (const Trouble& t)
    {
      std::cout << typeid(t).name() << " object caught in outer block: " << t.what() << std::endl;
    }
    std::cout << "End of the for loop (after the catch blocks) - i is " << i << std::endl;
  }
}



PreviousNext

Related