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

时间:2013-12-01 01:09:26

标签: c++ inheritance hierarchy abstract

我有一个抽象类IExecutable

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

使用中间类Action

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

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

class GoTo : public Action
{
    ...
};

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

两个问题: Action是否实现了Execute(),以至于GoTo不需要实现它? 如果没有,那将如何解决?如果所有最终操作都相同,则必须为每个最终类重新实现Execute()没有意义。

1 个答案:

答案 0 :(得分:1)

听起来这不是整个故事。如果在层次结构的某个地方有任何纯虚函数而没有实现,GoTo将是抽象的。

在C ++ 11中,您可以确保使用Execute关键字正确实施override

virtual ActionStatus Execute() override;

如果您不小心声明了新的虚函数而不是覆盖,这将导致特定的诊断。

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

class GoTo final : public Action

在任何情况下,编译器告诉您未实现的功能,以帮助您追踪此类错误。