C++

匿名 (未验证) 提交于 2019-12-03 00:04:02


date: 2019-9-13
title:


函数重载(静多态)

函数重载的命名规则

  1. 通过判断函数形参的类型、个数和顺序来区分多个相同函数名的函数
  2. 函数的返回值类型,不是区分函数重载的条件

函数重载的调用规则

  1. 参数类型符合时,严格按照上述要求调用
  2. 参数类型不符合时,编译系统会对参数进行隐式转换后,寻找对应的重载函数。
  3. 隐式转换的原则:低精度数据会自动转成高精度数据后,寻找对应的重载函数,如上述条件不满足,无高精度参数的函数,则会降低精度进行转换,此时可能会出现函数调用的歧义(ambiguous)现象,如数据为 int类型,但是重载函数参数只有double和float类型,或者数据为double类型,但是重载函数只有int和float类型的,再或者是,数据为long int,但是 重载数据只有int,double, float类型的。
  4. 因此总结,若函数重载时涉及参数隐式类型转换的,同时数据为高精度向低精度转换,则极有可能会出现歧义,编译器可能将其转换为任意一种低精度的数据。

函数重载的原理

倾轧(mangling)

  1. 倾轧的本质就是对函数的重命名

  2. 倾轧技术发生在两个阶段,.cpp编译阶段,和.h的声明阶段。只有两个阶段同时进行,才能匹配调用。
  3. C兼容C库函数(链接库),C库函数只有在链接时才加入,不存在让C编译器去倾轧的问题,而C都文件中声明的C库函数在调用时会发生倾轧,因此为了保证C库函数的一一对应,必须使得C++编译器在编译C库函数头文件时不倾轧,为了达到这个目的,我们必须引入extern "C"。

函数默认参数

默认参数的定义规则

  1. 在函数的形参定义时,直接赋予初值。
void Add (int a = 1, int b = 1) { ... }
  1. 同时,C++规定函数,形参的默认值,只能从右向左,且中间不能跳跃。
    错误定义方式
void sum (int a = 1, int b, int c = 3) { ... }

默认参数的使用规则

  1. 实参个数 + 默认形参个数 >= 参数个数

引用

引用的特性

  1. 引用是变量的别名,申请时不占用内存空间
  2. 引用申明时必须赋值。
  3. 一个变量可以有多个引用。
  4. 可以定义指针的引用,但是不能定义引用的指针。
  5. 普通引用变量的类型,必须与所引用对象一致。
  6. 数组也可以申请引用,但在定义时必须表明数组长度。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!