Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    97

    Costruttori , distruttori ed eccezioni

    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 npositivo
    -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 

  2. #2
    allora,non potendo provarlo qui, ho capito solo che il costruttore viene chiamato quando lanci l' eccezione..
    poi alla fine del ciclo viene distrutto,
    e poi non so, devo prima guardare a casa e capire...
    ciao..

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    97

    Piccola correzione,

    ..ho commesso un piccolo errore di battitura, immettendo un n. negativo (nell' esempio. -4) il programma risponde: "il numero e' negativo: -4 " ( e non -5 come riportato precedentemente....).
    Ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    97
    mmmh temo di non essere stato molto chiaro, vedo che non ci sono risposte.....
    HELP !!!
    Ciao
    Sergio

  5. #5
    Come mai l'istruziome throw lancia solo il nome della classe (di solito non si lavora con gli oggetti ? )
    codice:
    throw MyException (" il nomero e' negativo: ", i );
    Non lo vedi che lancia un oggetto temporaneo? Lo fa chiamando il costruttore (nome della classe) e, in questo caso, passandogli anche dei parametri.

    Per quanto riguarda l`output, hai dimenticato di tener traccia di un altro costruttore: il costruttore di copia. Piazza un output anche in quello e vedrai che probabilmente capirai il meccanismo che sta dietro a tutto cio`. Se hai problemi riposta.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    97
    r0x,
    innanzitutto grazie tantissimo per la risposta.
    Per il 1 punto, OK, non sapevo dell' esistenza di oggetti temporanei (generati chiamando il costruttore di copie).

    Per il 2 punto, ho purtroppo ancora dei dubbi.
    Il costruttore di copie non e' quel costruttore in grado di effettuare una copia differente dalla solita copia bit a bit ?

    Io non ho creato alcun costruttore di copie nella classe MyException
    ( differentemente avrei impostato un costruttore nel seguente modo:

    MyException(cons MyException &obj)
    {
    //corpo del costruttore
    }
    Non dirmi che esiste un costruttore di copie implicito....
    Hai voglia di spiegarmi meglio dove e come viene avviato il costruttore di copie nel mio programma ?

    Spero di sentirti presto
    Ciao ciao...

    P.s. Ma tu il C++ dove lo hai imparato ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.