结构的构造函数

时间:2011-11-09 12:12:59

标签: c++ constructor

  

可能重复:
  What is this weird colon-member syntax in the constructor?

我在看this。结肠后的部分是什么意思?

explicit Box(double l, double w, double h) : Rectangle(l, w), height(h) {}

我习惯于初始化函数体{}中的值。

4 个答案:

答案 0 :(得分:2)

它用于初始化类或结构的成员和父类。

您可以为函数体内的成员变量执行此操作... const成员除外!

另请参阅C ++ FAQ的this section

答案 1 :(得分:1)

BoxRectangle的子类,其构造函数首先调用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)

如果您的班级中有常量或参考数据成员,则必须进行此类初始化。因为您无法在构造函数体内(即{}

内部)为它们赋值