Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [C++] Clonare oggetto

  1. #1

    [C++] Clonare oggetto

    Ciao,
    sono nuovo del c++ e vorrei sapere se esiste una funzione per clonare oggetti (tipo il oggetto.clone() in java)

    Grazie

  2. #2
    Non è necessario, infatti quando assegni un oggetto ad un altro di fatto lo cloni. Questo perché per il C++ anche le classi sono tipi by value e non by reference.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Grazie per la risposta.

    Non ho capito una cosa però... Facciamo un esempio semplice:

    codice:
    class P { 
    public:  
     int x;
    };
    
    P *prova = new P();
    P *prova2;
    prova2 = prova;
    Anche quando faccio l'ultimo assegnamento l'oggetto viene "clonato" oppure in questo caso è solamente un assegnamento di un puntatore ad un altro?

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    sono 2 puntatori quindi cambia l'indirizzo e non l'oggetto puntato..

  5. #5
    sono 2 puntatori quindi cambia l'indirizzo e non l'oggetto puntato..
    Si io vorrei che si "sdoppiasse" l'oggetto però. Come posso fare?

  6. #6
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    nel tuo codice
    codice:
    class P { 
    public:  
     int x;
    };
    
    P *prova = new P();
    P *prova2;
    *prova2 = *prova; //i riferimenti quindi qindi gli oggetti
    
    OPPURE
    
    class P { 
    public:  
     int x;
    };
    
    P prova = P();
    P prova2;
    prova2 = prova;

  7. #7
    Grazie mille

  8. #8
    Ciao,
    il metodo però non funziona se all'interno della classe ho puntatori a strutture dati...
    Per esempio:
    codice:
    class P {
     private:
     	int *x;
     public:
     	P();
     	void setX(int);
     	int getX();
    };
    
    P::P() {
    	// TODO Auto-generated constructor stub
    	x = (int*) malloc(sizeof(int));
    }
    
    int P::getX() {
    	return *x;
    }
    
    void P::setX(int a) {
    	*x = a;
    }
    
    int main() {
    
    	P prova = P();
    	P prova2;
    	prova2 = prova;
    	prova2.setX(10);
    	prova.setX(11);
    	cout<<prova.getX()<<" "<<prova2.getX();
    }
    L'output è 11 11


  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Allora penso che devi scrivere un tuo

    Costruttore di Copia
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Si
    googlando ho trovato questo...

    Cloning

    Grazie mille

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.