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