我有一个抽象类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不需要实现它的事实?
如果没有,那将如何解决?当所有最终Action都相同时,不必为每个最终类重新实现Execute()是没有意义的。

最佳答案

听起来这还不是全部。如果存在任何纯虚拟函数,而在层次结构中某处没有实现,则GoTo将是抽象的。

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

virtual ActionStatus Execute() override;

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

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

无论如何,编译器都应告诉您未实现的功能,以帮助您查找此类错误。

09-09 23:26
查看更多