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!