Ciao a tutti,
ho copiato il seguente programma da un testo, ma non mi sono molto chiare delle cose:
Come mai viene richiamato solo 1 volta il costruttore e 3 volte il distruttore ?
Come mai l'istruziome throw lancia solo il nome della classe (di solito non si lavora con gli oggetti ? )
Se tale classe lanciata da throw viene distrutta subito dopo il lancio dell' eccezione, ( vedere nell' output l' avvio del distruttore) , come fa il blocco catch a prelevarne i valori inizializzati ?
Vi allego il programmino
Grazie a tutti.
Ciao
codice:#include <iostream> using namespace std; class MyException { public: char str_what[80]; int what; MyException() { cout <<" costruttore senza parametri\n"; *str_what =0; what =0; } MyException( char *s, int e ) { cout <<" costruttore con parametri\n"; strcpy(str_what, s); what = e; } ~MyException() { cout <<" distruttore\n"; } }; void main(void) { int i; try { cout << "mettere un numero positivo \n"; cin >> i; if (i <0) throw MyException (" il nomero e' negativo: ", i ); } catch(MyException e) { cout << e.str_what; cout << e.what; cout <<"\n"; } cout <<" \nFINE\n"; }
ora avviatelo, e mettete un numero negativo.
Vi dovrebbe apparire il seguente output:
Codice PHP:mettere un n. positivo
-4 /* numero immesso dall'utente */
costruttore con parametri
distruttore /*cosa ho distrutto? Non ho creato alcun oggetto... */
il numero e' negativo: -5 /* ma se ho distrutto il presunto oggetto, come mai ritrovo i valori inizializzati precedentemente? */
distruttore
distruttore
FINE

Rispondi quotando
mmmh temo di non essere stato molto chiaro, vedo che non ci sono risposte.....
