函数重载Function Overloading和默认参数default arguement


一、函数重载Overload是什么?

        在自然语言中,很多词语都可以用在不同的对象上,例如,洗衣服,洗车。对于实现类似功能的函数,我们往往倾向于给他们相同的名字。对于C语言来说,不支持函数的重载,我们就需要加后缀来表示区分,但是这样会大大增加代码量。在C++中,我们可以写出一系列参数的数量和类型不等的同名函数,来实现函数的重载(overload)

         另外,函数重载对于构造函数也是密不可少的,我们希望一个类可以用标准的方式初始化自身,也可以从文章读取信息初始化。我们就需要两个构造函数,一个不带参数(默认构造函数),另一个使用字符串作为参数。两个都是构造函数,因此他们有相同的名字:类名。

        对于函数重载,我们会优先调用和参数最匹配的函数,包括参数的数量、参数的类型

需要注意的是,参数的名称和返回值的类型不在重载考虑的范围内,也就是说,下面这两种编译器都会报错。

         这是可以理解的,毕竟变量的名称不会出现在机器代码里,只是给程序员作区分,也就是说,在编译器看来,上面的两个函数是完全一样的,就会报出重定义的错误。

        对于下面的两个函数,在我们调用add(1,2)的时候,编译器会发现两个函数只有返回值类型不同,从而不知道具体调用哪个函数。事实上,在函数重载里,我们往往就是用参数的类型或数量不同区分,例如add(1,2)和add(1,2,3),就很容易区分出调用的哪个函数。

二、默认参数Default Arguments

          

         默认参数是函数声明的时候,给定某些值,如果调用函数的时候没有制定这些参数的值,编译器就会自动插上这个值。

        例如,如果不使用默认参数,我们会写这样两个函数

Stash(int size ,int initquantity);

Stash(int size);

        但如果使用默认参数,以上两种就可以用一个函数声明来代替。

Stash(int  suze ,int initquantity = 0);

        如此,StashA(100);和StashB(100,0);便有了一样的含义。

又比如下面的例子。

 

        我们在使用默认参数的时候需要注意,第一,只有参数列表后面的参数才可以设置为默认参数,不可以在一个默认参数后面添加一个非默认的参数。第二,一旦在一个函数中开始使用默认参数,那么这个参数后面的所有参数都会是默认的。

        另外,默认参数在和参数类型相同但是数量不同的函数重载一起使用的时候,往往会产生一些问题。例如在下面的例子中,我们调用fun(2),这同时符合了两个函数的调用形式,编译器就会报错。

三、重载和默认构造函数题目

 又比如这个题目中,

A选项只变量名不同,属于重复定义,error

B中只有返回值不同,也不符合规范

C中参数的类型不同,符合函数重载

D中属于默认参数和函数重载产生的冲突,对于fun(1)这种形式的调用会产生混乱,所以也不符合规范。

E参数的数量不同,符合函数重载。

 又例如对于fun(fun(a,b)),首先分析fun(1.5,2),这里涉及到类型转化,1.5会被向下取整1为1,于是fun(1,2)结果为1+2=3,从而再调用fun(3)3+1=4

再看fun(fun(a),b),fun(1.5)的结果是1.5,再调用fun(1.5,2)同上文为3

所以输出3+4=7

重载和重写的区分:

重写(override)子类继承父类的方法,而又不想原封不动的继承父类的方法,而是做一定的修改,就需要用到方法的重写,也叫作方法的覆盖。

重载(overload)定义多个同名函数的方法,但是要求每个方法具有不同的参数类型亦或是参数个数。


 

 

总结

1.重载

2.默认参数

3.重载和默认参数的题目

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值