可能重复:
What is this weird colon-member syntax in the constructor?
我在看this。结肠后的部分是什么意思?
explicit Box(double l, double w, double h) : Rectangle(l, w), height(h) {}
我习惯于初始化函数体{}中的值。
答案 0 :(得分:2)
答案 1 :(得分:1)
Box
是Rectangle
的子类,其构造函数首先调用Rectangle
构造函数,然后将height
变量设置为h
答案 2 :(得分:1)
部分是对基类构造函数的调用,part是成员初始化列表。
那里不需要explicit关键字,因为隐式转换只能发生在转换构造函数中。
因为在构造函数中输入代码之前初始化了成员和基类,所以这提供了初始化的替代方法。做两次没有意义,对吗?除了速度增益之外,无法在构造函数体内调用基类构造函数,因此它将始终调用默认构造函数。如果您想致电Rectangle(l, w)
,则必须在输入构造函数代码之前执行此操作:Box(double l, double w, double h) : Rectangle(l, w)
。
答案 3 :(得分:0)
这是初始化数据成员的实际方法。通常,构造函数有两个阶段,即初始化和计算。
/* Initialization */
explicit Box(double l, double w, double h): Rectangle(l, w), height(h)
无论你在{}内做什么,都在计算阶段。
即使您没有在代码中编写初始化列表,编译器也会使用隐藏代码初始化您的数据成员。所以,如果你写
explicit Box(double l, double w, double h):Rectangle(l, w)
{
height = h; /* re-assigning value */
}
这意味着您只需分配已准备好初始化的值。
explicit Box(double l, double w, double h): Rectangle(l, w), height(h)
如果您的班级中有常量或参考数据成员,则必须进行此类初始化。因为您无法在构造函数体内(即{}
内部)为它们赋值