抽象基类以基类为类型创建派生类的实例



我有一个简单的问题:我有一个抽象的基类,我想用它作为派生类的类型。我的意思是:

class Rule {
public:
//Return value is equal to the count of consumned chars or -1 if the given chars are invalid for this rule
virtual int parse(const std::string& text, unsigned int startIndex) = 0;
};
class OptionalRule : public Rule {
private:
Rule m_rule;
public:
OptionalRule(Rule rule) {
m_rule = rule;
}
};

这给了我以下错误代码:抽象类类型的对象是不允许的。现在我知道我不能有Rule的实例,但是我想要的是允许Rule的任何子类。我该怎么做呢?我知道它与指针有关,但我不太明白它为什么或如何工作。

谢谢你的帮助!

PS:我知道我必须在类OptionalRule中实现虚拟函数,以便我可以实例化它

不能传递或存储Rule的值,因为它有纯virutal成员函数。相反,您需要将Rule存储为指针或引用。一个好的起点是使用std::unique_ptr:

class OptionalRule : public Rule {
private:
std::unique_ptr<Rule> m_rule;
public:
OptionalRule(std::unique_ptr<Rule> rule)
: m_rule{std::move(rule)} { }
};

你可以使用另一个智能指针(例如,std::shared_ptr<Rule>),如果它更符合你的需要。

相关内容

  • 没有找到相关文章

最新更新