我正在学习两个不同的 C++ 编程课程。一个是我的物理学位的必修课,面向 ROOT,一个是我自己选择的信息学学位的课程。
问题是,他们为类中的构造函数提供的示例略有不同。
例如,让我们选择一个名为 CDate 的类的默认 ctor,它包含三个整数,一个代表日,一个代表月,一个代表年。如果没有传递任何内容来初始化日期,它会自动设置为 1900 年 1 月 1 日。
信息学课程的幻灯片给出了这个例子:
CDate::CDate(void){
mDay=1;
mMonth=1;
mYear=1900;
}
虽然我的物理课程中给出了这个:
CDate::CDate():
mDay (1),
mMonth (1),
mYear (1900)
{}
如果他们必须修改已经在大括号外创建的一些变量,他们只会将内容放在大括号内。
例如,假设我们要创建一个表示直方图的类,给出最小值、最大值、bin 的数量,然后是一个包含每个 bin 内的值的数组。完整的构造函数如下所示:
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 的变量是类的实际变量,在类实现中定义为私有)。
我猜“更好”的是信息学的,他们应该知道得更好,对吧?但是,我仍然想知道,简而言之,这两种方式之间的实际差异是什么,尽可能轻微?我应该什么时候更好地使用一种,什么时候使用另一种,或者它们完全等效?