当前位置: 首页 > news >正文

C++:函数重载

自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了,函数重载就相当于是定义了同名的函数,且仅限于名字相同

 

文章目录

 

前言

一、什么是函数重载?

 1.1参数的数量不同

  1.2参数的类型不同

 1.3参数的顺序不同

1.4 重载的条件 

二、为什么有函数重载

2.1直观的命名表达不同功能 

2.2为什么C语言中不支持重载,但是C加加中支持

 

总结


 

 


前言

”重载“ 是一种允许使用相同名称的函数或操作符,但它们的参数列表或返回类型不同,以实现不同功能的机制。以下是关于 C++ 函数重载的详解:


一、什么是函数重载?

函数重载定义 :在同一个作用域内,允许定义多个同名函数,这些函数的参数列表不同,即参数的数量、类型或顺序不完全相同,但函数名相同。就好比在公司里,不同职位的人有可能会重名,但公司里的人或同事可以根据他的职位和部门来区分。

 1.1参数的数量不同

#include<iostream>
using namespace std;
void add(int a, int b)
{cout << a + b << endl;
}
void add(int a,int b,int c)
{cout << a + b + c<< endl;
}
int main()
{add(1, 2);add(1,2,3);return 0;
}

  1.2参数的类型不同

#include<iostream>
using namespace std;
void add(int a, int b)
{cout << a + b << endl;
}
void add(double a, double b)
{cout << a + b << endl;
}
int main()
{add(1, 2);add(1.1, 2.2);return 0;
}

 1.3参数的顺序不同

#include<iostream>
using namespace std;
void add(int a, int b)
{cout << a + b << endl;
}
void add(int a, double b)
{cout << a + b << endl;
}
int main()
{add(1, 2);add(1, 2.2);return 0;
}

1.4 重载的条件 

函数名相同,参数列表不同,返回值类型可以相同也可以不同,但不能仅以返回值类型不同来重载函数。

#include<iostream>
using namespace std;
void add(int a, int b)
{cout << a + b << endl;
}
int add(int a,int b)
{return a+b
}
int main()
{add(1, 2);add(1, 2);return 0;
}

 这样的是不构成重载的:

说白了就是函数名或参数一定要有一个不同,参数的不同,不同在个数以及类型以及类型的顺序


 

二、为什么有函数重载

 

2.1直观的命名表达不同功能 

在设计函数时,有些函数功能类似,如果没有重载的话,就可能需要给不同类型的函数取不同的名字,但是他们的功能都是相似的,比如说,都是加法函数我浮点型相加,要写成整型相加,要写成,而有了重载之后,我们可以使用同一个函数名,"add",让代码变得更加的清晰,让别人看到函数就知道它的功能是什么,提高了代码的可读性

C语言中是判断不了调用哪个函数,但是C++中可以支持这种操作,它会根据传入的参数类型自动匹配所对应的函数

2.2为什么C语言中不支持重载,但是C加加中支持

​​​C:

#include<stdio.h>
void add(int a, int b)
{printf("%d\n", a + b);
}
void add(double a, double b)
{printf("%lf\n", a + b);
}
int main()
{add(1, 2);add(1.1, 2.2);return 0;
}

 

 C++:

 

C语言不支持函数重载的原因之一:

 C语言的函数调用约定是基于函数名的。在编译时,C语言的编译器会根据函数名生成对应的符号(symbol),而不会根据参数类型或数量进行区分。例如,对于函数  void add(int a,int b)  和  void add(double a,double,b)  ,如果C语言支持重载,那么编译器在生成符号时会面临冲突,因为它们的函数名相同。C语言的编译器和链接器无法区分同名但参数不同的函数,因此无法实现函数重载。

C++支持函数重载的原因之一:

C++通过名称修饰(也称为名称修饰符或名称修饰规则)解决了函数重载的符号冲突问题。名称修饰是一种将函数名、参数类型、返回类型等信息编码到符号名称中的机制。例如,对于函数  void add(int)  ,C++编译器可能会生成一个符号如  _Z3fooi  ,而对于  void add(float)  ,可能会生成  _Z3foof  。通过这种方式,C++编译器和链接器可以区分同名但参数不同的函数,从而支持函数重载。

 

 

总结

首先,这篇文章一开始从函数重载的定义入手,从三个方面讲解重载的条件,以及给出了反面例子,其次又说明了为什么有函数重载,并且附加了为什么C语言不支持重载函数,但是C++支持重载函数

 

相关文章:

  • 【Python Web开发】02-Socket网络编程02
  • 从零到精通:全面解析人工智能的核心技术与发展趋势
  • 矩阵运营的限流问题本质上是平台与创作者之间的流量博弈
  • 高德MCP制作旅游攻略
  • NLP高频面试题(五十三)——深度学习正则化详解
  • Vue: el-select选项中如何显示label之外的其他信息
  • CentOS系统中MySQL安装步骤分享
  • kotlin和MVVM的结合使用总结(二)
  • 【工具】使用 MCP Inspector 调试服务的完全指南
  • 展锐Android13电池问题导致系统的崩溃,(2)电池电压计算和电池曲线
  • JAVA聚焦OutOfMemoryError 异常
  • STM32F407使用ESP8266实现阿里云OTA(下)
  • Red:1靶场环境部署及其渗透测试笔记(Vulnhub )
  • Python面向对象编程相关的单选题和多选题
  • 测试基础笔记第十一天
  • 济南国网数字化培训班学习笔记-第二组-2节-输电线路施工及质量
  • Linux基础篇、第四章_01软件安装rpm_yum_源码安装_二进制安装
  • Linux基础
  • yt-dlp 下载时需要 cookie
  • 【Redis】 Redis中常见的数据类型(二)
  • 石磊当选河北秦皇岛市市长
  • 大家聊中国式现代化|郑崇选:提升文化软实力,打造文化自信自强的上海样本
  • 新华视点丨广西抗旱一线调查
  • 王毅会见瑞士联邦委员兼外长卡西斯
  • 上海开展2025年“人民城市 文明风采”群众性主题活动
  • 国防部:“台独”武装摆练纯属搞心理安慰,怎么演都是溃败的死局