【发布时间】:2013-12-01 01:09:26
【问题描述】:
我有一个抽象类 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() 是没有意义的。
【问题讨论】:
-
这实际上应该可以正常工作,你确定你在中间体中正确实现了 Execute() 吗?
-
您的示例在 VC 中编译,提供 Action::Executable 已定义。
-
这为我编译,假设我定义了虚拟 ActionStatus Execute();除了那里的声明。 (例如,通过将“;”更改为“{}”)
-
它有点奇怪,也是潜在的麻烦来源,Execute 没有在类 Action 的公共部分声明。
标签: c++ inheritance hierarchy abstract