C++重载函数问题...求助...谢了

来源:百度知道 编辑:UC知道 时间:2024/06/16 16:52:11
重载函数是否允许设置形参默认值,为什么?

从语法上来说,完全没问题,但这么做从运行上来说很可能没有意义或出现错误.

首先要明白,重载函数指的是同一个函数名但参数数目或类型不同,比如函数int a(int,int)是int a()的重载.也就是说,重载函数的意义在于,让程序能够根据你的实参数量和类型来选择具体要调用的某个重载函数,比如尽管函数名都是a,但实际中a(1,2)就会调用第一个函数而不是第2个.

再说形参默认值,C++规定,在函数调用时,编译器按从左到右的顺序将实参与形参结合,当实参数目不足时,编译器将按同样的顺序用说明或定义中的默认值来补足所缺少的实参。也就是说,在一个指定了默认值的参数的右边不可以出现没有指定默认值的参数,否则就会造成错误.

也就是说,如果有这样的函数int a(int,int)和其重载int a(int,int,int),如果重载函数的第三个形参设有默认值,实际过程中可能出现如下结果:
程序中,调用函数使用a(1,2)这样的语法,编译器会自动选择第一个函数;但可能实际上你希望的是调用int a(int,int,int)型的重载,希望前两个形参使用实参传递值,而最后一个使用默认值.这样,实际就和你的期望不同,你想使用三个参数的重载函数,就必须传递3个实参——也就是说重载函数中使用形参默认值往往没有意义而且在某些情况下会出错。

不知道这样解释你明白没有

keyi

void W(int a,int b,)和void W(int a,int b,int c=0),在你传递是实参时会出现错误,如W(1,2)实际上两个函数都可以用,形参默认值实际上就是没有,如果这样传值会出错