【问题标题】:How to avoid changing every child constructor when parent constructor changes父构造函数更改时如何避免更改每个子构造函数
【发布时间】:2016-08-18 08:59:09
【问题描述】:

假设我有以下(C++)

class Parent
{
     Parent(Foo f){};
}

class Child : public Parent
{
    Child(Foo f, Bar b)
        : Parent(f)
    {};
}
...
// And a whole bunch of other children, all calling Parent constructor

假设现在我需要向 Parent 构造函数添加一个新参数

Parent(Foo f, Baz z){};

然后我将不得不将每个子类更改为以下内容

Child(Foo f, Baz z, Bar b)
    : Parent(f, z)
{};

无论如何我可以避免更改每个子类吗?

猜测可能与此有关, how to avoid repetitive constructor in children 这表明我必须更改每个子类。

如果是这样,是否有任何语言/设计模式可以让这种改变不那么痛苦?

【问题讨论】:

  • 子类是否以任何方式使用新参数?如果没有,则让父级有两个构造函数。
  • 如果您有这么多子类,这实际上是一件苦差事,那么您很有可能应该重新考虑您的设计。

标签: c++ inheritance design-patterns constructor


【解决方案1】:

如果父构造函数的新参数是强制的那么真的没有选择,你必须更新子类构造函数。

但如果新参数不是强制的,只需将新的父构造函数添加为重载构造函数,或者为新参数使用默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多