2

私は私の大学からの講師のビデオを見ました、そして彼はそのコンストラクターがこのようになるRationalクラスについて言います:

Rational (int top=0 , int bottom=1)
: t(top) , b(bottom) {normalize();}

今まではすべて大丈夫ですが!! 彼はまた、コンストラクターは1つの引数(top引数)でのみ呼び出すことができ、そのbottomは1の値に初期化されるため、たとえば、有理数は3/1Rational(3)になると述べました。

しかし !!2つの引数のみをサポートする場合にのみ、1つの値を持つコンストラクターをどのように使用できるのでしょうか。

Javaでは、コンストラクターが受け取る引数がx個ある場合(他のコンストラクターは考慮せず、x> 0)、2ではなく1ではなくすべてを転送する必要があることを知っています...

この対立を解決するのを手伝ってください...

thnx..。

4

4 に答える 4

10

=コンストラクター宣言のは、パラメーターにデフォルトを与えます。コンストラクターを呼び出すときに自分で値を指定しない場合、コンパイラーは宣言されたデフォルト値を入力します。コンストラクターは違いを認識しません—両方のパラメーターを確認し、呼び出し元が両方の値を提供したかどうか、またはコンパイラーがそれらの一部を入力したかどうかを検出する方法はありませんが、通常は問題ありません。(違いを知る必要がある場合は、複数のコンストラクターを宣言します。各コンストラクターには、異なる数のパラメーターがあり、デフォルト値はありません。)

どちらもデフォルト値を持っているため、コンストラクターはパラメーターなしで呼び出すこともできます。その場合、最初のパラメーターのデフォルト値は0になり、2番目のパラメーターは1になります。

パラメータ値は最後からのみ省略できます。つまり、パラメータを省略topせずにパラメータを省略することはできませんbottom。指定する最初の実際のパラメーターは、常に宣言の最初の正式なパラメーターに対応します。同様に、デフォルトのパラメータは最後からのみ定義できます。topのデフォルトパラメータを宣言せずに、のデフォルトパラメータを定義することはできませんbottom

于 2011-05-16T19:44:16.400 に答える
2

Rob Kennedyの答えを拡張するために、機能するものと機能しないものの例をいくつか示します。

クラスFooを想像してみてください。

class Foo
{
    Foo( int a = 0, float b = 1.0f );
}

そして、次のコンストラクター呼び出しを検討してください。

Foo foo_obj = Foo(5, 6.0f);    // Fine, two arguments are passed. a will be 5 and b will be 6.0f.

Foo foo_obj = Foo(5);          // Fine as well. a will be 5 and b will be 1.0f. This is because b has a default value in the constructor.

Foo foo_obj = Foo();           // Fine too, a will be 0 and b will be 1.0f. This is because both a and b have default values in the constructor.

変数はまだ左から右に渡されることに注意してください。これは、明示的に渡したい引数の前にある引数を除外できないことを意味します。つまり、上記の例では、bの値を渡すことはできませんが、aの値は省略できます。

于 2011-05-16T19:52:18.803 に答える
2

これを行うとき:

Rational r(42);

...コンストラクターにはパラメーターのデフォルト値があるため、のデフォルト値が1パラメーターに提供されます。(それは約です)bottombottom=1

デフォルトを含まないようにコンストラクターの宣言を変更する場合:

Rational(int top, int bottom)

Rational...そうすると、両方のパラメータを明示的に指定しないと、オブジェクトを作成できなくなります。

于 2011-05-16T19:46:18.020 に答える
0

topおよびbottomは暗黙の値を持つ引数です。つまり、関数を呼び出すときにそれらをスキップでき、それらの暗黙の値が関数の呼び出しに使用されます。

したがって、与えられたコンストラクターを使用するとRational r;、rはtop0とbottom1になります。またはRational r(42)、魔女の場合、topは42とbottom 1にRational r(1,2);なり、topは1とbottom2になります。

于 2011-05-16T19:46:34.857 に答える