【问题标题】:A terse way of saying "this class overrides all necessary methods to be non-abstract"一种简洁的说法:“这个类覆盖了所有必要的非抽象方法”
【发布时间】:2016-02-13 23:14:53
【问题描述】:

我有一个基类Base 有很多纯虚拟方法,我想定义一些class Foo: public Base 形式的类,类似地class Barclass Baz 等 - 所有这些都应该是非虚拟的,所有这些都在 .cpp 文件中实现它们的虚拟方法,而不是在类定义中内联。目前,在这些类的每一个定义中,我都声明了 void method1() overridevoid method2() override 等等,令人作呕——而且我必须复制粘贴这些内容的次数与继承 class Base 的次数一样多。

有没有另一种更简洁的说法:“这个类重写了所有必要的非抽象方法”?

注意事项:

  • 我知道我可以做一些基于宏的组合,我不是那个意思。
  • 基于 C++ 反射库的解决方案并不可取,但可能可以接受。
  • 如果有帮助,您可以忽略多重继承。

【问题讨论】:

  • 你问奇怪的问题,伙计。你能用一个你真正想要实现的(伪代码)示例来填充它吗?
  • 你的意思是“所有必要的方法都是非抽象的”吗?
  • "这个类覆盖了所有必要的非虚拟方法" 你仍然需要为它们提供定义。所以你也需要提供声明,如果你不在同一个地方声明和定义它们。
  • @NicolBolas:定义在 .cpp 中;我只想有一个更少集群的类定义,例如“这个类覆盖了它需要的所有东西,还有一些其他的成员和方法”而不是“这个类有方法 method1 和 method2 和 method3 等等。”
  • @PreferenceBean:是的,我的意思是抽象/纯虚拟。

标签: c++ subclass virtual-functions


【解决方案1】:

没有。

您必须说明您希望覆盖的每个功能。

没有办法从每个基类中自动声明所有可覆盖的函数。

如果这是个问题,则说明您的接口有太多的成员函数。

别忘了Single Responsibility Principle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多