namespace { void clearScreen (void) { cout << "\033[2J\033[1;1H" << flush; } // clearScreen() char choixDansMenu (void) { clearScreen(); cout << "A : exception 'exception'\n" "B : exception standard specifique\n" "C : exception 'CException'\n" "D : exception inconnue\n\n" "Votre choix (suivi de) : "; char choix; cin >> choix; clearScreen(); return choix; } // ChoixDansMenu() void traiterCommande (char cmd) { switch (cmd) { case 'A' : case 'a' : throw exception (); case 'B' : case 'b' : { // throw runtime_error ("erreur d'execution ..."); string s; cout << s.at (0); break; // inutile puisqu'une exception est levee avant } case 'C' : case 'c' : throw CException ("Surprise, surprise !", 123); case 'D' : case 'd' : throw 123; } } // traiterCommande() void testExceptionsInMain () { for ( ; ; ) traiterCommande (choixDansMenu()); } // testExceptionsInMain() } // namespace int main () { try { testExceptionsInMain (); return KNoExc; } catch (const CException & e) { cerr << "Erreur : " << e.getLibelle () << '\n' << "Code d'erreur = " << e.getCodErr () << '\n'; return e.getCodErr(); } catch (const out_of_range & e) // levee par string::at() { cerr << "Exception out_of_range : " << e.what () << '\n'; return KExcStd; } */ /* catch (const runtime_error & e) { cerr << "Exception runtime_error : " << e.what () << '\n'; return KExcStd; } */ catch (const exception & e) { cerr << "Exception standard : " << e.what () << '\n'; return KExcStd; } /* catch (const unsigned & e) { cerr << "Exception unsigned : " << e << '\n'; return KExcStd; } catch (const int & e) { cerr << "Exception int : " << e << '\n'; return KExcStd; } */ catch (...) { cerr << "Exception inconnue\n"; return KExcInconnue; } } // main()