模板

        InStack 和 CharStack 的共同属性可以用另一种不同的方式来表达,这就是C++的模板机制。模板也被称之为参数化类型,在如下列代码中给出了堆栈的模板。


         const  int  defautStack = 128;

         template  <class  T>

         class  Stack  {

                int      size;

                int      top;

                T       *data;

         public:

                Stack(int    size = defaultStack);

               ~Stack();

        void     push(T);

               T         pop();

         };

         template  <class   T>

         Stack<T> ::Stack(int   s)

         {

                   size = s;

                   top =0;

                  data = new  T [size];

      

          }


         tempate  <class  T>

         Stack<T>::~Stack()

         {

                 delete  [] data;

          }


         template  <class  T>

         void  Stack<T>::push(T  d)

         {

                assert(top<size);

                 data[top++] = d;

          }


          template <class  T>

          T Stack<T>::pop()

          {

                 assert (top >0);

                 return  data[--top];

          }



       Stack 模板定义了一组类。在使用 Stack 模板来声明一个对象时,必须同时提供一个类型来替换模板声明中的类型 T。例如,

       Stack<char>   stackofChar(10);

        在上面的语句中,我们声明了一个对象 stackofChar ,这个对象是一个存储10个char 类型值的堆栈,而在下面的语句中:

        Stack<int>  stackofInt(20);

       我们声明了一个对象 stackofInt ,这个对象是一个存储20个int 类型值的堆栈。函数push()中的参数类型和pop() 的返回类型也都是 T。

       将模板增加到C++ 的主要推动力是因为模板可以支持通用的集合类。我们不仅可以创建整数类型的堆栈和字符类型的堆栈,还可以创建浮点类型的堆栈, char指针类型的堆栈等等。

       用模板来实例化的对象与那些使用 IntStack 和CharStack来实例化的对象在行为上只是存在细微的差别。在最初的 CharStack 构造函数中,可以带有第二个参数,用于指定将要压入栈中的字符串。但是 IntStack 的构造函数中并没有这个参数。因此,如果使用模板来同时表示这两个类,那么这个差别将是无法被表达出来的。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值