探索C嘎嘎的奇妙世界:第三关---缺省参数与函数重载
在c语言中,我们常常在对有参函数进行传参,这样的繁琐过程,C++祖师爷对此进行了相关改进,多说无益,上干货:
1 缺省参数:
缺省参数是指在声明或定义函数时为函数的形参指定一个默认值(默认参数)。在调用该函数时,如果没有指定实参,则采用该形参的缺省值;否则使用指定的实参。缺省参数主要分为两种类型:全缺省参数和半缺省参数
1.1 全缺省参数:
全缺省参数是指函数的所有参数都具有默认值。以下是一个全缺省参数的示例代码:
// 全缺省
void F2(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}int main()
{F2(1, 2, 3);F2(1, 2);F2(1);F2();return 0;
}
在上述代码中,我们会发现,有所不同的是在形参的位置上,我们给予了赋值,这样写又什么作用呢?唉~这样写当我们在调用的时候,少给参数的时候,编译器也不会报错,会自动给上默认值.同时也可以多种方式调用函数了.比如在上述代码中:F2(1,2,3)这样的调用时,上面形参的默认值就不会起作用了,而当我们F2(1,2)这样传参的时候,也不会报错,这是编译器会把a和b的值变为,1和2,而c的值就使用我们给的默认参数进行赋值30.同理可以去理解后两个调用,也可以一个都不传哦,这样形参用的全是我们所给的默认值.
1.2 半缺省参数:
半缺省参数是指从右往左连续地为函数的部分参数提供默认值。以下是一个半缺省参数的示例代码:
// 半缺省,从右往左缺省
void F3(int a, int b = 20 , int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}int main()
{F3(1);F3(1, 2);F3(1, 2, 3);
}
在上述代码中,我们只是缺省了b和c,同样可以进行赋值,但是这时我们就不能一个参数也不传了,因为这时我们如果一个都不传的话,这时a是没有默认值的,编译器就会报错,半缺省参数必须从右往左依次提供默认值,不能间隔着给。为什么呢?请看下面的代码:
void F3(int a=10, int b = 20 , int c)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}int main()
{F3(1,2);return 0;
}
这时我们这样给默认值的时候,用F3(1,2)进行传参时,2可以赋值给c,但是这个1会赋值给谁呢?是a还是b呢?这是编译器就会存在歧义,就会报错喽,所以,我们平时在写半缺省参数的时候,应该极为注意.细心使用~
1.3 缺省参数的注意事项:
注意:
使用缺省参数可以提高代码的灵活性和可读性,减少函数调用时的参数传递数量。但需要注意以下几点:
2 函数重载:
在C语言中,不支持重名函数存在,这就让一些程序很麻烦,比如要写一个整形数据的交换和浮点数的交换就不行,那么C++祖师爷就改进了这一点---函数重载
在同一作用域内,可以有多个具有相同函数名但参数列表不同(参数的类型、个数或顺序不同)的函数。这些函数就被称为重载函数。
那么具体什么是重载函数呢?请看代码:
namespace bit1
{void Swap(int* pa, int* pb){cout << "void Swap(int* pa, int* pb)" << endl;}
}namespace bit2
{void Swap(int* px, int* py){cout << "void Swap(int* pa, int* pb)" << endl;}
}
这样的两个函数构不构成重载呢?
显然它们在不同的命名空间中,不符合重载函数中的属于同一作用域这一条件,所以上述两个函数不构成函数重载.让我们来看一下另一个示例:
namespace bit1
{void Swap(int* pa, int* pb){cout << "void Swap(int* pa, int* pb)" << endl;}
}namespace bit2
{void Swap(int* px, int* py){cout << "void Swap(int* pa, int* pb)" << endl;}
}using namespace bit1;
using namespace bit2;
如果把它们两个的命名空间展开,是否构成函数重载呢?
显然也是不构成重载的,因为"using namespace"只是把他们展开供全局可以使用这两个命名空间中的成员,并不意味着它们合并同一个作用域,所以还是不符合重载函数中的属于同一作用域这一条件,不构成函数重载,那么怎么才能构成呢?请看正确示例:
2.1 类型一:参数类型不同:
void Swap(int* pa, int* pb)
{cout << "void Swap(int* pa, int* pb)" << endl;
}void Swap(double* pa, double* pb)
{cout << "void Swap(double* pa, double* pb)" << endl;
}
上述代码就满足了重载函数的条件:参数类型不同.可以看到上述代码中,形参的类型不同,一个是int,一个是double,当然还可以写其他类型等等等...这样就可以使函数的功能变得更加丰富!
2.2 类型二:参数个数不同:
void f()
{cout << "f()" << endl;
}void f(int a)
{cout << "f(int a)" << endl;
}
在上述代码中:显而易见这两个函数的参数个数不同,第一个函数无参,第二个函数有一个整形参数a,可以构成重载函数.
2.3 类型三:参数顺序不同:
void f(int a, char b)
{cout << "f(int a,char b)" << endl;
}void f(char b, int a)
{cout << "f(char b, int a)" << endl;
}
大眼一看,好像是一样的,仔细的小伙伴就会发现,上述两个函数的参数的顺序好像不一样,第一个函数是(int a,char b),第二个函数参数是(char b,int a)这样也是可以构成函数重载的哦~
2.4 函数重载的注意事项:
1. 参数类型必须不同:重载的函数之间参数的类型要有明显区别,不能仅通过可隐式转换的类型差异来重载。
2. 参数个数不同:这是常见的重载方式之一。
3. 参数顺序不同:也可以作为重载的依据,但要注意使用时的清晰性。
4. 不能仅靠返回值不同来重载:因为调用时通常不关心返回值来确定调用哪个重载函数。
5. 作用域要明确:确保重载的函数都在同一个合理的作用域内,避免混淆。
6. 避免过度重载:过多的重载可能导致代码复杂难以理解和维护。
7. 注意歧义:确保参数的组合不会导致调用时产生歧义,编译器能明确地选择正确的重载函数。
8. 考虑可读性:重载函数的命名和功能设计要符合逻辑,便于其他开发者理解和使用。
3 C++支持函数重载的原理---名字修饰原则:(选看)





相关文章:

探索C嘎嘎的奇妙世界:第三关---缺省参数与函数重载
在c语言中,我们常常在对有参函数进行传参,这样的繁琐过程,C祖师爷对此进行了相关改进,多说无益,上干货: 1 缺省参数: 缺省参数是指在声明或定义函数时为函数的形参指定一个默认值(默认参数)。在调用该函数时,如果没有指定实参,则…...

docker拉取镜像太慢解决方案
前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 创建daemon.json文件,输入以下信息 vim /etc/docker/daemon.json{"registry-mirrors": ["https://9cpn8tt6.mirror…...

仅凭一图,即刻定位,AI图像定位技术
AI图像定位技术,解锁空间密码!仅凭一图,即刻定位,精准至经纬度坐标,让世界无处不晓。 试试看能否猜中这张自拍照的背景所在?可别低估了A的眼力,答案说不定会让你大吃一惊呢。 近期,…...

跟着刘二大人学pytorch(第---12---节课之RNN基础篇)
文章目录 0 前言0.1 课程视频链接:0.2 课件下载地址: 1 Basic RNN1.1 复习DNN和CNN1.2 直观认识RNN1.3 RNN Cell的内部计算方式 2 具体什么是一个RNN?3 使用pytorch构造一个RNN3.1 手动构造一个RNN Cell来实现RNN3.2 直接使用torch中现有的RN…...

父亲节 | 10位名家笔下的父亲,读懂那份孤独而深沉的父爱
Fathers Day 母爱如水,父爱如山。 相对于母爱的温柔,父亲的爱多了几分静默和深沉。 读完10位名家笔下的父亲,我们就会明白,到底亏欠了父亲多少。 不要让自己有“子欲养而亲不待”的后悔和遗憾, 多给父亲一些爱的表示&a…...
股市中的牛市和熊市是什么?它们是怎么来的?
中文版 股市中的牛市和熊市 定义 牛市: 牛市指的是金融市场中证券价格普遍上升或预期上升的时期。这个术语最常用于股票市场,但也可以适用于交易的其他资产,如债券、货币和商品。特征: 投资者信心增加。交易量上升。积极的经济指…...

基于51单片机万年历设计—显示温度农历
基于51单片机万年历设计 (仿真+程序+原理图+设计报告) 功能介绍 具体功能: 本系统采用单片机DS1302时钟芯片LCD1602液晶18b20温度传感器按键蜂鸣器设计而成。 1.可以显示年月日、时分秒、星期、温度值。…...
springboot-自定义properties文件
在springboot中,如果我们想加载外部的配置文件,但是又不想与其他的配置文件产生明显的耦合,那么我们可以把这些配置文件,单独弄成一个独立的配置文件,比如下面的配置文件,我们想把这些配置移动到user.prope…...
java类的访问权限
在java中,针对类,成员方法和属性,java提供了4种访问控制权限,分别是private,default,protected和public。 这四种访问控制权限按级别由低到高的次序排列分别是privae,default,protected,public private:私有访问权限,…...

【SpringBoot + Vue 尚庭公寓实战】标签和配套管理接口实现接口实现(六)
【SpringBoot Vue 尚庭公寓实战】标签和配套管理接口实现接口实现(六) 文章目录 【SpringBoot Vue 尚庭公寓实战】标签和配套管理接口实现接口实现(六)1、保存或更新标签信息2、根据id删除标签信息3、根据类型查询配套列表4、新…...
Web前端中横线:深入探索与实际应用
Web前端中横线:深入探索与实际应用 在Web前端开发的广袤领域中,中横线这一看似简单的元素,实则蕴含着丰富的设计哲学和技术实现。本文将从四个方面、五个方面、六个方面和七个方面,对中横线在Web前端中的应用进行深入剖析&#x…...

鸿蒙 游戏来了 鸿蒙版 五子棋来了 我不允许你不会
团队介绍 作者:徐庆 团队:坚果派 公众号:“大前端之旅” 润开鸿生态技术专家,华为HDE,CSDN博客专家,CSDN超级个体,CSDN特邀嘉宾,InfoQ签约作者,OpenHarmony布道师,电子发烧友专家博客,51CTO博客专家,擅长HarmonyOS/OpenHarmony应用开发、熟悉服务卡片开发。欢迎合…...

国产MCU芯片(2):东软MCU概览及触控MCU
前言: 国产芯片替代的一个主战场之一就是mcu,可以说很多国内芯片设计公司都打算或者已经在设计甚至有了一款或多款的量产产品了,这也是国际大背景决定的。过去的家电市场、过去的汽车电子市场,的确国产芯片的身影不是很常见,如今不同了,很多fabless投身这个行业,一种是…...

气膜馆的保温措施—轻空间
气膜馆是一种新型的建筑形式,广泛应用于体育场馆、仓储、展览等多个领域。其主要特点是通过气体压力支撑膜结构,实现大跨度无柱空间。为了保证气膜馆在不同气候条件下的使用舒适性和能源效率,保温措施至关重要。以下是气膜馆常见的保温措施及…...

UniVue更新日志:使用Carousel组件实现轮播图效果
github仓库 稳定版本仓库:https://github.com/Avalon712/UniVue 开发版本仓库:https://github.com/Avalon712/UniVue-Develop UniVue扩展框架-UniVue源生成器仓库:https://github.com/Avalon712/UniVue-SourceGenerator 更新说明 今天的更…...

docker和docker compose 部署
一. 将微服务运行在docker上: 1.新建一个空文件夹docker-demo,在里面再新建文件夹app,在app目录下新建一个名为Dockerfile的文件。 2.编写Dockerfile文件 3.构建镜像 4.启动镜像 5.可以访问了。 二使用Dockerfile构建微服务镜像 1.将j…...

鸿蒙轻内核A核源码分析系列六 MMU协处理器(2)
3、MMU汇编代码 在arch\arm\arm\include\arm.h文件中,封装了CP15协处理器相关的寄存器操作汇编函数。我们主要看下MMU相关的部分。 3.1 CP15 C2 TTBR转换表基地址寄存器 代码比较简单,结合下图,自行查看即可。该图来自《ARM Cortex-A9 Tec…...
C# 集合(一) —— Array类
总目录 C# 语法总目录 集合一 Array 集合1. Array 类1.1 搜索1.2 排序1.3 翻转1.4 转换 集合 1. Array 类 //创建方式 //方式一 Array arr Array.CreateInstance(typeof(string), 3); arr.SetValue("lisi", 0); arr.SetValue("zhangsan", 1); arr.SetVa…...

World Map Globe Edition 2
只需点击几下,World Political Map - Globe Edition 2就会在场景添加一个美丽且交互式的3D世界地图。将地球预制件拖动到场景中并自定义外观。 完整的资产,具有强大的可视化功能、示例和丰富的API,适用于构建VR、桌面和移动游戏和应用程序。 主要功能: - 在不访问互联网的情…...
人类重启计划---19500630
一、引言 随着人类社会的发展,我们面临着诸多全球性挑战,如气候变化、资源匮乏、疾病爆发等。为了应对这些挑战,确保人类的生存和发展,我们提出人类重启计划。该计划旨在建立一个可持续、安全和繁荣的新世界。 二、目标 建立可持续发展的社会经济模式,确保资源的有效利用…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...