2016-04-25 80 views
1

說我有以下的(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(Foo f, Baz z){}; 

然後我將不得不改變每一個孩子類以下

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

是否有反正我c避免不得不改變每一個孩子班級?

猜測可能與此有關, how to avoid repetitive constructor in children 這表明我必須改變每個孩子的課。

如果是這樣,是否有任何語言/設計模式可以使這種變化更輕鬆?

+1

子類是否以任何方式使用新參數?如果沒有,那麼讓父母有兩個構造函數。 –

+0

如果你有這麼多的子類,這實際上是一件苦差事,你應該重新考慮你的設計。 – molbdnilo

回答

2

如果父構造函數的新參數是必需的那麼真的沒有選擇,你必須更新子類的構造函數。

但是,如果新參數是而不是必需的,只需將新的父構造函數作爲重載構造函數添加,或者對新參數使用默認值。

相關問題