2

我从我的大学观看了讲师的视频,他谈到了 Rational 类,它的构造函数是这样的:

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

直到现在一切都很好,但是!他还说您只能使用 1 个参数(顶部参数)调用构造函数,并且因为底部初始化为 1 的值,例如:Rational(3)将是3/1

但 !!我想知道只有当它仅支持 2 个参数时,我们如何才能使用具有 1 个值的构造函数?

我知道在java中,如果我们有x个构造函数接收的参数(考虑没有其他构造函数并且x> 0),我们必须将它们全部传输而不是1而不是2 ...

请帮我解决这个冲突...

谢谢...

4

4 回答 4

10

=构造函数声明中给参数默认值。如果你在调用构造函数时没有自己提供值,编译器会为你填写声明的默认值。构造函数不会知道区别——它会看到两个参数,并且无法检测调用者是否提供了这两个值或编译器是否填充了其中的一些值,但这通常是可以的。(如果您需要知道区别,则声明多个构造函数,每个构造函数都有不同数量的参数,并且没有默认值。)

您的构造函数甚至可以带参数调用,因为它们都有默认值。在这种情况下,第一个参数的默认值为 0,第二个参数的默认值为 1。

参数值只能从末尾省略。也就是说,您不能在不省略top参数的情况下省略bottom参数。您给出的第一个实际参数将始终对应于声明中的第一个形参。同样,默认参数只能从末尾开始定义。top如果不为声明一个默认参数,您就无法定义一个默认参数bottom

于 2011-05-16T19:44:16.400 回答
2

When you do this:

Rational r(42);

...the default value of 1 is supplied to the parameter bottom, because your constructor has default values for the bottom parameter. (That's that the =1 is about)

If you were to change the declaration of th constructor to not include any defaults:

Rational(int top, int bottom)

...then you would no longer be able to construct a Rational object without specifying both parameters explicitly.

于 2011-05-16T19:46:18.020 回答
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 回答
0

top and bottom are arguments with implicit values. That means you can skip them when calling the function and their implicit values will be used for calling the function.

So with the given constructor you can say Rational r; and r will have top 0 and bottom 1, or Rational r(42), in witch case top will be 42 and bottom 1, or Rational r(1,2); and top be 1 and bottom 2.

于 2011-05-16T19:46:34.857 回答