date: 2019-9-13
title:
函数重载(静多态)
函数重载的命名规则
- 通过判断函数形参的类型、个数和顺序来区分多个相同函数名的函数
- 函数的返回值类型,不是区分函数重载的条件
函数重载的调用规则
- 参数类型符合时,严格按照上述要求调用
- 参数类型不符合时,编译系统会对参数进行隐式转换后,寻找对应的重载函数。
- 隐式转换的原则:低精度数据会自动转成高精度数据后,寻找对应的重载函数,如上述条件不满足,无高精度参数的函数,则会降低精度进行转换,此时可能会出现函数调用的歧义(ambiguous)现象,如数据为 int类型,但是重载函数参数只有double和float类型,或者数据为double类型,但是重载函数只有int和float类型的,再或者是,数据为long int,但是 重载数据只有int,double, float类型的。
- 因此总结,若函数重载时涉及参数隐式类型转换的,同时数据为高精度向低精度转换,则极有可能会出现歧义,编译器可能将其转换为任意一种低精度的数据。
函数重载的原理
倾轧(mangling)
- 倾轧的本质就是对函数的重命名
- 倾轧技术发生在两个阶段,.cpp编译阶段,和.h的声明阶段。只有两个阶段同时进行,才能匹配调用。
- C兼容C库函数(链接库),C库函数只有在链接时才加入,不存在让C编译器去倾轧的问题,而C都文件中声明的C库函数在调用时会发生倾轧,因此为了保证C库函数的一一对应,必须使得C++编译器在编译C库函数头文件时不倾轧,为了达到这个目的,我们必须引入extern "C"。
函数默认参数
默认参数的定义规则
- 在函数的形参定义时,直接赋予初值。
void Add (int a = 1, int b = 1) { ... }
- 同时,C++规定函数,形参的默认值,只能从右向左,且中间不能跳跃。
错误定义方式
void sum (int a = 1, int b, int c = 3) { ... }
默认参数的使用规则
- 实参个数 + 默认形参个数 >= 参数个数
引用
引用的特性
- 引用是变量的别名,申请时不占用内存空间
- 引用申明时必须赋值。
- 一个变量可以有多个引用。
- 可以定义指针的引用,但是不能定义引用的指针。
- 普通引用变量的类型,必须与所引用对象一致。
- 数组也可以申请引用,但在定义时必须表明数组长度。
来源:博客园
作者:XZZHY
链接:https://www.cnblogs.com/XZZHY/p/11518018.html