如何在使用模板的类中包含另一个类?

时间:2012-02-23 15:00:28

标签: c++ class stack

我从一本使用两个类的书中写了一个例子。一个IntStack和一个名为MathStack的类。 IntStack包含所有常规pop和push命令,而MathStack通过将其声明为public来包含intStack类。 MathStack类使用IntStack及其pop和push对象执行数学运算。当我完成它时很好地工作但接下来我想将我的堆栈更新为动态堆栈并再次使用这个类。动态堆栈运行良好但我在编写时使用了模板。我相信这是导致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 

2 个答案:

答案 0 :(得分:2)

基类需要是模板的特化,而不仅仅是通用的模板名称。

如果MathStack仅保留int s:

class MathStack : public Stack< int > // or some other type besides int

MathStack本身应该是一个模板,如果它可以容纳任何Stack可以:

template< typename T >
class MathStack : public Stack< T >

答案 1 :(得分:0)

使MathStack也模板化:

  

模板&lt; T类&gt;

     

class MathStack:public Stack&lt; T&gt;

     

{   ...