函数重载的意义详细说明
1:函数重载的意义
c++为什么会定义函数重载呢,首先得明白函数重载的用途
首先看下定义,百度百科上复制的:在相同的声明域中的函数名相同的,而参数表不同的,即通过函数的参数表而唯一标识并且来区分函数的一种特殊的函数。
定义上说了几点:1、相同的声明域 2、函数名相同 3、参数形式不同 4、通过参数形式来区分函数
定义上知道了几个意思:1、函数的名称必须相同 2、函数的参数必须不同 3、通过参数区分函数,说明多个函数肯定不会是一个地址空间 4、在一个作用域范围
1、为啥函数名相同,可能刚开始为了解决函数名过多的原因,比如求1+2的函数,或者求1+2+3的函数,再或者求1.0+2.0+3.0的函数,没有重载会是三个函数,编写起来麻烦,更何况功能接近,都是求几个数的和,并且不受数据类型的干扰,太多的函数名麻烦,就起了一个名规范一下
2、为啥参数形式必须不同,函数的传递过程是先参数,然后函数体,最后才返回值,如果相同的话,就是一个参数,另外,不一样也正好的解决了上面的问题
3:为啥不弄一个地址空间,重载函数将他当成多个函数就成,实际上,每个重载函数都有自己的地址,只不过以前别的函数是通过函数名来区分函数的,重载函数是通过参数表来区分函数的
2:写几个重载函数,看下他们的区别
<span style="color:#333333;">#include<iostream> using namespace std; int add(); </span><span style="color:#ff0000;">int add(int a); //1 double add(int a);//2</span><span style="color:#333333;"> int add(double a); double add(int a,double b); int main() { return 0; }</span>
定义部分没写,编写过程已经发现在代码1的地方出现提示,重载函数不能通过返回值来区别重载函数,先讲正常的代码写完整,代码如下:
#include<iostream> using namespace std; int add(); int add(int a); int add(double a); double add(int a,double b); int main() { add(); add(5); add(2.0); add(1,2.0); return 0; } int add() { return 1+2; } int add(int a) { return a+2; } int add(double a) { return a+2; } double add(int a,double b) { return a+b; }
每个add的地址是不一样的,这一点不详细说了,具体可以在return 0前每个add前设置断点,debug模式下查看add的地址,查看地址如add(),add(int)
通过这个地址的查看,我们可以知道,c++程序函数重载是根据函数的参数样式类型,讲这些参数的类型传递给函数,然后选择调用那个函数
为什么要函数重载呢,通过上面的例子说一下:打个比方,我现在有个需求,需求很简单,就是想求一些数的和,如果我没想好这些数 的时候,我默认这些数的和是3,我如果知道一个数的话,我就讲这个数+2,如果知道两个数的话,类型不一样,就求他们的和,大致这个需求下,我完全可以定义add_1(),add_2()...等一堆函数,但是具体用的过程,我会想用哪一个。得分别查下他的定义或者端口说明,不如我直接用一个add()来预先定义,直接一个add敲定,这也是函数重载的精髓