设为首页 加入收藏

TOP

2.2.2 栈类模板衍生子类模板实例
2013-10-07 16:30:44 来源: 作者: 【 】 浏览:163
Tags:2.2.2 模板 衍生 子类 实例

2.2.2 栈类模板衍生子类模板实例

类模板不仅可以用来生成类实例,还可以作为其他类或者类模板的基类。以上述栈类模板作为基类,衍生一个可以记录栈内所存数据总数的子类count_stack。同样,count_stack也是一个模板,可用于保存多种数据。

实现方法也很简单,在count_stack中增加一个整数型成员变量以记录栈内数据数,并重载push()和pop()函数以便适时更新该变量。这样一个子类模板代码如例2.3所示。

例2.3

  1. #include "stack.hpp"  
  2.  
  3. template<typename T=int> 
  4. class count_stack : public my_stack<T> 
  5. {  
  6.     typedef my_stack<T>base_type; // 非常有用的typedef  
  7.     unsigned size;  
  8. public:  
  9.     count_stack() : base_type(), size(0) {}  
  10.  
  11.     void push(T const &v) {  
  12.         base_type::push(v);  
  13.         size++;  
  14.     }  
  15.  
  16.     void pop() {  
  17.         if (size > 0) {  
  18.             base_type::pop();  
  19.             size--;  
  20.         }  
  21.     }  
  22.  
  23.     unsigned getSize() const {return size;}  
  24. }; 

类模板的基类必须是某个类型,所以例2.3中类模板count_stack的基类应该写为my_stack<T>,即保存T型数据的my_stack类模板实例类型。这里是利用count_stack类模板的模板参数来定义my_stack的模板参数值。如果是普通类以类模板实例为基类,需要为基类模板给定明确的模板参数值,例如以下代码所示:
 

  1. class another_stack : public my_stack<char> {/* ... */}; 

至此,我们已经实现了一个完整可用的栈类模板。借助模板的力量,无论所需入栈的数据是整型、字符串还是用户自定义类型,都可以当场生成对应类型的栈模板实例供使用。类模板可以帮助软件开发者专注于数据结构的设计,而不需要考虑具体数据类型。不仅如此,借助模板这一自动生成代码的机制,原本需要庞大代码才能实现的想法都可以利用编译器自动实现,扩展了软件开发者的解决问题的思路。接下来,让我们循着单向链表的思路,实现一种可以保存不同数据类型的异质链表。
 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.2.1 栈类模板实例 下一篇2.3 突破——异质链表

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: