1. 概述
如果两个函数名字相同并且在相同的域中被声明,但是参数表不同,则它们就是重载函数overloadedfunction。
1.1 重载函数条件
参数类型或参数个数不同。
返回值不同不能视为重载。
是否为常函数不能视为重载
对于普通类型参数只有const、volatile区别不能视为重载,但是如果参数是指针或 引用类型,那么const、volatile的区别视为重载。
1.2 重载与域
重载函数集合中的全部函数都应在同一个域中声明,一个声明为局部的函数将隐藏而不是重载一个全局域中声明的函数。
最常见的例子就是继承关系中的子类声明和父类同名的函数,这不是重载,切记切记!
15章
Using声明和Using指示符??
using声明、using指示符其实这两个东西是一样的用途。
using声明指定域中需要引入的名字,using指示符引入整个域。
using声明、using指针符对重载的影响
引入的名字可以进行重载。
1.3 Extern “C”和重载函数
引入的C函数也可以进行重载。但是,链接指示符只能指定重载函数集中的一个函数。
2. 重载解析的三个步骤
² 确定函数调用考虑的重载函数的集合,确定函数调用中实参表的属性。
² 从重载函数集合中选择函数,该函数可以在给出实参个数和类型的情况下用调用中指定的实参进行调用。
² 选择与调用最匹配的函数。
函数重载解析的第一步是确定对该调用所考虑的重载函数集合。该集合中的函数被称为
候选函数(candidatefunction)。候选函数是与被调用函数同名的函数,并且在调用点上,它
的声明可见。
函数重载解析的第二步是从第一步找到的候选函数中选择一个或多个函数,它们能够用该调用中指定的实参来调用。因此,选出来的函数被称为可行函数(viablefunction )。可行函数的参数个数与调用的实参表中的参数数目相同,或者可行函数的参数个数多一些,但是每个多出来的参数都要有相关的缺省实参。对于每个可行函数,调用中的实参与该函数的对应的参数类型之间必须存在转换。
函数重载解析的第三步选择与调用最匹配的函数,该函数被称为最佳可行函数。
最佳可行函数是被适用于如下规则的函数:
² 应用在实参上的转换不比调用其他可行函数所需的转换差。
² 在某些实参上的转换要比其他可行函数对该参数的转换好。