LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 794|回复: 0

关于C++里模板类的前视声明的问题

[复制链接]
发表于 2005-2-26 16:45:17 | 显示全部楼层 |阅读模式
类LinkedStack继承了Stack,按如下的定义编译可以通过,但如果把 " :public Stack<Type> "放到  LinkedStack 的前视定义中,则编译就不能通过。

我想问:在前视声明中没有指明LinkedStack是Stack类的子类,而是在下面定义中指明的,这样编译程序会不会认为,LinkedStack是Stack的子类?

  1. #include "Stack.h"

  2. template <class Type> class LinkedStack ;

  3. template <class Type> class StackNode{
  4.         friend class LinkedStack<Type>;
  5.         private:
  6.                 Type data;
  7.                 StackNode<Type> *link;
  8.                 StackNode(Type d = 0, StackNode<Type> *l = 0):data(d),link(l){}
  9. };
  10. template <class Type> class LinkedStack  :public Stack<Type> {
  11.         public:
  12.                 LinkedStack():top(0){}
  13.                 ~LinkedStack();
  14.                 void Push( const Type &item);
  15.                 Type Pop();
  16.                 Type GetTop();
  17.                 void MakeEmpty();
  18.                 int IsEmpty() const {return top == 0;}
  19.         private:
  20.                 StackNode<Type> *top;
  21. };
复制代码


其中 Stack.h内容如下:

  1. #ifndef _STACK_H_
  2. #define _STACK_H_
  3. #include < assert.h>
  4. template < class Type > class Stack
  5. {
  6.         public:
  7.                 virtual void Push( const Type &item) = 0;
  8.                 virtual Type Pop() = 0;
  9.                 virtual Type GetTop() = 0;
  10.                 virtual void MakeEmpty() = 0;
  11.                 virtual IsEmpty() const = 0;
  12.                 virtual IsFull() const = 0;
  13. };
  14. #endif
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表