2016-08-02 100 views
1

Parent類是一個抽象類。這裏的_isDone,_probParent類別的protected變量,它們由Child繼承。調用基類構造函數vs初始化Child類中的成員變量

是什麼兩者的區別:用於初始化Parent類的變量

Child::Child(int _classType) : Parent(false, 1.0f)

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

我覺得這是更容易使用的第二而非第一。任何理由使用第一個。

回答

1

簡短的回答:第一種是初始化,而第二個是分配

第一個用Parent的構造函數初始化_isDone_prob。但是,當您使用第二個函數時,_isDone_prob將使用Parent的默認構造函數進行初始化,然後在Child構造函數的函數體中爲它們分配新值。

第一個是由於以下原因,更好地

  1. 如果Parent沒有默認的構造函數,第二個不能工作。
  2. 第一個效率更高,尤其是當數據成員是一個「非常大」的對象時,其默認構造函數非常昂貴。由於第一個調用數據成員的默認構造函數,然後調用operator=來分配一個新值,而第二個調用一個正確的構造函數。默認的構造函數是多餘的。
  3. 個人而言,我認爲直接訪問Parent的數據成員不是一個好主意:在ParentChild之間的耦合增加。
相關問題