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

    problema ereditarietà

    salve a tutti!
    vi spiego il mio problema... devo implementare una classe derivata che implementi una lista ordinata:

    questa la classe base:
    codice:
    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
      lista operator-(lista l1);       //overload operator - (elimina elementi comuni)
           
    };
    questa è la classe derivata che ho implementato:
    codice:
    class derivata:public lista{
        nodo *ld;
    
        nodo * pushord(nodo *p , int x );
    public:  
        derivata(){ld=0;}  //costruttore
        ~derivata();      //distruttore
       
    void insord(int);  //Inserimento ordinato con ricorsione
    
    
    };
    questa è la funzione che ho usato per la la lista ordinata:

    codice:
    void derivata::insord(int x){
        
        ld=pushord(ld,x);
        
    }
    
    nodo * derivata::pushord(nodo *p , int x ){
        nodo *q;
        if(p==NULL || x<=p->valore){   //Base della ricorsione
            q=new nodo;
            q->valore=x;
            q->succ=p;
            p=q;
        }
        else
            p->succ=pushord(p->succ, x);  //ricorsione
        return p;
    }
    non mi da errori di compilazione, sembra funzionare tutto..o quasi!

    se nel main utilizzo la funzione push() della classe base, allora posso utilizzare la funzione stampa() della stessa classe base, ma quando uso la funzione insord() della classe derivata, la funzione stampa non funziona!!

    ho provato ad implementare nella classe derivata una funzione print (che non è altro che un copia incolla della funzione stampa, ovviamente con il nodo *ld anzichè *l) e succede che mi stampa solo gli elementi inseriti da insord(), mentre se utilizzo la funzione push della classe base non funziona!

    spero di essere stato vagamente chiaro! grazie!

  2. #2
    Perché nella classe derivata definisci e usi ld? Devi usare l (che è disponibile dato che derivi dalla classe base), altrimenti classe base e classe derivata operano su due liste diverse...
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    25
    Originariamente inviato da MItaly
    Perché nella classe derivata definisci e usi ld? Devi usare l (che è disponibile dato che derivi dalla classe base), altrimenti classe base e classe derivata operano su due liste diverse...


    Grazie mille! Ora funziona! Ho spostato il nodo l in public e nella derivata non l'ho ri-definito!

  4. #4

    ... ma bastava spostarlo in protected.
    Amaro C++, il gusto pieno dell'undefined behavior.

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