私はまだC++を学び、それを理解しようとしています。私はいくつかのコードを調べていて、次のことを確認しました。
point3(float X, float Y, float Z) :
x(X), y(Y), z(Z) // <----- what is this used for
{
}
コンストラクターのパラメーターの横にある「x(X)、y(Y)、z(Z)」の意味は何ですか?
私はまだC++を学び、それを理解しようとしています。私はいくつかのコードを調べていて、次のことを確認しました。
point3(float X, float Y, float Z) :
x(X), y(Y), z(Z) // <----- what is this used for
{
}
コンストラクターのパラメーターの横にある「x(X)、y(Y)、z(Z)」の意味は何ですか?
これは、point3クラスのメンバーのコンストラクターを呼び出す方法です。x、y、およびzが浮動小数点数である場合、これはこれを記述するためのより効率的な方法です。
point3( float X, float Y, float Z):
{
x = X;
y = Y;
z = Z;
}
ただし、x、y、zがクラスの場合、これがパラメーターをコンストラクターに渡す唯一の方法です。
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.)
他の人が指摘しているように、メンバーの初期化。ただし、次のことを知っておくことがより重要です。
引数がfloat型またはその他の組み込み型の場合、C ++では(コンストラクターの本体で)代入ではなくメンバーの初期化を使用する方が慣用的であることを除いて、明確な利点はありません。
明らかな利点は、引数がユーザー定義クラスの場合、このメンバーの初期化により、(コンストラクターの本体で)割り当てを使用して行われた場合、デフォルトのコンストラクターではなく、コンストラクターをコピーする呼び出しが発生することです。