c ++:括号内部或外部的类构造函数指令

时间:2015-02-20 11:16:00

标签: c++ class syntax constructor braces

我正在学习两门不同的C ++编程课程。一个是我的物理学位,ROOT导向的必修课程,一个是我自己选择的信息学学位课程。

问题是,他们为类中的构造函数提供的示例略有不同。

让我们选择一个名为CDate的类的默认ctor,它包含三个整数,一个用于一天,一个用于月份,一个用于一年。如果没有传递任何内容来初始化日期,它将自动设置为1900年1月1日。

信息学课程的幻灯片提供了这个例子:

CDate::CDate(void){
mDay=1;
mMonth=1;
mYear=1900;
}

虽然我的物理课程中的那个给出了这个:

CDate::CDate():
mDay (1),
mMonth (1),
mYear (1900)
{}

如果他们必须修改已经在大括号外创建的一些变量,他们只会把东西放在大括号内。

让我们说,例如,我们想要创建一个表示直方图的类,给出最小值,最大值,箱数,然后是包含每个单元内的值的数组。完整的构造函数如下所示:

histogram::histogram (const int &nBin, const float &min, const float &max):
 nBin_p (nBin),
 min_p (min),
 max_p (max),
 binContent_p ( new int[nBin_p] )
{
  //initialize to zero the bin content
  for (int i = 0; i < nBin_p; ++i)
    binContent_p[i] = 0;
}

(_p的变量是类的实际变量,在类实现中定义为private。)

我想&#34;更好&#34;一个是信息学的一个,他们应该知道更好,对吧?但我仍然想知道,简而言之,两种方式之间的实际差异,尽可能轻微?什么时候我应该更好地使用一个,当另一个,或者它们完全相同时?

3 个答案:

答案 0 :(得分:1)

信息学&#39;方法实际上听起来非常C派生,他们没有利用一些C ++&#34; pecularities&#34;。他们只是为这些成员变量做了一些赋值

物理而不是初始化。乍一看,差异可能只是看起来很美观,只要您初始化的成员变量是基本类型,实际上可能不会在实践中产生很大的差异。

但是如果你有一个对象类型的成员变量并且没有 void 构造函数呢?要调用具有该类型参数的构造函数,您只能使用Physics&#39;方法(顺便说一句,称为初始化列表)。

答案 1 :(得分:0)

您的Physics示例中的一个称为初始化列表,它是初始化成员变量的首选方式。有关详细说明,请参阅here

答案 2 :(得分:-1)

第二种语法是初始化成员对象变量的唯一选项(它实际上是构造函数调用)。对于简单类型,例如int,long等,执行顺序只有很小的差异,可以随时手动修复。