调用Base类构造函数与在Child类中初始化成员变量

时间:2016-08-02 03:05:04

标签: c++ inheritance constructor

Parent类是一个抽象类。此处_isDone_probprotected类的Parent个变量,由Child继承。

使用之间有什么区别:

Child::Child(int _classType) : Parent(false, 1.0f)用于初始化Parent类的变量。

VS。

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

我觉得使用第二个而不是第一个更容易。有理由使用第一个。

1 个答案:

答案 0 :(得分:1)

简短回答:第一个是初始化,第二个是分配

第一个使用_isDone的构造函数初始化_probParent。但是,当您使用第二个时,使用_isDone的默认构造函数初始化_probParent,然后在Child中为它们分配新值构造函数的函数体。

第一个更好,原因如下:

  1. 如果Parent没有默认构造函数,则第二个无效。
  2. 第一个更有效率,特别是当数据成员非常大的时候。对象,其默认构造函数非常昂贵。由于第一个调用数据成员的默认构造函数,然后调用operator=来分配新值,而第二个调用正确的构造函数。默认构造函数是多余的。
  3. 就个人而言,我认为直接访问Parent数据成员是个好主意:ParentChild之间的耦合增加