Salve a tutti
Vorrei chiedere se qualcuno mi potrebbe dare una mano con le sottoclassi. In poche parole ho una superclasse per la gestione delle Pile che contiene solo metodi virtuali e il metodo di stampa (non virtuali). Non ho dichiarato la parte "private" in quanto le sottoclassi hanno attributi diversi. Una sottoclasse permette la gestione della pila con le liste e un'altra permette di gestirla con un vettore.
Il metodo di stampa ereditato dalle 2 sottoclassi dovrebbe avere all'interno una variabile di tipo "Pila" da utilizzare per salvarci temporaneamente i dati estratti dalla pila da stampare. Le classi sono state dichiarate in questo modo:
SUPERCLASSE
mentre le 2 sottoclassi sono:codice:template <class T> class Pila { public: typedef T tipoelem; virtual void creaPila() =0; virtual bool pilaVuota() =0; virtual tipoelem leggiPila() =0; virtual void fuoriPila() =0; virtual void inPila(tipoelem a) =0; void stampaPila(); };
PILA CON VETTORE
PILA CON LISTAcodice:template <class T> class pileV : public Pila<T> { public: typedef typename Pila<T>::tipoelem tipoelem; pileV(); void creaPila(); bool pilaVuota(); tipoelem leggiPila(); void fuoriPila(); void inPila(tipoelem); //void stampaPila(); private: tipoelem *elementi; int MAXLUNGH; int testa; };
Il metodo di stampa è il seguente:codice:template <class T> class pileL : public Pila <T> { public: typedef typename Pila<T>::tipoelem tipoelem; typedef typename ListaP<T>::posizione posizione; pileL(); //~pileL(); void creaPila(); bool pilaVuota(); tipoelem leggiPila(); void fuoriPila(); void inPila(tipoelem a); private: ListaP<tipoelem> elementi; int lung; posizione testa; };
Il problema è questo: nel metodo di stampa la dichiarazione della variabile l1 di tipo Pila<T> non è accettata. Come posso fare per generalizzare la variabile (in quanto la variabile è troppo "generale") ?codice:template <class T> void Pila<T>::stampaPila() { Pila<T> l1; while( !pilaVuota() ) { cout << leggiPila() << endl; l1.inPila(leggiPila()); fuoriPila(); } while( !l1.pilaVuota() ) { inPila(l1.leggiPila()); l1.fuoriPila(); } }

Rispondi quotando
