【问题标题】:Initialising an abstract class in c++ with pure virtual method用纯虚方法在 C++ 中初始化一个抽象类
【发布时间】:2015-07-13 00:27:07
【问题描述】:

我正在尝试解决这个问题 - 我有一个基类:

class Original {
private:
    string inputPath;
    string outputPath;
public:
    void takeInput(string path);
    void putOutput(string input, string output);
    virtual void doFilter(ifstream &in, ofstream &out) = 0;
    virtual char transform(char a) = 0;   
};

还有一个实现它的类:

class Transform : public Original {
public:
    char transform(char a);
};

但是当我尝试在 main 中使用 Transform 类时,就像

Transform t;
Original *org = *t;

它给了我一个错误

Variable type 'Transform' is an abstract class.

我在 Transform::transform 中实现了一些东西,现在完全迷失了。 如何初始化 Transform 类?

【问题讨论】:

  • 你也想写Original *org = &t;

标签: c++ inheritance abstract-class pure-virtual


【解决方案1】:

Original中有两个纯虚成员函数:

class Original {
    // ...
    virtual void doFilter(ifstream &in, ofstream &out) = 0;
    virtual char transform(char a) = 0;   
};

您在Transform 中为transform 提供了覆盖,但doFilter 仍然是纯虚拟的。由于Transform 有一个纯虚成员函数,它也被认为是一个无法构造的抽象类。为了构造Transform,您还需要为第二个函数提供覆盖。

【讨论】:

  • 他没有定义覆盖。
  • @DonLarynx OP 没有提供 any 定义 - 这是一个安全的假设,因为问题是关于编译错误而不是链接器错误。
  • @DonLarynx:他没有给出定义;如果这些也不存在,那么这是一个单独的问题,一旦他开始编译,他就必须解决。他没有声明覆盖doFilter这一事实是这个问题中更相关的一点。
猜你喜欢
  • 2012-10-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2014-10-13
  • 2015-08-14
  • 1970-01-01
相关资源
最近更新 更多