一个纯虚拟类作为数据类型出现吗?

时间:2019-04-04 13:12:44

标签: c++

我有点困惑我们如何有一个向量来保存指向Statement数据类型对象的指针。但是Statement是一个纯虚函数,据我了解,我们无法从纯虚类实例化对象。我想念什么?

Statements.hpp的头文件中:(Statement和Statements都显示在此头文件中)

class Statement {
public:
    Statement();

    virtual void print() = 0;
    virtual void evaluate(SymTab &symTab) = 0;

};

class Statements {
public:
    Statements();

    void addStatement(Statement *statement);
    void evaluate(SymTab &symTab);

    void print();

private:
    std::vector<Statement *> _statements;
};

从statement.cpp文件中:

void Statements::addStatement(Statement *statement) { _statements.push_back(statement); }

我有点困惑。让我知道,如果我没有提供足够的代码,我想这就是所有相关的东西。这是交往的一部分。

1 个答案:

答案 0 :(得分:10)

Statement是一个抽象类,这意味着它具有纯虚函数。没错,抽象是意味着不能直接实例化该类的实例。但是,其他类也可以从抽象类派生而来,这些类可能实现所有纯虚函数,因此是具体的。

由于此类层次结构中的子类是基类对象的示例(它是IS-A关系),因此代码可以使用指针或对基类的引用来引用它。

经典示例:如果您有Animal类,则可以有名为DogCat的子类。您可以创建Dog的实例,并将其放入Animal的集合中。

(这是相当基本的面向对象理论知识。任何书籍或文章都可以更深入地介绍它。搜索“多态性”,“面向对象程序设计”,“派生类”,“具体子类”或其他百万种组合中的任何一种)