为什么用两个参数声明的构造函数只能用一个参数调用?

Mas*_*r C 2 c++ rational-number class operator-overloading

我从我的大学看了我的讲师的视频,他说Rational的构造函数是这样的:

Rational (int top=0 , int bottom=1)
: t(top) , b(bottom) {normalize();}
Run Code Online (Sandbox Code Playgroud)

到现在为止一切都还可以,但是!! 他还说你只能用1个参数(top参数)调用构造函数,并且因为底部初始化为1,所以理性例如:Rational(3)将是3/1.

但是!! 我想知道如果它只支持2个参数,我们怎么能使用一个值为1的构造函数呢?

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

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

日Thnx ...

Rob*_*edy 10

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

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

参数值只能从末尾省略.也就是说,如果不省略top参数,则不能省略bottom参数.您提供的第一个实际参数将始终对应于声明中的第一个形式参数.同样,默认参数只能从结尾开始定义.如果top没有声明一个默认参数,则无法定义默认参数bottom.