我有一个抽象类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()没有意义。
答案 0 :(得分:1)
听起来这不是整个故事。如果在层次结构的某个地方有任何纯虚函数而没有实现,GoTo
将是抽象的。
在C ++ 11中,您可以确保使用Execute
关键字正确实施override
:
virtual ActionStatus Execute() override;
如果您不小心声明了新的虚函数而不是覆盖,这将导致特定的诊断。
您可以指定GoTo
不是使用final
的任何基础,如果它是抽象的,可能会导致编译器抱怨(但这可能不是必需的):
class GoTo final : public Action
在任何情况下,编译器应告诉您未实现的功能,以帮助您追踪此类错误。