|
类LinkedStack继承了Stack,按如下的定义编译可以通过,但如果把 " :public Stack<Type> "放到 LinkedStack 的前视定义中,则编译就不能通过。
我想问:在前视声明中没有指明LinkedStack是Stack类的子类,而是在下面定义中指明的,这样编译程序会不会认为,LinkedStack是Stack的子类?
- #include "Stack.h"
- template <class Type> class LinkedStack ;
- template <class Type> class StackNode{
- friend class LinkedStack<Type>;
- private:
- Type data;
- StackNode<Type> *link;
- StackNode(Type d = 0, StackNode<Type> *l = 0):data(d),link(l){}
- };
- template <class Type> class LinkedStack :public Stack<Type> {
- public:
- LinkedStack():top(0){}
- ~LinkedStack();
- void Push( const Type &item);
- Type Pop();
- Type GetTop();
- void MakeEmpty();
- int IsEmpty() const {return top == 0;}
- private:
- StackNode<Type> *top;
- };
复制代码
其中 Stack.h内容如下:
- #ifndef _STACK_H_
- #define _STACK_H_
- #include < assert.h>
- template < class Type > class Stack
- {
- public:
- virtual void Push( const Type &item) = 0;
- virtual Type Pop() = 0;
- virtual Type GetTop() = 0;
- virtual void MakeEmpty() = 0;
- virtual IsEmpty() const = 0;
- virtual IsFull() const = 0;
- };
- #endif
复制代码 |
|