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!