我从一本书中使用两个类编写了一个示例。一个IntStack和一个称为MathStack的类。 IntStack包含所有常规的pop和push命令,而MathStack通过声明为public来包含intStack类。 MathStack类使用IntStack及其弹出对象和推入对象执行数学运算。完成后效果很好,但接下来我想将堆栈更新为动态堆栈,然后再次使用该类。动态堆栈运行良好,但是在编写时使用了模板。我相信这就是导致MathStack出现问题的原因。
我应该怎么做才能使MathStack与基于模板的堆栈友好?请指教。
MathStack声明:
#include "Stack.h"
class MathStack : public Stack
{
public:
//Constructor
//MathStack operations
void add();
void sub();
void mult();
void div();
void addAll();
void multAll();
};
堆栈声明:
template < class T>
class Stack{
private:
List<T> aList;
public:
Stack();
Stack(const Stack<T> &aStack);
~Stack();
void push(T newItem);
void pop();
void pop(T StackTop);
T getTop();
bool isEmpty() const;
}; //end List class
最佳答案
基类需要是模板的特殊化,而不仅仅是通用的模板名称。
如果MathStack
仅保存int
:
class MathStack : public Stack< int > // or some other type besides int
如果
MathStack
可以容纳任何Stack
可以的内容,则它本身应该是模板:template< typename T >
class MathStack : public Stack< T >