_函数重载

       对于C++中函数的重载,我们先来看看下面的几行代码:

       很简单的两个函数,我们可以发现,其实这两个函数都是为了实现同一个功能:判断形参是正数还是负数,如果是正数则返回自己,如果是负数则返回相反数。

       功能一样的函数却因为形参的不同要弄出两个函数来,显然有点啰嗦了,所以为了提高代码的简洁,C++提出了函数重载功能。


我们先来看看怎样才能实现函数重载:

1.函数名相同

2.参数的个数、类型、排序不相同

3.返回值的类型不同不能构成重载


实践是检验真理的唯一标准,那么我们来看看代码吧!

       这段代码中,我们定义了两个同名函数,它们不但没有被报错,反而还能正常地执行。我们发现,其实它们真正的不同也只有形参的类型不同(printf函数里随便输出的就忽略了)。

       从打印的结果我们可以发现,当形参是整数时,自动调用了形参是整数的那个函数,而当形参是2.5时,就调用了下面的print函数。

       其实print函数是实现了重载!


我们再往下看:

3个print由于形参的类型或形参的个数或排列方式的不同,构成了C++伟大的函数重载。


我们还说,函数的返回值不同不能构成函数重载,我们来试一试:

代码编译出错了,ambiguating就是二义性的意思。


函数重载遵循严格的调用匹配原则,这点我们需要特别注意。

匹配原则:

1.严格匹配,找到则调用

2.通过隐式转换寻求一个匹配,找到则调用


例如:

我们知道‘a’是个字符,它通过隐式转换寻找到了int,所以程序调用了第一个print函数。


我们需要注意的是,C++允许,int到long和double,double到int和float的隐式类型转换,遇到这种情形,则会引起二义性。


上面的代码都编译错误了,因为对于int可以隐式转换成long或者double,double可以隐式转换成int和float,计算机不知道选择哪个函数来实现,所以就报错了。




                                                                                                     Kyrie Irving___全.





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章