#include < iostream >
using namespace std;
template < typename T , int size = 50 > //定义类模板，设定size的默认值为50
class Stack
{
public:
    Stack( )   //构造函数
    {
      number = 0;  //初始化元素个数
    }
    bool push( const T &ele );  //放入元素
    bool pop( T &ele );      //弹出元素
    int get_number( )  const  //定义函数，返回元素个数
    {
      return number;
    }
private:
    T ary[size];    //声明数组变量，用来存储栈中的元素
    int number;    //记录当前栈中元素的个数
};
template < typename T , int size > //类模板外部定义其成员函数push
bool Stack < T , size >::push( const T &ele )
{
    if ( number < size )   //如果栈还没满
{
    ary[ number++ ] = ele;  //加入元素到数组中
    return true;
}
return false;
}
template < typename T , int size > //类模板外部定义其成员函数pop
bool Stack < T , size >::pop( T &ele )
{
    if ( number >= 0 )   //如果栈中有元素
    {
      ele = ary[ --number ];   //弹出元素
      return true;
    }
    return false;
}

int main( )
{
    cout<<"  /*实例化类模板*/   "<<endl;  //输出提示语句
    Stack <int> ie;   //用int型和默认的值产生实例化类模板Stack
    ie.push(1); cout<<"push the number of 1"<<endl;  //一次压入三个整数
    ie.push(2); cout<<"push the number of 2"<<endl;
    ie.push(3); cout<<"push the number of 3"<<endl;
    cout<<"the number of element:"<<ie.get_number( )<<endl; //输出当前栈中的元素个数
    cout<<endl;     //输出换行符
    int ele = 0;
    cout<<"pop element:";
    ie.pop(ele);   //弹出元素
    cout<<ele<<endl;
    cout<<"pop element:";
    ie.pop(ele);
    cout<<ele<<endl;
    cout<<"the number of element:";
    cout<<ie.get_number( )<<endl;   //输出当前栈中的元素个数
    return 0;
}
