[C++] Classe Pila

bblack25
Ciao a tutti,
non mi è chiaro cosa succede nel ciclo for nell'implementazione dell'overloading dell'operatore <<.
Potreste spiegarmelo?
class Pila {
private:   
    static const int N=2;          
    T P[N];
    int t;    
public:
//Funzioni
Pila();
void push(const T &);
void pop(T&);
void top(T&) const;

friend ostream & operator<<(ostream &, const Pila &);
};


Pila::Pila(){
  t=0;
}

void Pila::push(const T & e){
      P[t]=e;
      t++;
}

void Pila::pop(T& e){
       t--;
       e=P[t];
}

void Pila::top(T& e) const{
     e=P[t-1];
}
ostream & operator<<(ostream & os, const Pila & p) {
     for(int i=p.P[p.t-1]; i>=0; i--)        //questo punto non mi è chiaro
       os << p.P[i] << endl;
     return os;  
}


Grazie dell'aiuto!! :smt023

Risposte
vict85
Fa si che ogni "stampa" su file o video di una pila consista in una stampa degli elementi della pila in verticale.

Per esempio ti permette di dare cout<< p dove p è una Pila.

claudio862
Non è chiarissimo nemmeno a me perché sia scritta così:

ostream & operator<<(ostream & os, const Pila & p) {
     for(int i=p.P[p.t-1]; i>=0; i--)        // questo punto non mi è chiaro
       os << p.P[i] << endl;
     return os;  
}


i dovrebbe partire dalla posizione dell'ultimo elemento della pila (p.t - 1), non dal suo valore (p.P[p.t - 1]).

ostream & operator<<(ostream & os, const Pila & p) {
     for(int i = p.t - 1; i >= 0; i--)        // adesso è un po' più chiaro
       os << p.P[i] << endl;
     return os;  
}


Inoltre, una pila per massimo 2 elementi mi sembra poco utile.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.