2012-02-23 140 views
0

我寫了一個使用兩個類的書的例子。一個IntStack和一個名爲MathStack的類。 IntStack包含所有常規的彈出和壓入命令,而MathStack通過聲明它公開聲明來包含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 

回答

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> 
+0

由於該訣竅。因爲我只是計劃用int來使用它,所以我選擇了第一個。 – falnir 2012-02-23 15:49:16

0

充分利用MathStack模板,以及:

模板<類T>

類MathStack:P ublic堆棧< T>

{ ...

相關問題