我有一个抽象类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() 是没有意义的。
最佳答案
这听起来并不是故事的全部。 GoTo
将是抽象的,如果在层次结构的某处存在任何没有实现的纯虚函数。
在 C++11 中,您可以确保使用 override
关键字正确实现 Execute
:
virtual ActionStatus Execute() override;
如果您不小心声明了一个新的虚函数而不是覆盖,这将导致特定的诊断。
你可以指定 GoTo
不是任何使用 final
的基础,如果它是抽象的,这可能会导致编译器提示(但这可能不是必需的) :
class GoTo final : public Action
无论如何,编译器应该告诉您哪些功能没有实现,以帮助您追踪此类错误。
关于c++ - 抽象基类和层次结构 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20307605/