Plantilla de clase Pila

#ifndef TPILA1_H
#define TPILA1_H
 
template< class T >
class Pila {
public:
   Pila( int = 10 );    // constructor predeterminado (el tamaño de la pila es 10)
   ~Pila() { delete [] ptrPila; } // destructor
   bool push( const T& ); // coloca un elemento en la pila
   bool pop( T& );        // saca un elemento de la pila
private:
   int tamanio;             // # de elementos en la pila
   int cima;              // ubicación del elemento cima
   T *ptrPila;          // apuntador a la pila
 
   bool estaVacia() const { return cima == -1; }      // funciones de
   bool estaLlena() const { return cima == tamanio - 1; } // utilidad
}; // fin de la plantilla de clase Pila
 
// Constructor con un tamaño predeterminado de 10
template< class T >
Pila< T >::Pila( int tam )
{
   tamanio = tam > 0 ? tam : 10;  
   cima = -1;               // La Pila inicialmente está vacía
   ptrPila = new T[ tamanio ]; // asigna espacio para los elementos
} // fin del constructor Pila
 
// Coloca un elemento en la pila
// devuelve 1 si tiene éxito, de lo contrario devuelve 0 
template< class T >
bool Pila< T >::push( const T &colocaValor )
{
   if ( !estaLlena() ) {
      ptrPila[ ++cima ] = colocaValor; // coloca el elemento en la Pila
      return true;  // si la colocación fue exitosa
   } // end if
   return false;     // si la colocación no fue exitosa
} // fin de la plantilla de función push
 
// Saca un elemento de la pila
template< class T > 
bool Pila< T >::pop( T &sacaValor )
{
   if ( !estaVacia() ) {
      sacaValor = ptrPila[ cima-- ];  // saca el elemento de la Pila
      return true;  // si la eliminación fue exitosa
   } // end if
   return false;     // si la eliminación no fue exitosa
} // fin de la plantilla de función pop
 
#endif
 

¿Has encontrado algún error? ¿Tienes la solución? Dejame tu correción ;-)

Antes de comentar: Gran parte de los ejercicios propuestos no tienen librerías debido a que Wordpress las eliminó al verlas como etiquetas HTML. Si sabes/tienes/conoces las librerías que hacen falta, déjalo en los comentarios. Y lo mas importante: Todos los ejemplos fueron realizados por personas con únicamente conocimiento básico del lenguaje, no de programación.

Otro punto importante: Si vas a sugerir un segmento de código en algún lenguaje debes hacerlo así:

  • Si es lenguaje C [c]Código en C[/c]
  • Si es lenguaje Pascal [pascal]Aquí dentro el código de Pascal[/pascal].

De esta manera el código coloreas el código.

Otro punto importante para muchos que sienten que se les ignora: Todos los comentarios los reviso y en su debido momento los apruebo, pero ojo con el con lo siguiente:

Me reservo el derecho de alterar, publicar o no los comentarios as´ como cambiar mis condiciones en el momento que así lo requiera.

¿estas de acuerdo? entonces adelante que ya te he quitado bastante tiempo leyendo esta basura de advertencias :)