C++编程思想--函数重载和默认参数

 函数重载与默认参数


一、何谓函数重载

函数重载中,可以通过调用同一个函数名字达到不同的功能,但是传入的值类型或许不同。于是在C++中设置其为函数重载。

1、那么编译器是如何区分不同的参数类型的呢。编译器中采用名字修饰的概念,用不同的参数类型修饰不同的函数名,对于同一个print函数来将,就会产生_print_char_print_int的内部名字。但是这种名字修饰是没有统一的标准的。不过是为了区分。这种情况就为我们提供了一个类型的安全连接。比如下面的例子:

First.cpp

void f(int){}

Second.cpp

void f(char);

int main()

{

f(1);

}

虽然函数实际上调用的是第一个文件中的f函数,那么在C++中由于安全连接的考虑会将其变为f_inrf_char这种类型。但是在C中是根据函数被调用的方式去推断函数的声明的,因此会编译成功。连接也会成功。这就产生了一个非常严重的后果,但是在C++中则避免了此种问题的发生。

2、我们在刚开始学的时候总是会误以为返回值的不同也是重载的一种类型。原因有2.首先在C语言中,我们调用一个函数可以忽略它的返回值。其2,用户若没有看到声明的情况下,如何知道调用的到底是哪一个函数,为了避免这个副作用,在C++中将返回值的不同不放在重载中进行考虑。

二、默认参数

在编写函数的时候为参数加上一个给定的值,可以避免在调用的时候每次都输入一样的值。这无疑减少了很大一部分的工作。那么在调用函数的时候,编译器就会自动的插上这个值。

1、一些规则:1)只有参数后部参数才是可默认的;在函数调用中开始使用默认参数,后面的参数就必须都是默认的。2)默认参数只能放在函数声明中,通常至于一个头文件中。

2、在提到默认参数,前几天在网上看到他人的代码中发现有 void fnint n, int=0),那么这第二个就是为占位符,这种语法允许将一个参数当作占位符但是不去使用它。比如开始使用一个函数参数,但后来发现不需要使用它,那么就不需要改动那些调用该函数以前版本的程序代码。

三、两者中的选择

我们发现在使用默认的参数的时候似乎可以达到一个函数多用的状态。有点类似于重载中一个函数名字但是可以被多种方式调用。那么什么时候选用重载呢?

1、当某些值为固定值的情况下。特别是当类的调用者能够制定参数,将那些最不可能调用的默认参数放在参数表的最后面的时候。

2、将新增参数作为默认的参数的时候可以免除用户的代码收到影响

3、若参数不是固定值,且有的时候可能需要根据参数来标志决定执行函数的时候,就应该使用重载函数。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值