在C语言中我们要实现同类型的两个数字相加很简单,但是我们如果是两个数据传入不匹配的函数中就可能会发生错位,因此c++中创造了一种新的语法叫做:函数重载。

函数重载,简单说就是函数名相同的前提下,用于针对传入的参数类型不同的情况。

c++函数重载_c++

 后面三个不同只要满足其一就构成函数的重载,注意参数的数量不同也同样构成函数的重载。

看以下就构成函数重载的条件,参数类型不同。 

c++函数重载_符号表_02

当然函数重载的首要条件就是要在同一个域中,例如下面就不构成函数重载,因为这两个函数在不同的域中。

c++函数重载_符号表_03

注意函数重载和缺省参数是没有关系的,我们要注意这样调用可能会存在歧义

 

c++函数重载_c++_04

 下面我们进一步来了解函数重载的原理:

我们了解过编译链接过程的朋友们都知道,编译器在处理代码时,都会进行以下操作,先会预处理,之后会进行编译和汇编,最后会进行链接和生成可执行程序

在链接的过程中会生成符号表,会将函数名和地址联系在一起,c++中的函数重载就是通过符号表的不同来实现的。

我们先来看c语言中的符号表:

c++函数重载_开发语言_05

 注意函数中只有声明没有定义就会报错

c++函数重载_符号表_06

 

 c++符号表中函数的地址是函数第一句代码的地址,c++在vs的编译器中采用函数修饰名原则

这是Linux的符号表,c++的符号表和这个差不多 。

因此即使我们使函数名相同也不会出现调用的错误。

c++函数重载_函数重载_07

 这里进一步说明我们只是让返回值相同是没有用的,因为最后我们都是通过符号表和地址去查找。

c++函数重载_符号表_08