2016-08-02 99 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之间的耦合增加。
相关问题