当前位置: 首页 > 文档资料 > C++大学教程 >

12.3 重载模板函数

优质
小牛编辑
138浏览
2023-12-01

模板函数与重载是密切相关的。从函数模板产生的相关函数都是同名的,因此编译器用重载的解决方法调用相应函数。

函数模板本身可以用多种方式重载。我们可以提供其他函数模板,指定不同参数的相同函数名。例如,图12.2的printArray函数模板可以用另一printArray函数模板重载,用参数lowSubscriPt和highSubscript指定要打印的数组部分(见练习12.4)。

函数模板也可以用其他非模板函数(同名而参数不同)重载。例如,图12.1的printArray函数模板可以用一个非模板函数重载,指定以整齐的表格式分栏打印字符串数组(见练习12.5)。

常见编程错误 12.2
如果使用用户自定义类的类型调用模板,而模板时该类型对象使用 ==、+、<= 等运算符,那么这些运算符需要重载。如果不重载这些运算符,则会发生错误,固为编译器在这些函数不存在的情况下仍然调用这些重载的运算符函数。

编译器通过匹配过程确定调用哪个函数。首先,编译器寻找和使用最符合函数名和参数类型的函数调用。如果找不到,则编译器检查是否可以用函数模板产生符合函数名和参数类型的模板函数。

过去,这种与模板的匹配过程要求所有参数类型都完全匹配,而不能进行自动转换。现在已经没有这么严格,可以采用通常的重载规则。

常见编程错误 12.3
编译器通过匹配过程确定调用哪个函数,如果找不到匹配或产生多个匹配,就全产生编译错误。