什么是函数重载
函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处
为什么要重载
同名同功能函数:相同功能函数可以由相同名字。
类的构造函数:也就是说:构造函数都同名。如果没有函数重载机制,要想实例化不同的对象,那是相当的麻烦!
操作符重载:本质上就是函数重载,它大大丰富了已有操作符的含义,方便使用,如+可用于连接字符串等!
编译器如何识别重载函数:
C++编译器是同过“作用域+返回类型+函数名+参数列表”构成函数标签加以区分重载函数
使用反汇编可执行文件可以查看重载函数的标签组成
编译器是如何匹配
精确匹配:参数匹配而不做转换,或者只是做微不足道的转换,如数组名到指针、函数名到指向函数的指针、T到const T;
提升匹配:即整数提升(如bool 到 int、char到int、short 到int),float到double
使用标准转换匹配:如int 到double、double到int、double到long double、Derived*到Base*、T*到void*、int到unsigned int;
使用用户自定义匹配;
使用省略号匹配:类似printf中省略号参数