c++ - 抽象基类和层次结构 - C++

标签 c++ inheritance hierarchy abstract

我有一个抽象类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/

相关文章:

c++ - 匹配 clang/gcc 中的所有 GNU C SIMD vector 扩展类型

c++ - 这是boost库中的错误吗

c++ - 遍历多维 vector (使用 Auto 关键字?)

c++ - 具有混合继承修饰符的菱形继承(钻石问题)( protected /私有(private)/公共(public))

java - 继承层次结构改变以减少代码重复

java - 从抽象类层次结构中获取正确的字段?

固定大小的 C++ 数组获取垃圾值

c# - C#:测试是否在父类(super class)的实例中而不是子类中的一个类

java - Wicket 继承问题

c# - 比较和对比 C++ 与 C# 命名空间层次结构