抽象基类和层次结构-C++

Abstract base class and hierarchy - C++

本文关键字:-C++ 层次结构 基类 抽象      更新时间:2023-10-16

我有一个抽象类IExecutable

class IExecutable
{
public:
    virtual ActionStatus Execute() = 0;
};

具有中级动作

class Action : public IExecutable
{
    virtual ActionStatus Execute();
};

实现Execute()和其他最终类,如GoTo

class GoTo : public Action
{
    ...
};

GoTo未实现Execute()。编译器将GoTo视为一个抽象类,因为它没有实现Execute()。

两个问题:Action实现Execute()的事实难道不足以让GoTo不需要实现它吗?如果没有,该如何解决?当所有最终操作都相同时,必须为每个最终类重新实现Execute()是没有意义的。

听起来这并不是故事的全部。如果在层次结构的某个位置存在任何没有实现的纯虚拟函数,则GoTo将是抽象的。

在C++11中,可以使用override关键字确保Execute得到正确实现

virtual ActionStatus Execute() override;

如果您意外地声明了一个新的虚拟函数而不是覆盖,这将导致特定的诊断。

您可以使用final指定GoTo不是任何东西的基础,这可能会导致编译器抱怨它是抽象的(但这可能不是必需的):

class GoTo final : public Action

在任何情况下,编译器都应该告诉您没有实现什么函数来帮助您跟踪这种错误。