ciao a tutti. ho una classe persona in cui c'è un elemento indirizzo, che è una struttura a parte.
la struct indirizzo è
mentre la class persona ècodice:#include <iostream> #include <cstring> using namespace std; struct indirizzo { char *via; char *paese; int cap; indirizzo(char*vi,char*paes,int ca); indirizzo(const indirizzo &obj); ~indirizzo(); }; indirizzo::indirizzo(char*vi,char*paes,int ca) { via=new char[strlen(vi)+1]; if(!via) exit(1); strcpy(via,vi); paese=new char[strlen(paes)+1]; if(!paese) exit(1); strcpy(paese,paes); cap=ca; } indirizzo::indirizzo(const indirizzo &obj) { via=new char[strlen(obj.via)+1]; if(!via) exit(1); strcpy(via,obj.via); paese=new char[strlen(obj.paese)+1]; if(!paese) exit(1); strcpy(paese,obj.paese); cap=obj.cap; } indirizzo::~indirizzo() { if(via) delete [] via; if(paese) delete [] paese; }
mi chiedo: come fare passare i parametri al costruttore di indirizzo?codice:class persona { char *nome; char *cognome; indirizzo i; public: persona(char*nom,char*cognom,char*vi,char*paes,int ca); persona(const persona &obj); ~persona(); }; persona::persona(char*nom,char*cognom,char*vi,char*paes,int ca) { nome=new char[strlen(nom)+1]; if(!nome) exit(1); strcpy(nome,nom); cognome=new char[strlen(cognom)+1]; if(!cognome) exit(1); strcpy(cognome,cognom); } persona::persona(const persona &obj) { nome=new char[strlen(obj.nome)+1]; if(!nome) exit(1); strcpy(nome,obj.nome); cognome=new char[strlen(obj.cognome)+1]; if(!cognome) exit(1); strcpy(cognome,obj.cognome); i.via=new char[strlen(obj.i.via)+1]; if(!i.via) exit(1); strcpy(i.via,obj.i.via); i.paese=new char[strlen(obj.i.paese)+1]; if(!i.paese) exit(1); strcpy(i.paese,obj.i.paese); i.cap=obj.i.cap; } persona::~persona() { if(nome) delete [] nome; if(cognome) delete [] cognome; }
inoltre, nel costruttore di copia di persona faccio bene ad accedere ai dati di indirizzo direttamente con i.via, o è necessario sperificare nell'intestazione qualcosa tipo :i(via,paese,cap)?
e nel distruttore di persona come faccio partire il distruttore di indirizzo?
grazie..ciao

Rispondi quotando