方法重载与函数重载

    最近学习C++时,遇到了一个问题,其实可以说是一个知识点,那就是关于函数重载的点点滴滴,在向别人请教这个问题的时候,别人提了一下,什么是方法重载,知道吗?我顿时皱起了眉头。别人简单说了一下,这两者的区别,说道其实它们的用法是一样的,只是方法重载是相对于对象而言,是对象的某种实现,但是函数重载是一个封装好的函数体,用的时候直接用就行。

出于好奇,自己借助书籍和上网查了查。

  Ø  What?

   u  函数重载

    函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。

下面举个例子。

#include<iostream>
using namespace std;
int add(int x,int y)
{
	cout<<"(int,int)\t";
	return x+y;

}
double add(double x,double y)
{
	cout<<"(double,double)\t";
	return x+y;

}
int add(int x,double y)
{
	cout<<"(int,double)\t";
	return int(x+y);

}
double add(double x,int y)
{
	cout<<"(double,int)\t";
	return x+y;

}
int main()
{
	cout<<add(9,8)<<endl;
	cout<<add(9.0,8.0)<<endl;
	cout<<add(9,8.0)<<endl;
	cout<<add(9.0,8)<<endl;
	return 0;
}
    运行结果:

    我们可以看到函数名是相同的,参数的个数也是相同的,但是参数类型却是不同的。也就是说在C++语言中,函数重载就是指同一个函数名可以对应着多个函数的实现,即这些函数名是相同的,但是它们的形参的个数和类型却不同,编译器能够根据它们各自的实参和形参的类型以及参数的个数进行最佳匹配,自动决定调用哪一个函数体。

 

   u  方法重载

    同一个类中2个或者多个方法的名字相同,但是方法的参数不同。参数不同又分为2种情况:1.参数的数量不同,2.参数的类型不同,而方法的返回值对重载没有任何影响,因为你调用方法的时候不会调用方法类型,只会用到方法名和参数。

方法重载的概念其实最常见的地方就是构造器,常常是一个类中有多个构造方法,它们有相同的名字,但是往往参数不同,这样就可以使用不同情况下的初始化任务。

    实例:

    比如实际开发中,你要记录人的名字,那么你写一个函数叫做setName(),里面需要一个参数,可能是男人,女人,小孩,老人等等各种分类。这个时候你就要去写很多方法,比如setNameForWoman(),setNameForMan(),setNameForChild(),累不累?假如有一个方法就叫setName(),它有一些重载方法,分别为setName(Man man),setName(Woman woman),setName(Child child),以后无论你有任何分类,你都知道,就这么一个方法,我给不同的参数就行,简洁明了,逻辑清晰。

  Ø  Why?

   u  为什么需要函数重载?

    1.试想如果没有函数重载机制,如在C中,你必须要这样去做:为这个print函数取不同的名字,如print_int、print_string。这里还只是两个的情况,如果是很多个的话,就需要为实现同一个功能的函数取很多个名字,如加入打印long型、char*、各种类型的数组等等。这样做很不友好!

    2.类的构造函数跟类名相同,也就是说:构造函数都同名。如果没有函数重载机制,要想实例化不同的对象,那是相当的麻烦!

    3.操作符重载,本质上就是函数重载,它大大丰富了已有操作符的含义,方便使用,如+可用于连接字符串等!

   u  步骤

    重载解析的三个步骤

 

    a)确定函数调用考虑的重载函数的集合,确定函数调用中实参表的属性。

    b)从重载函数集合中选择函数,该函数可以在给出实参个数和类型的情况下用调用中指定的实参进行调用。

    c)选择与调用最匹配的函数。

   u  方法重载规范

    一、方法名一定要相同。

    二、方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体。

        1.如果参数个数不同,就不管它的参数类型了!

        2.如果参数个数相同,那么参数的类型或者参数的顺序必须不同。

    三、方法的返回类型、修饰符可以相同,也可不同。

    (方法重载后待续)

    自己现在的理解先这么多,待续~



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值