【C++课程学习】:C++入门(函数重载)

news2024/11/20 6:23:12

🎁个人主页:我们的五年

🔍系列专栏:C++课程学习

🎉欢迎大家点赞👍评论📝收藏⭐文章

 

目录

🌈函数重载:

🍉1.参数个数不同:

🍉2.参数的类型不同:

🍉3.参数类型顺序不同:

🌈函数名修饰规则:

 🌈链接:


 

 前言:

本篇文章是上一篇文章C++入门(输入输出,缺省)其他C++入门知识。在这里感谢大家的支持,让我们一起进步。

🌈函数重载:

不同的话在不同的情况下会有不同的语义。函数也是一样的,有很多个名字一样的函数,但是在不同的情况下,调用的函数不同。

看一下函数重载的定义:

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表( 参数个数 类型 类型顺序 )不同,常用来处理实现功能类似数据类型不同的问题。
返回值类型不同是不构成函数重载的。(因为编译器无法区分)

同名函数的形参列表不同的三个方面:

下面三种情况,只要满足一种,就构成函数重载。

🍉1.参数个数不同:

看下面的代码:

#include<iostream>
using namespace std;

//形参的个数不同
//没有形参
void print()
{
	cout << "print()" << endl;
}
//一个int形参
void print(int a)
{
	cout <<"print(int a)" << endl;
}
//两个int形参
void print(int a,int b)
{
	cout <<"print(int a,int b)"<<endl;
}

int main()
{
	print();
	print(10);
	print(20,20);
}

🍉2.参数的类型不同:

下面print函数中:没有参数,只有一个int参数,只有一个double参数

#include<iostream>
using namespace std;

//形参的类型不同
void print()
{
	cout << "print()" << endl;
}
//一个int形参
void print(int a)
{
	cout << "print(int a)" << endl;
}
//一个double形参
void print(double a)
{
	cout <<"print(double a)" << endl;
}

int main()
{
	print();
	print(10);
	print(3.14);
}

 

🍉3.参数类型顺序不同:

#include<iostream>
using namespace std;

//形参的类型顺序不同
//顺序为int,char
void print(int a,char b)
{
	cout << "int a,char b" << endl;
}

//顺序为char,int
void print(char a,int b)
{
	cout << "char a,int b" << endl;
}

int main()
{
	print(1, 'c');
	print('c', 1);
}


那么这里就有一个问题:

为什么我们之前在学C语言的时候,我们没有学函数重载?

因为C语言是不支持函数重载的,C++是支持函数重载的。那问题又来了,为什么C语言不支持函数重载,C++支持函数重载?

这是因为C语言函数修饰只有函数名,只有函数名不同时才能区分。但是C++中,函数修饰要加上函数的形参,也就是说,名字一样的函数,当形参链表不同时,函数就是不同的,编译器就可以分辨出来。

不同的编译器,函数名修饰规则不同。

🌈函数名修饰规则:

当我们调用一个函数的时候,编译器是怎么去找这个函数的呢?
这里我们先来讲函数名修饰规则:

在C语言中函数的名称就是函数名,没有在这基础上加其他的信息。

但是在C++中,函数名的修饰还要加上其参数列表。

下面来看看linus下的C语言函数名的修饰和C++函数名的修饰:

1.C语言:

C语言编译完以后,就函数名称还是Add,和func,没有做其他的改变

2.C++:

Linux下,采用gcc编译,C++的修饰规则是【_z+函数长度+函数名+类型首字母】。(如果是指针的话,一级指针是p类型)

在C++中,我们可以很明显的发现,函数名除了Add以外还加了其他的东西,Add前面加了_z+函数名长度,在Add后面加了ii。然后我们看Add函数的参数,发现是两个int,然后我们是不是就可以推测,函数名是不是在后面还会加上参数的开头字母。

我们再来看看func函数,发现前面还是_z,func的长度为4,所以就是_z4。然后后面增加了idpi,i对应int,d对应double,pi对应int*。好像确实是没有什么问题的,所以C++中确实把函数形参也放在函数名里面,用以区分函数名相同,不同参数列表的函数(重载函数)。

 vs上的修饰规则比较复杂,我们后面再来讲解。


 🌈链接:

我们把代码写完,然后让编译器去翻译,然后执行就可以运行我们的代码。

我们调用一个函数,每个函数有不同的函数名,我们就可以通过符号表中寻找函数,找到函数的地址。正常情况下,我们会写很多个.c和.h文件,每个文件都会生成自己的目标文件。去找函数的地址就是发生在编译后链接前。

如果我们在a.c文件种使用了b.c文件中的Add函数,因为Add函数在a.c文件种没有定义,所以在a.c中是找不到的,在链接的时候,要去b.c文件的符号表中才能找到Add函数的地址,从而链表在一起。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1798845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机视觉(9)】

基于Python的OpenCV基础入门——形态学操作 形态学操作腐蚀膨胀开运算闭运算梯度运算顶帽黑帽 形态学操作代码实现以及效果图 形态学操作 形态学操作是数字图像处理中的一种方法&#xff0c;用于改变和提取图像中的结构和形状信息。它基于图像的形状和大小特征&#xff0c;通过…

【Framework系列】Excel转Json,配置表、导表工具介绍

今天来介绍一下Framework系列的配置部分&#xff0c;这一部分归属于Framework-Design之中。读过《Framework系列介绍》的小伙伴应该了解整个Framework框架是由多个工程项目组成&#xff0c;没看过的小伙伴可以点击链接了解一下。 Framework-Design设计的初衷是给策划同学用的&a…

为Android组件化项目搭建Maven私服

概览 文章目录 概览前言搭建 maven 私服服务器环境jdk安装配置nexus安装配置管理创建存储点、仓库 项目中使用 maven 私服上传 module 到仓库自动发布 module手动上传单个aar包 引用仓库中的 modulebuild.gradle引入远程module FAQ开发阶段有些module用远程依赖&#xff0c;有些…

苹果警告部分 iPhone 用户称他们遭到雇佣间谍软件攻击

苹果警告部分 iPhone 用户称他们遭到“雇佣间谍软件攻击 苹果正在提醒用户注意针对 iPhone 的新一轮已识别雇佣间谍软件攻击。可能的受害者已经收到来自苹果的电子邮件&#xff0c;其中描述了该攻击如何“远程破坏 iPhone”。据路透社报道&#xff0c;印度和其他 91 个国家的受…

内容产品运营方案业务架构解析与实践探索

### 背景 在信息爆炸的时代背景下&#xff0c;内容产品运营成为各行各业竞争的重要环节。构建合理的内容产品运营方案业务架构&#xff0c;能够帮助企业更好地管理内容生产、推广和变现&#xff0c;提升品牌影响力和商业价值。 ### 业务架构设计 #### 1. 内容生产与管理 建立…

一套java开发的(未来工厂核心MES系统成品源码)技术架构:java+springboot 支撑多端管理,可商用

MES定义为“位于上层的计划管理系统与底层的工业控制之间的面向车间层的管理信息系统” 20世纪90年代初期&#xff0c;中国就开始对MES以及ERP的跟踪研究、告知或试点&#xff0c;而且曾经发言 “管控一体化”&#xff0c;“人、财、物、产、供、销”等颇具中国独具一格的CIMS、…

input组件 type为nickname pc端获取不到这个绑定的值?

一、input组件 type为nickname pc端获取不到这个绑定的值&#xff1f; 在pc端 使用input blur 事件获取选择昵称结果失败 代码如下&#xff1a; <input type"nickname" bindblur"binname" name"nickName" placeholder"请输入昵称"…

2024年政治经济学与社会科学国际会议(ICPESS 2024)

2024年政治经济学与社会科学国际会议 2024 International Conference on Political Economy and Social Sciences 会议简介 2024年政治经济学与社会科学国际会议是一个致力于探讨政治经济学与社会科学交叉领域前沿问题的国际盛会。本次会议汇聚了全球顶尖的专家学者、研究人员和…

传统产品经理AI产品经理

前言 随着科技的发展&#xff0c;技术的革新&#xff0c;AI技术当今已经渗入到各个行业里边&#xff0c;身处其中的产品经理也面临的新的挑战和机遇&#xff0c;下面是笔者整理分享的关于传统的产品经理如何顺应时代发展&#xff0c;成功转换成AI产品经理的相关内容&#xff0…

vcruntime140.dll干嘛的?丢失了vcruntime140.dll要咋办?

vcruntime140.dll干嘛的&#xff1f;vcruntime140.dll就是一个dll文件&#xff0c;它对于很多程序都是有用的&#xff0c;如果没有了它&#xff0c;那么你的有些程序是打不开的&#xff01;所以当你丢失的时候&#xff0c;你就要想办法去修复vcruntime140.dll文件&#xff0c;假…

那个会用AI绘画的设计师,刚刚加薪了!不会AI的打工人却只能被优化?

大家好&#xff0c;我是向阳。 随着ChatGPT引领人工智能的热潮&#xff0c;AI绘画也悄然崭露头角&#xff01; 插画师、建筑师、平面设计师等艺术创作领域的从业者&#xff0c;感受到了前所未有的压力 当一个设计师能有多难&#xff1f; 设计师需要在&#xff1a;主管/经理…

SQL面试问题集

目录 Q.左连接和右连接的区别 Q.union 和 union all的区别 1、取结果的交集 2、获取结果后的操作 Q.熟悉开窗函数吗&#xff1f;讲一下row_number和dense_rank的区别。 Q.hive行转列怎么操作的 Q.要求手写的题主要考了聚合函数和窗口函数&#xff0c;row_number()&#…

(2024,ViT,小波变换,图像标记器,稀疏张量)基于小波的 ViT 图像标记器

Wavelet-Based Image Tokenizer for Vision Transformers 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0 摘要 1 引言 3 基于小波的图像压缩简介 4 图像标记器 4.1 像素空间标记嵌…

【Python机器学习】主成分分析(PCA)

主成分分析&#xff08;PCA&#xff09;是一种旋转数据集的方法&#xff0c;旋转后的数特征在统计上不相关。在做完这种旋转之后&#xff0c;通常是根据新特征对解释数据的重要性来选择它的一个子集。 举例&#xff1a; import mglearn.plots import matplotlib.pyplot as pl…

AWS S3存储桶中如何下载文件

AWS S3存储桶中如何下载文件 1.单个下载 AWS S3 控制台提供了下载单个文件的功能&#xff0c;但是不支持直接在控制台中进行批量下载文件。您可以通过以下步骤在 AWS S3 控制台上下载单个文件&#xff1a;   1.1登录 AWS 管理控制台。   1.2转到 S3 服务页面。   1.3单击…

seerfar丨OZON运营工具,OZON选品插件

随着全球电商市场的蓬勃发展&#xff0c;OZON作为俄罗斯及东欧地区的重要电商平台&#xff0c;吸引了众多中国商家的目光。然而&#xff0c;如何在OZON平台上脱颖而出&#xff0c;实现高效的商品运营&#xff0c;成为了众多商家亟待解决的问题。在这样的背景下&#xff0c;seer…

流批一体计算引擎-10-[Flink]中的常用算子和DataStream转换

pyflink 处理 kafka数据 1 DataStream API 示例代码 从非空集合中读取数据&#xff0c;并将结果写入本地文件系统。 from pyflink.common.serialization import Encoder from pyflink.common.typeinfo import Types from pyflink.datastream import StreamExecutionEnviron…

什么是阴道菌群CST分型,不同的分型代表哪些女性健康问题

谷禾健康 人体内的各个部位&#xff0c;如皮肤、口腔、肠道和阴道等&#xff0c;都是微生物的重要栖息地&#xff0c;这些微生物与人体健康紧密相关&#xff0c;并能反映人体的疾病状态。这些部位因受基因、环境和生活方式等影响&#xff0c;具有独特的菌群特征。 女性生殖系统…

Linux磁盘分区(fdisk)和卷管理详解(VG-LV-PV)

先看整体图&#xff0c;再讲解概念 一、磁盘分区 一个磁盘disk可以分多个区part&#xff0c;用fdisk命令&#xff0c;举例把/dev/vdb划分为/dev/vdb1和/dev/vdb2 二、创建虚拟卷 LVM是逻辑盘卷管理&#xff08;Logical Volume Manager&#xff09;的简称&#xff0c;他是磁盘…

Cortex-M7——NVIC

Cortex-M7——NVIC 小狼http://blog.csdn.net/xiaolangyangyang 一、NVIC架构 二、中断及异常编号 三、中断屏蔽寄存器&#xff08;__disable_irq和__enable_irq操作的是PRIMASK寄存器&#xff09; 四、中断分组寄存器&#xff08;SCB->AIRCR[10:8]&#xff09; 五、NVIC寄…