Bは、intパラメータをとる有効なコンストラクタを持つクラスです。つまり、Bはintを渡すときにB自身を構築する方法を知っています。
28は、intの有効な表現です。
B(28)intをとるコンストラクタを使用して 'B'クラスをインスタンス化する方法です。
もう少し明確にするために、 'B'のコンストラクタはintとboolをとりますが、どちらのパラメータも「オプション」です。これはintパラメータでは「= 0」、 boolパラメータに「true」を設定します。
パラメータはオプションであるため、Bはパラメータを指定しないで構築できます。この場合、x = 0およびb = trueで構成されます。また、あなたの例のように、指定されたintパラメーターで構築することもできます。あなたの例では、x = 28、b = trueです。両方のパラメーターを指定して構築することもできます。例えばB(8、偽)。ただし、boolパラメータのみを指定することはできません。たとえば、B(false)は機能しません。オプションのパラメータを入力するときにパラメータをスキップする方法はありません。 B(、false)は無効です...
したがって、B(28)はx = 28のBオブジェクトを作成します。
ここで、関数DoSomethingは 'B'オブジェクトを渡すことを想定しています。 B(28)は 'B'オブジェクトの有効な構成であるため、DoSomethingのパラメータリストを満たします。
お電話:
DoSomething(B(28));
A 'B' オブジェクトを構築し、引数としてのdoSomethingに渡されます。関数の内部
は、Bは、「bObject」と呼ばれる関数のシグネチャ理由:
DoSomething(B bObject)...
この関数シグネチャが渡されるタイプ「B」のようなものを望んでいる、そしてそれはと呼ぶことにします関数内のbObject。したがって
、
bObject.b = 1;
を構築し、関数に渡されたBクラスの「B」のメンバーに1の値を割り当て。
おそらく、これはやや紛らわしい理由は、DoSomethingがBクラスのbメンバの設定を完了し、関数が終了すると、Bクラスはもはや存在しないため、DoSomething関数を終了して証明する方法はありませんbメンバーが変更されたことを示します。
したがって、私が知る限り、一時的なオブジェクトを関数に渡して変更し、それを元に戻すことはやや役に立たないことです。
実際に説明しようとしているように見えるのは、コンストラクタで '明示的'の意義です。この例は、暗黙的な引数の変換などを除外して、明示的なコンストラクタに注目しています。
'class_name(parameters)'は、指定された 'parameters'を使って' class_name'の一時オブジェクトを作成しますか? – NathanOliver
テンポラリ( 'B(28)')は 'doSomething'スコープの間、オブジェクトを作成してbObjectに割り当てます。その後、オブジェクトは破壊されます – Amadeus