在子子类中重写虚拟功能,但在子类中不重写

时间:2018-10-02 21:08:51

标签: c++

我正在使用编译器,正在尝试构建用于存储表达式(AST)的数据结构。

我想知道的是,是否可以做一些将父类继承到子类中但不能覆盖如下虚函数的事情。而是在孩子的孩子中覆盖它。

只有在最低的类Add_expr中对其进行评估才有意义。我还假设,因为我将valuate()=设置为0,所以在所有子类中都需要它,否则如果未实现,则会出现链接器错误。

struct Expr {
    virtual void evaluate() const = 0;
}

struct Binary_expr : public Expr {

}


struct Add_expr : public Binary_expr {
    virtual void evaluate() const override {

    }
}

1 个答案:

答案 0 :(得分:3)

您不太可能会收到未重写的纯虚函数的链接器错误(纯虚析构函数的特殊例外)。取而代之的是,您将遇到编译器错误,但前提是您尝试实例化仅具有纯虚函数但仍未被覆盖的类。

这意味着,在您的问题中,除非您尝试实例化类型为Binary_expr的对象,否则所有内容都将正常运行。