Esercizio 8
Scrivi un programma che istanziata una classe T
permetta ad un oggetto di tale classe di comportarsi indifferentemente come
una coda (il primo entrante è il primo uscente) oppure come una pila (il
primo entrante è l'ultimo uscente).
La classe T può essere derivata dalla classe V
dove viene allocato un vettore di n posti.
La classe V, genitrice, sarà dotata di un costruttore
che inizializza il vettore e l'indice delle posizioni occupate, di un metodo
print() per stampare il vettore e di un metodo set()
per inserire un elemento nel vettore. La classe derivata T,
può essere dotata soltanto di due metodi getpila() e
getcoda(); che permettono di estrarre i dati secondo
la modalità della pila oppure quello della coda .
#include<iostream>
using namespace std;
class V{
static const int n=5;
protected:
int q[n];
int j;
public:
V();
void set(int a);
void print();
};
//_______implementazione dei metodi classe V
V::V(){
for(int i=0;i < n;i++)q[i]=0;
j=0;
cout << "oggetto costruito\n";
}
void V::print(){
for(int i=0;i < n;i++)cout << q[i] << " ";
cout << "[" << j << "]"; cout << "\n"; }
void V::set(int a){
if(j < n){
q[j]=a;
j++;
print();
}//fine if
} //______________________fine classe V
class T: public V {
public:
void getpila();
void getcoda();
};
void T::getpila(){
if(j > 0){
q[j-1]=0;
j--;
print();
}//fine if
}
void T::getcoda(){
if(j > 0){
for(int i=0;i < j;i++)q[i]=q[i+1];
q[j-1]=0;
j--;
print();
}//fine if
} //______________fine classe T
main(){
T q;
q.print();
q.set(2);
q.set(3);
q.set(5);
q.getcoda();
q.getpila();
}//__________fine main
C'è la classe base V che
memorizza il vettore di interi, al suo interno sono definiti i metodi print()
che serve per stampare il vettore fino alla posizione j (cioè, fin
dove il vettore è stato usato) e il metodo set(int
a).
Questa scelta è resa possibile dal fatto che sia per la pila he per
la coda, l'inserimento avviene nello stesso modo, cioè dalla prima
posizione libera a partire da sinistra nel vettore. Nella classe derivata
T ci sono solo i due metodi getcoda()
e getpila() che vengono usati a secondo se
la struttura deve comportarsi come coda o come pila.