Ciao a tutti, in pratica ho la classe "utente" che contiene "data" con un contenimento lasco, utente ha un costruttore di copia ma quando lo uso mi risulta che le "date" di "u" e "u2" (istanze della classe utente) non sono separate: hanno stesso indirizzo e le modifiche su "u.d" vengono effettuate anche su "u2.d".
Se al posto del costruttore di copia uso quello commentato il programma mi da errore: "segmentation faul"
Qualcuno sa come aiutarmi?
file data
using namespace std;
class Data{
friend ostream& operator<<(ostream &,const Data&);
private:
int mese;
int anno;
public:
Data(const int m,const int a):mese(m),anno(a){}
ostream& stampa(ostream& out)const{
out<<mese<<" "<<anno;
return out;
}
};
ostream& operator<<(ostream& out,const Data &d){return d.stampa(out);}
file utente
#include "data.h"
using namespace std;
class Utente{
friend ostream& operator<<(ostream &,const Utente&);
private:
Data *d;
public:
Utente():d(NULL){} //costruttore vuoto
Utente(Data *di):d(di){} //costruttore
Utente(const Utente &u):d(u.d){} //costruttore di copia
/*Utente(const Utente &u){
*d=*(u.d);
} */
void setData(const Data &di){*d=di;}
};
ostream& operator<<(ostream& out,const Utente &u){out<<*(u.d)<<' '<<u.d; return out;}
file main
#include <iostream>
#include "Utente.h"
using namespace std;
int main(){
Data d(1,2000);
Data d2(2,222);
Utente u(&d);
Utente u2(u);
cout<<u<<'\n'<<u2<<'\n';
u.setData(d2);
cout<<u<<'\n'<<u2<<'\n';
}