2016-08-02 12 views
1

Parentクラスは抽象クラスです。ここで_isDone,_probParentクラスの変数protectedであり、これはChildに継承されます。呼び出し基本クラスのコンストラクタと子クラスのメンバー変数を初期化する対

Child::Child(int _classType) : Parent(false, 1.0f)Parentクラスの変数を初期化する:

は使用しての違いは何ですか。

Child::Child(int _classType) 
{ 
    _isDone = false; 
    _prob = 1.0f; 
} 

私は第二ではなく、最初に使用する方が簡単であると感じています。最初のものを使用する理由。

答えて

1

短い答え:最初の二つ割り当てあるが、初期あります。

_isDone_probParentのコンストラクタで初期化します。しかし、2番目のものを使用している場合、_isDone_probParentのデフォルトコンストラクタで初期化され、Childコンストラクタの関数本体に新しい値が割り当てられます。

最初のものは、以下の理由で優れている:デフォルトコンストラクタを持っていない

  1. Parent場合、もう一つは機能しません。
  2. 特に、データメンバが非常に大きなオブジェクトで、そのデフォルトのコンストラクタが非常に高価な場合は、最初の方が効率的です。最初のものはデータメンバのデフォルトのコンストラクタを呼び出してから、新しい値を割り当てるためにoperator=を呼び出し、2番目のものは適切なコンストラクタを呼び出します。デフォルトのコンストラクタは冗長です。
  3. 個人的には、Parentのデータメンバーに直接アクセスすることをお勧めしません。カップリングの増加がParentChildの間です。
関連する問題