2

私は次の状況にあります(以下は説明のためだけです):

class Base() 
{
public:
    Base(int);
};

class Derived : public Base 
{
public:
    Derived(int, int, bool);
};

派生コンストラクターのブールフラグに応じて基本クラスを初期化したい。(もしあれば)そうする正しい方法は何ですか..

私はできる(しかし、ベースが初期化される前に評価が行われるのか?):

Derived::Derived(int _x, int _y, bool _z) : Base(_z?_x:_y) {}

または(ただし、これはおそらく正しく機能しません)

Derived::Derived(int _x, int _y, bool _z) 
{
    if(_z)
      ::Base(_x);
    else
      ::Base(_y);
}

これを行う正しい方法がない場合は、コンストラクターをに追加することで解決できる可能性がありますDerived

4

3 に答える 3

3
 Derived::Derived(int _x, int _y, bool _z) : Base(_z?_x:_y) {}

正しい方法です。でパラメータを指定してベースコンストラクタを呼び出すことしかできませんでしたmember initializers list

于 2013-02-13T10:44:24.120 に答える
2

最初の選択肢は正しいものです。初期化リストを使用してください。

2番目の選択肢は機能しません。

于 2013-02-13T10:44:09.820 に答える
2

最初の選択肢は、機能する唯一の選択肢です。派生クラスのコンストラクターは基本クラスのコンストラクターの後に呼び出されるため、2 番目のオプションは無効です。

もちろん、問題はこれが「正しい」ことかどうかです。1 つではなく 2 つの派生クラスが必要な場合があるためです。あなたがしていること自体が間違っていると言っているわけではありません。それは心に留めておくべきことです。

于 2013-02-13T10:47:30.980 に答える