函数重载的意义详细说明

1:函数重载的意义

       c++为什么会定义函数重载呢,首先得明白函数重载的用途

       首先看下定义,百度百科上复制的:在相同的声明域中的函数名相同的,而参数表不同的,即通过函数的参数表而唯一标识并且来区分函数的一种特殊的函数。

     定义上说了几点:1、相同的声明域 2、函数名相同 3、参数形式不同 4、通过参数形式来区分函数

     定义上知道了几个意思:1、函数的名称必须相同 2、函数的参数必须不同 3、通过参数区分函数,说明多个函数肯定不会是一个地址空间 4、在一个作用域范围

     那么c++的作者为甚么要定义这些不痛不痒的功能呢,看着定义,大致推断了定义函数重载的目的

     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敲定,这也是函数重载的精髓

        精髓是什么,就是讲你从一些数据结构或者格式类型中解放出来,更多心思的去关注这个函数的抽象概念和其提供的功能

     

   

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值