【问题标题】:How to include another class in a class which uses templates?如何在使用模板的类中包含另一个类?
【发布时间】:2012-03-14 00:03:42
【问题描述】:

我从一本书中写了一个例子,它使用了两个类。一个 IntStack 和一个名为 MathStack 的类。 IntStack 包含所有常规的 pop 和 push 命令,而 MathStack 通过将类 intStack 声明为 public 来包含它。 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 

【问题讨论】:

    标签: c++ class stack


    【解决方案1】:

    也将 MathStack 模板化:

    模板

    类 MathStack:公共堆栈

    { ...

    【讨论】:

      【解决方案2】:

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

      如果MathStack 仅持有ints:

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

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

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

      【讨论】:

      • 谢谢你成功了。我选择了第一个,因为我只打算将它与 int 一起使用。
      猜你喜欢
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 2016-04-10
      • 2020-12-03
      • 1970-01-01
      • 2021-06-23
      相关资源
      最近更新 更多