在C++中的函数重载

首先先简单介绍一下C++和函数重载:

  • C++:
    是C语言的继承,在可以进行C语言的过程化程序设计以外,还可以进行面向对象对的程序设计。拥有面向对象的三大特性:继承性、封装性、多态。

  • 函数重载:
    在同一作用域内,可以有一组具有相同函数名,不同形式参数(参数的个数、类型或顺序)的函数,这组函数成为重载函数。重载函数一般用来实现功能相似而所处理的数据类型不同的问题,其返回值类型可以相同,也可以不同。

在C++中,函数支持重载,而C语言中,函数不支持重载。那么为什么呢?

首先先了解一下代码的编译过程:

  1. 预处理阶段:(生成.i文件)
    (1)头文件展开
    (2)宏替换
    (3)去注释
    (4)预处理(条件编译)
  2. 编译过程:(生成.s文件)
    检查语法,将高级语言转为汇编语言
  3. 汇编过程:(生成.0文件)
    将汇编语言转换为机器码
  4. 链接过程:(生成.exe或a.out文件)
    将所引用的数据链接进来

编译器在编译时中会对函数进行重命名。
在C语言和C++中,函数在经编译器编译后在库中的名字会有所不同。
在C中,同名函数在经编译器编译后在库中的名字都是一样的,在链接时,会因为无法确定具体为哪一个函数而报错。在而在C++中,重载函数在经编译器编译后在库中生成的名字会因参数列表的差异而不同,在链接时则不会报错。
例如:Add函数

#include<iostream>
using namespace std;

int Add(int a, int b)
{
    return a + b;
}

float Add(int a, float b)
{
    return a + b;
}

float Add(float a,float b)
{
    return a + b;
}

float Add(int a,int b,float c)
{
    return a + b + c; 
}

int main()
{
    int ret1 =Add (1, 2);
    float ret2 = Add(1, 2.2f);
    float ret3 = Add(2.5f,3.4f);
    float ret4 = Add(3, 5, 2.66f);

    cout << ret1 << endl;
    cout << ret2 << endl;
    cout << ret3 << endl;
    cout << ret4 << endl;

    return 0;
}

在.c++文件中,程序正常编译通过:
这里写图片描述
在.c 文件中,程序报错Add函数已有主体:
这里写图片描述

也就是说,C++支持函数重载,而C语言不支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值