1、什么是函数重载
C++中,在同一作用域下,形参列表不同的同名函数构成重载关系,且不会冲突。
2、重载实现的机制
C++代码在编译时函数的参数类型会添加函数名中,也就是说C++的函数名在编译时经历的换名的过程,借助这个方式实现了函数的重载。
注意:由于C++和C函数的编译机制不同,所以C++代码不调用C编译器所编译出的函数。
3、extern “C” {}
功能是告诉C++编译器按照C语言的机制声明函数,这样C++中的代码就可以调用C编译编译出的函数了(C++目标文件与C的目标文件才能合并出可执行文件)。
4、重载和作用域
函数的重载关系一定发在同一作用域下,不同作用下的同名函数构成的是隐藏关系。
5、重载函数的调用
当调用重载函数时,编译器会根据实参的数据类型选择合适的重载函数,实参与形参匹配情况有三种:
-
编译器找到实参与形参完全匹配的函数,编译器会生成调用指令。
-
编译器找到多个匹配函数,但没有一个最佳的,编译器会产生二义错误。绝大数情况下都编译器都能找到一个最佳的匹配函数,但如果没有,编译器就会进行类型提升,这样备选函数中就可能有多个可调用的版本,然后二义性错误就产生了。
-
编译器找不可调用的重载函数,会直接产生错误。
6、指针类型也影响函数的重载
C++函数的参数如果指针类型的,编译时就会在函数的末尾添加Px。
7、如果参数是指针或引用,是否加const也会影响函数的重载。
注意:函数重载是面向对象编程思想的多态(多种形态,根据实参情况对指令作出相
应的反应)的体现,具体调用哪个版本的函数是在编译期间就确定了,所以这种也叫
编译时多态。