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!