【C++】缺省参数与函数重载

👀樊梓慕:个人主页

 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》

🌝每一个不曾起舞的日子,都是对生命的辜负


前言

本篇文章博主将带你学习缺省参数函数重载,一些需要注意的点博主都会特别标注以便大家学习。


欢迎大家📂收藏📂以便未来做题时可以快速找到思路,巧妙的方法可以事半功倍。

=========================================================================

GITEE相关代码:🌟fanfei_c的仓库🌟

=========================================================================


1.缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

通俗的讲:缺省参数可以理解为默认参数,当没有指定形参时,则采用默认参数。

void Func(int a = 0)
{cout << a << endl;
}
int main()
{Func(); // 没有传参时,使用参数的默认值0Func(10); // 传参时,使用指定的实参10return 0;
}

📣📣📣 缺省参数还分为全缺省和半缺省,请继续往下学习📣📣📣


1.1全缺省参数

全缺省参数顾名思义,函数所有参数都设定为缺省参数。

void Func(int a = 10, int b = 20, int c = 30)//参数都为缺省参数
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}

1.2半缺省参数

半缺省参数就是函数的部分参数为缺省参数。

void Func(int a, int b = 20, int c = 30)//参数都为缺省参数
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}

🚨要想掌握缺省参数的用法你还需要特别注意下面几点🚨


1.3一些需要注意的点

首先对于半缺省参数而言,为了避免产生歧义,要求半缺省参数必须从右往左依次给出,不能间隔着给。


另外,缺省参数不能在函数声明和定义中同时出现,什么意思呢,就是为了避免大家定义缺省参数时,声明和定义的缺省参数值不同。

//a.h
void Func(int a = 10);
// a.cpp
void Func(int a = 20)
{}

一般规定:如果声明和定义分离,那么就在声明中给定缺省参数。 


缺省值必须为常量或者全局变量

C语言不支持缺省参数。


2.函数重载

2.1概念

函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。

你可以理解为函数重载就是允许函数重名,当需要调用时,编译器会根据参数选择合适的同名函数进行运算。


🔎插入一道小题,看看你对于函数重载的理解怎么样吧🔍

正确答案:D

请注意: 函数重载不能依靠返回值的不同来构成重载,因为调用时无法根据参数列表确定调用哪个重载函数。


2.2为什么C语言不支持重载

要想知道为什么C语言不支持重载就得简单了解下编译链接的相关知识,我把我之前写过的一篇有关编译链接的博客贴在这里啦,有需要的同学可以看看。

【C语言】程序环境和预处理👈👈👈

实际项目通常是由多个头文件和多个源文件构成,而通过C语言阶段学习的编译链接,我们可以知道,(当前a.cpp中调用了b.cpp中定义的Add函数时),编译后链接前,a.o的目标文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址在b.o中。那么怎么办呢?

所以链接阶段就是专门处理这种问题,链接器看到a.o调用Add,但是没有Add的地址,就会到b.o的符号表中找Add的地址,然后链接到一起。

那么链接时,面对Add函数,链接器会使用哪个名字去找呢?这里每个编译器都有自己的函数名修饰规则

比如Linux下g++的修饰规则为:_Z+函数长度+函数名+类型首字母。

  • C语言不会修饰自己的函数名,在链接函数地址时,他只会根据函数名寻找。
  • C++则会根据不同编译器的函数名修饰规则修饰自己的函数名重新得到一个独一无二的函数名。

 


看到这里,你一定理解了为什么C语言不支持函数重载,而C++支持了吧


=========================================================================

如果你对该系列文章有兴趣的话,欢迎持续关注博主动态,博主会持续输出优质内容

🍎博主很需要大家的支持,你的支持是我创作的不竭动力🍎

🌟~ 点赞收藏+关注 ~🌟

========================================================================= 

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

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

相关文章

.Net Core 6 运行环境手动安装流程

安装.NET Core 6 概述 在开始之前&#xff0c;我们首先需要了解一下整个安装过程的流程。下面的表格将展示安装.NET Core 6的步骤以及每一步需要做的事情。 步骤 动作 说明 1 下载.NET Core 6 SDK 从官方网站下载.NET Core 6 SDK安装包 2 安装.NET Core 6 SDK …

Unnatural Instructions: Tuning Language Models with (Almost) No Human Labor

本文是LLM系列文章&#xff0c;针对《Unnatural Instructions: Tuning Language Models with (Almost) No Human Labor》的翻译。 TOC 摘要 指令调优使预训练的语言模型能够从推理时间的自然语言描述中执行新的任务。这些方法依赖于以众包数据集或用户交互形式进行的大量人工…

win10如何取消文件夹分组

问题描述 最近不知道把哪里碰了&#xff0c;win10文件夹显示的文件都是按照日期分组了&#xff0c;很讨厌。如下图所示 修改方法 1、文件夹空白处-右击 2、分组依据(P)-选择(无)(N) 下面是操作好之后的效果图 结束 -----华丽的分割线&#xff0c;以下是凑字数&#xff0c;大…

超声波清洗机需要注意什么?不能错过的超声波清洗机

超声波清洗机在当今社会已经越来越受到人们的欢迎&#xff0c;它利用超声波的振动来清洁物品表面&#xff0c;能够快速、高效地清除污垢、油脂等。但是&#xff0c;在购买超声波清洗机时&#xff0c;需要注意哪些问题呢&#xff1f;本文将为您介绍购买超声波清洗机需要注意的几…

2023/10/15总结

学习总结 最近开始写项目了&#xff0c;然后写的过程中遇到了跨域问题。 为什么会出现跨域问题 由于浏览器的同源策略限制。同源策略是一种约定&#xff0c;它是浏览器最核心也是最基本的安全功能。如果缺少了同源策略&#xff0c;那么浏览器的正常功能可能都会收到影响。所谓…

gitlab 维护

一 环境信息 二 日常维护 2.1 gitlab mirror 2.1.1 常见方法 社区版本gitab mirror 只能push&#xff0c;默认限制了局域网内mirror 需要修改admin/setting/network(网络)/outbound(出站请求) 勾选允许局域网即可。 2.1.2 疑难问题 内网有三个gitlab A: GITLAB 12 B\C GI…

hash join的基本原理是怎样的?

我们知道数据库里面两表关联主要有三种常见的关联方式&#xff0c;即 nested loop joinhash joinmerge join nested loop join在OLTP交易场景占比是最多的&#xff0c;常用于关联字段为主键或索引字段的情况&#xff0c;通过主键或索引以及loop的方式&#xff0c;A表可以快速…

【特纳斯电子】基于单片机的火灾监测报警系统-仿真设计

视频及资料链接&#xff1a;基于单片机的火灾监测报警系统-仿真设计 - 电子校园网 (mcude.com) 编号&#xff1a; T0152203M-FZ 设计简介&#xff1a; 本设计是基于单片机的火灾监测报警系统&#xff0c;主要实现以下功能&#xff1a; 1.通过OLED显示温度、烟雾、是否有火…

摩尔信使MThings的设备高级参数

摩尔信使MThings支持三级参数管理方案&#xff0c;依次为&#xff1a;数据级、设备级、通道级。 设备级参数不仅包含设备名称、设备地址等常用信息&#xff0c;同时提供了诸多高级参数&#xff0c;其同样是为了满足不同用户应用场景中所面临的差异化需求&#xff0c;以更加灵活…

PostGIS是否有方法能将一个Polygon面切割成若干份小的Polygon面,且每一份的面积差不多大

问题 PostGIS是否有方法能将一个Polygon面切割成若干份小的Polygon面&#xff0c;且每一份的面积差不多大&#xff1f;其实并没有现成的方法&#xff0c;但是通过灵活运用postgis函数可以快速实现这样的功能&#xff0c;总共只要简单的5步就可以了&#xff0c;下文具体说明。二…

【数据结构C/C++】优先(级)队列

文章目录 什么是优先队列&#xff1f;堆排序代码实现408考研各数据结构C/C代码&#xff08;Continually updating&#xff09; 什么是优先队列&#xff1f; 下面的内容来自于百度百科。 如果我们给每个元素都分配一个数字来标记其优先级&#xff0c;不妨设较小的数字具有较高的…

JAVAEE初阶相关内容第十四弹--网络初识

写在前&#xff1a; 这一部分开启网络部分的相关知识&#xff0c;这一弹内容初始网络将主要进行网络相关知识的简单介绍&#xff0c;以及着重介绍协议、协议分层、OSI七层模型、TCP/IP五层模型、封装和分用。 需要认识协议&#xff0c;并知道协议的效果是什么&#xff1b;知道…

不写注释就是耍流氓?

不写注释就是耍流氓&#xff1f; 关于写代码不写注释这么说“我”不想写注释的原因如何才能写出漂亮的注释 关于写代码不写注释这么说 关于代码注释的争论一直存在&#xff0c;程序员社区中有不同的观点和实践。写代码时是否应该写注释是一个有深度的话题&#xff0c;我认为需…

word如何设置页码?教你快速提升文档颜值!

在创建文档时&#xff0c;为了更好地组织内容&#xff0c;页码是一个必不可少的元素。但是很多人不知道word如何设置页码&#xff0c;其实word提供了多种设置页码的方法&#xff0c;以满足不同文档的需求。本文将详细介绍3种设置页码的方法&#xff0c;无论您是初学者还是有经验…

LMI FocalSpec 3D线共焦传感器 使用笔记1

一.硬件介绍 以上特别注意: 屏蔽线必须接地,因为在现场实际调试中,使用软件调试发现经常 弹窗 传感器丢失警告!! 以上 Position LED 的灯被钣金挡住,无法查看异常现象,能否将指示灯设置在软件界面上? 需要确认是软触发还是硬触发,理论上 硬触发比软触发速度要快.(我们目前使用…

LinkedList集合

LinkedList集合 底层数据结构是双链表,查询慢,增删快,但如果操做的是首元素,速度也是极快的 本身多了很多直接操做首尾元素的特有API 这些特有方法不常用,了解即可 LinkedList源码分析 迭代器的源码分析 iterator():生成一个迭代器对象,默认指向集合的0索引处hasNext():判…

javascript利用xhr对象实现http流的comet轮循,主要是利用readyState等于3的特点

//此文件 为前端获取http流 <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml" lang"UTF-8"></html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"/&g…

sqlserver系统存储过程添加用户学习

sqlserver有一个系统存储过程sp_adduser&#xff1b;从名字看是添加用户的&#xff1b;操作一下&#xff0c; 从错误提示看还需要先添加一个登录名&#xff0c;再执行一个系统过程sp_addlogin看一下&#xff0c; 执行完之后看一下&#xff0c;安全性-登录名下面有了rabbit&…

【Linux】屏蔽项目服务非正常日志输出到message文件中

屏蔽项目服务非正常日志输出到message文件中 # vi /etc/rsyslog.conf ### ....省略n行 :programname, isequal, "进程名" stop *.info;mail.none;authpriv.none;cron.none /var/log/messages### 或者 if $programname 进程名 then stop *.info;mail…

表结构的增删改(约束)、表数据的增删改、truncate总结归纳 | sql笔记自查用

和表的定义相关的语言 DDL&#xff1a;create、drop、alter 建表&#xff1a; create table tbl_student(stu_id int,stu_name varchar(32) );-- 查询结果放入新表 create table tbl_student_backup as select * from tbl_student;删表&#xff1a; drop table tbl_student;…