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
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();
};
mentre le 2 sottoclassi sono:
PILA CON VETTORE
codice:
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;
};
PILA CON LISTA
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 metodo di stampa è il seguente:
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();
}
}
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") ?