(四)函数重载
(1)函数重载的含义是可以有多个重名的函数,因此需要对函数进行重载。可以通过函数重载来设计一系列同名的函数,它们能完成相似的工作,但使用不同的参数列表。函数重载本质上是不同的函数,这与函数的默认参数是完全不同的,函数的默认参数使用的都是同一个函数,只不过后面的参数可以省略罢了。
(2)函数重载的关键是函数的参数列表,也称为函数特征标(function signature)。如果函数调用的时候和所有的函数原型都不匹配,那么会进行强制类型转换,如果这种强制类型转换不能有唯一的选择的话,就会产生错误,这是需要程序设计者重视起来的,正确的做法是提供所有可能的原型或者提供唯一的选择。
(3)引用和变量名是不同类型的参数,但程序是不能区分开的,因此引用和变量名其实是相同的特征标。另外,是特征标而不是函数类型使得可以对函数进行函数重载,函数返回类型不同不能区分不同的函数,此时函数特征标也必须不同,否则就会产生错误。当有多种可以用的重载时,函数将使用最匹配的那个,但如果不能区分出哪个最匹配,就会出现错误。
(4)const引用可以使用非const的对象,但是非const引用不能使用const对象,这是为了数据安全而制定的规则。
(5)函数重载不能滥用,基本上是函数能执行同样的任务,但是处理的数据不同的时候才使用函数重载。有时候可以使用默认参数的功能来实现同样的任务,这一点需要注意。
(6)如果在函数的声明中使用了默认值,那么在函数调用的时候可以不带入参数,如果此时使用不带参数的函数进行函数的重载就会出现定义模糊的现象,编译器将拒绝此类代码。
(7)关于特征标的问题:对于用const修饰的变量,认为是不同的特征标,是可以重载的,比如const变量和const引用。左值引用和右值引用也是不同的特征标。而类型引用和类型本身被视为同一个特征标,因为计算机本身无法通过输入的参数来进行识别。
网友评论