抽象基类和层次结构-C++
Abstract base class and hierarchy - C++
我有一个抽象类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不需要实现它吗?如果没有,该如何解决?当所有最终操作都相同时,必须为每个最终类重新实现Execute()是没有意义的。
听起来这并不是故事的全部。如果在层次结构的某个位置存在任何没有实现的纯虚拟函数,则GoTo
将是抽象的。
在C++11中,可以使用override
关键字确保Execute
得到正确实现
virtual ActionStatus Execute() override;
如果您意外地声明了一个新的虚拟函数而不是覆盖,这将导致特定的诊断。
您可以使用final
指定GoTo
不是任何东西的基础,这可能会导致编译器抱怨它是抽象的(但这可能不是必需的):
class GoTo final : public Action
在任何情况下,编译器都应该告诉您没有实现什么函数来帮助您跟踪这种错误。
相关文章:
- 如何重构类层次结构以避免菱形问题
- C++ 中模板化类型的类层次结构
- 为什么不同类型层次结构的指针之间的dynamic_cast定义得很好?
- 继承层次结构并将元素添加到向量
- C++ 类层次结构中的"对齐"是什么意思?
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 类层次结构中的运算符重载
- 如何在层次结构中实现运算符使用?
- 反向层次结构中的可变参数模板参数
- 如何在继承层次结构中调用具有默认参数的构造函数?
- C++ 提升 - 包含类层次结构对象的类的序列化
- 在C++继承层次结构时提取实现者
- 在C++中将类实例添加到对象层次结构中的问题
- 确定大层次结构中基本指针的实际类型,无需dynamic_cast
- 在继承层次结构中复制和移动
- 模板冲突的类型-但类型应该是相同的cfr类层次结构
- 删除父/子窗口层次结构的最佳方法
- 是否可以使一个类成为两个不同层次结构的子类?
- 我们可以在层次结构中创建多个纯虚拟接口及其实现而不会代码爆炸吗?
- 多重继承:跳过'virtual'关键字并拒绝菱形层次结构的使用?