Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    25

    [C++] Overloading operatori e costruttore di assegnazione

    Salve a tutti!
    Nello stesso progetto devo implementare il costruttore di assegnazione ed una funzione che, ricevuta una lista come argomento, elimini i valori comuni.

    Questo è il codice della classe lista:
    codice:
    struct nodo
    {
       int valore;
       nodo *succ;
    };
    
    class lista
    {
      nodo *l;
    
      nodo* insert(nodo *p,int x);
      bool find(nodo *, int);
      nodo* split(nodo *l1);
      nodo* Merge(nodo *l1, nodo *l2);
      nodo* MergeSort(nodo *list);
    
      public:
    
      lista(){l=0;}       // costruttore
      ~lista();           // distruttore
      void push(int);
      bool cancella(int);
      void stampa();
      bool trova(int);
      void ordina();
           
     lista(const lista &L);                    //Costruttore di copia OK
     //lista operator= (const lista &L);             //Costruttore di assegnazione  
     lista operator- (lista L);                          //Overloading
    };

    Questo è il codice del costruttore di assegnazione da me implementato:
    codice:
    lista lista::operator=(const lista &L){
       
        
        nodo *p,*q,*r;
          
        p=L.l;
        
            
        l=0;
            if (p==0)
            cout<<"La lista è vuota";
            else 
                while (p!=0){
                    
                q=new nodo;
        if(l==0)
            l=q;
        else
            q->valore=p->valore;
            r->succ=p;
            r=q;
            p=p->succ;
                    }q=q->succ;
                    return *this;
        }
    Mentre questa è la funzione overload:
    codice:
    lista lista::operator-(lista L){
        lista temp,nuova;  
        nodo *lp,*lc;
        temp=*this;
        lc=temp.l;
        lp=L.l;
           
        if(lc==0)
            cout<<"Lista vuota";
        else
            while (lc!=0) {
                nuova.push(lc->valore);
                lc=lc->succ;
            }
                 while (lp!=0){
                     if (nuova.trova(lp->valore)== true){
                         nuova.cancella(lp->valore);
                         lp=lp->succ;
                     }
                     else 
                         lp=lp->succ;
            }return nuova;   
        
    }

    Ho provato ad effettuare le operazioni direttamente sulla lista temp=*this, anzichè copiare i valori in una nuova lista, ma il codice non funzionava. Ovvero non mi dava errori, ma quando chiamava la funzione mi restituiva valori anomali. (come return ho provato sia temp che this, ma niente da fare) Qualcuno sa spiegarmi il motivo??
    Il problema è che implemento entrambe le funzioni il compilatori mi dice RUN FAILED, anche se non ci sono errori. Mentre se elimino il costruttore di assegnazione la funzione overload funziona. Come mai?
    Nel main ho scritto:
    codice:
                            
                    nuova=esame.operator -(arg);
                    nuova.stampa();
    Grazie!

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    25
    C'è qualcuno che mi da una mano???

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 © 2024 vBulletin Solutions, Inc. All rights reserved.