/* FILE: exception1.cpp last change: 12-Mar-2001 * Esempio di utilizzo delle eccezioni */ #include #include enum Errors {DIVIDEBYZERO, RANGE, STRANGE}; short div(short a, short b); short mul(short a, short b); short sum(short a, short b); short sub(short a, short b); short inv(short a); void loop(); main() { try { cout << "Inizia il programma!" << endl; loop(); } catch (Errors err) { if (err == STRANGE) cerr << "Si e` verificata una eccezione strana!" << endl; } catch (...) { cerr << "Eccezione eccezionale!!" << endl; } cout << "Fine del programma" << endl; exit(0); } void loop() { short a, b; char r; cout << "Inizia il loop" << endl; do { cout << "Dammi il primo operando: "; cin >> a; cout << "Dammi il secondo operando: "; cin >> b; try { cout << "La somma fra i due numeri e`: " << sum(a, b) << endl; cout << "La divisione fra i due numeri e`: " << div(a, b) << endl; cout << "La moltiplicazione fra i due numeri e`: " << mul(a, b) << endl; cout << "La sottrazione fra i due numeri e`: " << sub(a, b) << endl; cout << "L'inverso del primo numero e`: " << inv(a) << endl; cout << "L'inverso del secondo numero e`: " << inv(b) << endl; } catch (Errors err) { // Raccogliamo solo le eccezioni di tipo Errors switch(err) { case DIVIDEBYZERO: cerr << "Il divisore e` nullo" << endl; break; case RANGE: cerr << "Il risultato e` al di fuori del range di valori ammissibili" << endl; break; default: throw; } } cout << "Un'altra operazione?" << endl; cin >> r; } while ((r != 'n') && (r != 'N')); cout << "Fine del loop" << endl; } // Operazione di divisione fra short short div(short a, short b) { if (b == 0) throw DIVIDEBYZERO; // Eccezione se il divisore e` nullo return(a / b); } // Operazione di moltiplicazione fra short short mul(short a, short b) { long c = a * b; if (c > MAXSHORT) throw RANGE; // Eccezione se il risultato non e` uno short return((short)c); } // Operazione di somma fra short short sum(short a, short b) { long c = a + b; if (c > MAXSHORT) // Eccezione se il risultato non e` uno short throw RANGE; return((short)c); } // Operazione di sottrazione fra short short sub(short a, short b) { long c = a - b; if (c < 0) // Lanciamo una eccezione se il risultato e` negativo throw STRANGE; return((short)c); } // Operazione di inversione short inv(short a) { if (a == 0) throw 666; // Eccezione se il numero da invertire e` zero return(-a); }