我从一本书中使用两个类编写了一个示例。一个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 >

09-07 07:03