Data Types C++ Tutorial

#include 
using std::cout;
using std::cin;
using std::endl;
template< class T >
class Stack {
public:
   Stack( int = 10 );    
   ~Stack() { delete [] stackPtr; } 
   bool push( const T& ); 
   bool pop( T& );        
private:
   int size;             
   int top;              
   T *stackPtr;          
   bool isEmpty() const { return top == -1; }
   bool isFull() const { return top == size - 1; } 
}; 
template< class T >
Stack< T >::Stack( int s )
{
   size = s > 0 ? s : 10;  
   top = -1;               
   stackPtr = new T[ size ]; 
}
template< class T >
bool Stack< T >::push( const T &pushValue )
{
   if ( !isFull() ) {
      stackPtr[ ++top ] = pushValue; 
      return true;  
   } 
   return false;     
}
template< class T > 
bool Stack< T >::pop( T &popValue )
{
   if ( !isEmpty() ) {
      popValue = stackPtr[ top-- ]; 
      return true;  
   } 
   return false;    

int main()
{
   Stack< double > doubleStack( 5 );
   double f = 1.1;
   cout << "Pushing elements onto doubleStack\n";
   while ( doubleStack.push( f ) ) {
      cout << f << ' ';
      f += 1.1;
   }
   cout << f;
   while ( doubleStack.pop( f ) )  
      cout << f << ' ';
   Stack< int > intStack;
   int i = 1;
   while ( intStack.push( i ) ) { 
      cout << i << ' ';
      ++i;
   } 
   cout << i ;
   while ( intStack.pop( i ) )
      cout << i << ' ';
   return 0;
}