开发者

Variables after the colon in a constructor [duplicate]

开发者 https://www.devze.com 2022-12-21 17:00 出处:网络
This question already has answers here: 开发者_StackOverflow社区 What is this weird colon-member (" : ") syntax in the constructor?
This question already has answers here: 开发者_StackOverflow社区 What is this weird colon-member (" : ") syntax in the constructor? (14 answers) Closed 8 years ago.

I am still learning C++ and trying to understand it. I was looking through some code and saw:

point3(float X, float Y, float Z) :
x(X), y(Y), z(Z)  // <----- what is this used for
{
}

What is the meaning of the "x(X), y(Y), z(Z)" sitting beside the constructor's parameters?


It's a way of invoking the constructors of members of the point3 class. if x,y, and z are floats, then this is just a more efficient way of writing this

point3( float X, float Y, float Z):
{
   x = X;
   y = Y;
   z = Z;
}

But if x, y & z are classes, then this is the only way to pass parameters into their constructors


In your example point3 is the constructor of the class with the same name (point3), and the stuff to the right of the colon : before the opening bracket { is the initialization list, which in turn constructs (i.e. initializes) point3's member variables (and can also be used to pass arguments to constructors in the base class[es], if any.)


Member initialization as others have pointed out. But it is more important to know the following:

When the arguments are of the type float or other built-in types, there's no clear advantages except that using member initialization rather than assignment (in the body of the constructor) is more idiomatic in C++.

The clear advantage is if the arguments are of user-defined classes, this member initialization would result in calls to copy constructors as opposed to default constructors if done using assignments (in the constructor's body).

0

精彩评论

暂无评论...
验证码 换一张
取 消