我有一个抽象类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
无论如何,编译器都应告诉您未实现的功能,以帮助您查找此类错误。