ciao a tutti,
ho una classe lista e al suo interno ho definito anche il costruttore di copia e la ridefinizione dell'operatore assegnazione (=) in modo che facendo nel main C c1=c; si ottenga in c1 una copia dell'oggetto c. Ebbene, riesco ad ottenere una copia dell'oggetto c ma gli elementi della copia sono ordinati al contrario!
Ecco la classe:
codice:
typedef int E;
struct Record{
E elem;
Record* punt;
};
typedef Record* L;
class lista{
private:
L l;
void inserisciric(L& l, E e);
void eliminaric(L& l, E e);
void elimina_testa(L& l);
public:
lista(){ l=0;}
lista(const lista &);
lista& operator=(const lista & );
~lista();
void copialista(const lista &);
void push(E e);
void pop(E e);
void inserisci(E e){ inserisciric(l,e);}
void elimina(E e){ inserisciric(l,e);}
bool empty(){ return (l==0);}
void top(E e);
void print()const;
};
e l'implementazione della classe:
codice:
//costruttore di copia
lista::lista(const lista& lista) {
copialista(lista);
}
//ridefinizione operatore di assegnazione
lista& lista::operator = (const lista& lista) {
copialista(lista);
}
lista::~lista(){
L q,p;
for (p=l; p!=0; p=q){
q=p->punt;
delete p;
}
}
//funzione copia elemento per elemento, richiamata nel costruttore di copia
void lista::copialista(const lista & lista){
L q = lista.l;
l = 0;
while(q)
{
push(q->elem);
q = q->punt;
}
}
void lista::push(E e){
L q=new Record;
q->elem=e;
q->punt=l;
l=q;
}
void lista::print() const
{
L q = l;
while (q!=0){
cout << "Elemento: " << q->elem << " ";
q = q->punt;
}
}
dove sbaglio???
ciao!