Advertisement
giGii

exceptions

Jun 24th, 2023
524
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. class Greeter {
  6. public:
  7.     Greeter(const string& name)
  8.         : name_(name)  // Сохраняем name_ внутри
  9.     {
  10.         cout << "Hello, "s << name_ << endl;
  11.     }
  12.  
  13.     ~Greeter() {
  14.         cout << "Goodbye, "s << name_ << endl;
  15.     }
  16.  
  17. private:
  18.     string name_;
  19. };
  20.  
  21. // вывод 1) когда в { ... } происходит выбрасывание исключения, в этом { ... } разрушатся объекты,
  22. // только если исключение где-то ловится;
  23.  
  24. void Test2() {
  25.     Greeter e{"Test-E"s};
  26.     cout << "Throwing an exception from Test2()"s << endl;
  27.     throw domain_error("oops error!");
  28. }
  29.  
  30. void Test() {
  31.     Greeter a{"Test-A"s};
  32.     Greeter b{"Test-B"s};
  33.     try {
  34.         Greeter c{"Test-C"s};
  35.         try {
  36.             Greeter d("Test-D"s);
  37.             Test2();
  38.         } catch(const overflow_error& e) {
  39.             cout << "overflow_error: "s << e.what() << endl;
  40.             throw;
  41.         }/*  catch (...) {
  42.             throw;
  43.         } */
  44.     } catch (const runtime_error& e) {
  45.         cout << "runtime_error: "s << e.what() << endl;
  46.         throw;
  47.     }/*  catch(...) {
  48.         throw;
  49.     } */
  50. }
  51.  
  52. int main() {
  53.     Greeter greeter_main{"main"s};
  54.     try {
  55.         Greeter outer{"outer"s};
  56.         try {
  57.             Greeter inner{"inner"s};
  58.             try {
  59.                 Greeter inner_inner("inner-inner"s);
  60.                 Test();
  61.             } catch(const length_error& e) {
  62.                 cout << "length_error: "s << e.what() << endl;
  63.                 throw;
  64.             }/*  catch (...) {
  65.                 throw;
  66.             } */
  67.         } catch (const runtime_error& e) {
  68.             cout << "runtime_error: "s << e.what() << endl;
  69.             throw;
  70.         }
  71.     } catch (const overflow_error& e) {
  72.         cout << "overflow_error: "s << e.what() << endl;
  73.         throw;
  74.     }/*  catch (...) {
  75.         // throw; // если раскомментировать, то greeter_main не разрушится
  76.     } */
  77.     cout << "------"s << endl;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement