【问题标题】:Templates / polymorphism模板/多态
【发布时间】:2016-03-11 01:47:07
【问题描述】:

我正在尝试利用多态性。基本上,代码中间缺少一个类名。由于我不习惯模板,有人可以给我一个线索吗?谢谢

#ifndef TEMPLATE_H``
#define TEMPLATE_H


using namespace std;
template <class T>
class Template
{
public:
      Template(int);
      virtual  ~Template();
      virtual  void push(T val);
      T pop;
      virtual  bool isFull();
      virtual  bool isEmpty();
      virtual  void  sizeOf(T val) ;
    protected:
    private:
    int top,size;
};

#endif // TEMPLATE_H

#ifndef STACK_H
#define STACK_H

/***LIFO***/

using namespace std;

template <class S>
class stack: public Template{ // HERE, it says it's missing an expected class 
-name before {
    public:
        stack();
        virtual ~stack();
    protected:
    private:

};

#endif // STACK_H

【问题讨论】:

  • 你不能从Template继承,因为Template不是一个类。您可以从Template&lt;int&gt;Template&lt;std::string&gt;Template&lt;S&gt; 等继承。
  • 应该是template &lt;class S&gt; class stack: public Template&lt;S&gt; { // ...

标签: c++ class templates polymorphism


【解决方案1】:

stack 应该继承自 Template&lt;S&gt;,而不是 Template

Template 不是一个类。它是一个类模板Template&lt;int&gt; 将是一个类,或 Template&lt;std::string&gt;。您不能从类模板继承,只能从类(或结构)继承。

【讨论】:

  • 怎么不是继承自 Template 而不是 Template
  • 它可以继承自Template&lt;Whatever&gt;。我选择了S,因为这是 OP 示例代码中stack 的现有(和未使用的)模板参数。
猜你喜欢
  • 2012-12-26
  • 2019-09-24
  • 1970-01-01
  • 2010-12-05
  • 2020-02-19
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多