函数重载与默认参数

函数重载

为什么需要函数重载?

  在开发过程中,有时候需要实现几个功能类似的函数,只是细节有所不同
  如交换两个变量的值,变量的类型有很多,在C语言中,必须要设计不同名的函数,但在C++中完全没有必要
  C++允许多个函数拥有相同的名字,只要它们的参数列表不同即可,这就是函数重载

函数重载的定义

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

函数重载的规则

  - 函数名称必须相同
  - 参数列表必须不同(参数的类型不同、个数不同、顺序不同)
  - 函数的返回类型可以相同可以不同
  - 仅仅返回类型不同不足以成为函数的重载

函数重载的原理与步骤

  原理:函数重载的原理叫名字改编
  步骤:当函数名字相同的时候,根据函数参数列表不一样,对函数名字进行改编。
        改编的时候,根据参数的个数、参数顺序、参数类型进行改编。

默认参数

默认参数的目的

  C++可以给函数定义默认参数值
  通常,调用函数时,要为函数的每个参数给定对应的实参,但C++可以给参数定义默认值,这样在调用函数时,就可以减少传参的个数
  允许函数设置默认参数值,是为了让编程简单,让编译器做更多的检查错误工作。

默认参数的声明

  一般默认参数在函数声明中提供。
  当一个函数既有声明又有定义时,只需要在其中一个中设置默认值即可。
  若在定义时而不是在声明时置默认值,那么函数定义一定要在函数的调用之前。
  因为声明时已经给编译器一个该函数的向导,所以只在定义时设默认值时,编译器只有检查到定义时才知道函数使用了默认值。
  若先调用后定义,在调用时编译器并不知道哪个参数设了默认值。
  所以我们通常是将默认值的设置放在声明中而不是定义中。

默认参数的顺序规定

  - 如果一个函数中有多个默认参数,则形参分布中,默认参数应从右至左逐渐定义。当调用函数时,只能向左匹配参数。
  - 若给某一参数设置了默认值,那么在参数表中其后所有的参数都必须也设置默认值,否则,由于函数调用时可不列出已设置默认值的参数,编译器无法判断在调用时是否有参数遗漏。

默认参数与函数重载

  - 默认参数可以将一系列简单的重载函数合成一个
  - 如果一组重载函数(可能带有默认参数)都允许相同实参个数的调用,将会引起调用的二义性,所以在函数重载时,要谨慎使用默认参数
原文地址:https://www.cnblogs.com/xkyrl/p/14663543.html