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

参数缺省和函数重载讲解

一路风雨兼程磨砺意志,三载苦乐同享铸就辉煌

目录

1.参数缺省的概念

2.参数缺省的用法

3.缺省参数分类

3.1.全缺省参数

3.2.半缺省参数

4.函数重载的概念

5.函数重载的用法

6.函数重载的原理


1.参数缺省的概念

        一般情况下,函数调用时的实参个数应与形参相同,但为了更方便地使用函数,C++也允许定义具有缺省参数的函数,这种函数调用时,实参个数可以与形参不相同。
       缺省参数指在定义函数时为形参指定缺省值(默认值)。
       这样的函数在调用时,对于缺省参数,可以给出实参值,也可以不给出参数值。如果给出实参,将实参传递给形参进行调用,如果不给出实参,则按缺省值进行调用。
       缺省参数的函数调用:缺省实参并不一定是常量表达式,可以是任意表达式,甚至可以通过函数调用给出。如果缺省实参是任意表达式,则函数每次被调用时该表达式被重新求值。但表达式必须有意义。

 


2.参数缺省的用法

以下图为例:

3.缺省参数分类

3.1.全缺省参数

全缺省就是所有参数都给了缺省值

3.2.半缺省参数

半缺省并不是缺省一半的参数,而是缺省部分参数

半缺省规定:必须从右往左缺省 ,如下面的实例:

  缺省一个参数的调用方式:

 缺省二个参数的调用方式:

4.函数重载的概念

函数重在是指在同一个作用域内,有多个函数名相同,但是形参列表不同(参数类型不同,参数个数不同,参数顺序不同),返回值无关,我们将这种叫做重载函数。重载的函数是通过形参列表区分的,和其他无关。一句话来说“一个接口,多种实现”。

例如:如果要实现一个加法运算,加法函数可以是整型也可以是浮点型,就可以使用函数重载实现

5.函数重载的用法

如果要实现一个加法运算,加法函数可以是整型也可以是浮点型,就可以使用函数重载实现。

例如:

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

 5.1参数类型不同

int add(int left, int right)
{cout << "int add(int left, int right)" << endl;return left + right;
}double add(double left, double right)
{cout << "double add(double left, double right)" << endl;return left + right;
}

5.2参数个数不同

void f()
{cout << "f()" << endl;
}void f(int a)
{cout << "f(int a)" << endl;
}

5.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;
}

注意:返回值不同,不能构成重载 ,因为调用的时候不能区分

6.函数重载的原理

(前言:这部分我了解的也还不是非常深入,因此写的不是那么详细,也撮合着看吧~~)

大家有没有想过,为什么C语言不支持函数重载,而C++支持函数重载?C++又是如何支持的呢?

演示函数重载的原理用VS编译器不方便演示,需要用到Linux操作系统

在Linux系统下创建一个C语言的工程:

func.h 里面放的时函数的声明,func.c 里面放的时函数的定义,test.c 里面包含主函数

 我们对这个工程进行编译:

 此时会出现错误提示:

 只有注释掉一个f()函数,才能编译成功,下图是注释无参f()函数后的执行结果:

 这里就验证了C语言不能支持函数重载。

下面用C++ 对上述代码进行编译运行:

 这里验证的是C++支持重载。

下一步,我们要探究的是为什么C语言不支持函数重载,而C++支持函数重载 ?C++是如何支持的?重点来了哈(敲黑板!!)

让我们来回顾一下编译链接的过程:

 其中C语言不支持函数重载和C++支持函数重载就是链接这里的原因。

我们观察一下函数调用在汇编代码中是怎样实现的:

 C语言不支持函数重载,因为编译的时候,两个重载函数函数名相同,在Func.o符号表中存在歧义和冲突,其次链接的时候也存在歧义和冲突,因为他们都是直接使用函数名去标识和查找,而重载函数,函数名相同

C++支持函数重载,因为C++的目标文件符号表中不是直接用函数名来标识和查找函数,C++引用了一个函数名修饰规则但不同的编译器下修饰规则有所不同, 有了函数名修饰规则,只要参数不同,func.o的符号标里面就不存在二义性和冲突了。链接的时候,test:o的main的函数里面去调用两个重载函数查找地址是也是明确的。

 文章到这里就结束啦~~

 

相关文章:

参数缺省和函数重载讲解

一路风雨兼程磨砺意志&#xff0c;三载苦乐同享铸就辉煌 目录 1.参数缺省的概念 2.参数缺省的用法 3.缺省参数分类 3.1.全缺省参数 3.2.半缺省参数 4.函数重载的概念 5.函数重载的用法 6.函数重载的原理 1.参数缺省的概念 一般情况下&#xff0c;函数调用时的实参个数应…...

关于召开2023第八届国际发酵培养基应用发展技术论坛的通知

生物发酵培养基是影响产业技术水平、环境友好程度的重要影响因素&#xff0c;为进一步实现生物发酵培养基的稳定可控、高效生产以及绿色安全&#xff0c;进一步推动生物技术的创新升级、绿色低碳循环生产&#xff0c;需要加强跨界联合&#xff0c;集中优势力量&#xff0c;突破…...

Java之深度优先(DFS)和广度优先(BFS)及相关题目

目录 一.深度优先遍历和广度优先遍历 1.深度优先遍历 2.广度优先遍历 二.图像渲染 1.题目描述 2.问题分析 3代码实现 1.广度优先遍历 2.深度优先遍历 三.岛屿的最大面积 1.题目描述 2.问题分析 3代码实现 1.广度优先遍历 2.深度优先遍历 四.岛屿的周长 1.题目描…...

【链表OJ题(四)】反转链表

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;数据结构 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录链表OJ题(四)1. 反转…...

java ArrayList源码分析(深度讲解)

ArrayList类的底层实现ArrayList类的断点调试空参构造的分步骤演示&#xff08;重要&#xff09;带参构造的分步骤演示一、前言大家好&#xff0c;本篇博文是对单列集合List的实现类ArrayList的内容补充。之前在List集合的万字详解篇&#xff0c;我们只是拿ArrayList演示了List…...

【网络编程】零基础到精通——NIO基础三大组件和ByteBuffer

一. NIO 基础 non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c;而之前的 st…...

操作系统 - 1. 绪论

目录操作系统基本概念概念特征功能操作系统的分类与发展手工操作单道批处理系统多道批处理系统分时系统实时系统操作系统的运行环境CPU 运行模式中断和异常的处理系统调用程序的链接与装入程序运行时内存映像和地址空间操作系统的体系结构操作系统的引导操作系统基本概念 概念…...

详谈parameterType与resultType的用法

resultMap 表示查询结果集与java对象之间的一种关系&#xff0c;处理查询结果集&#xff0c;映射到java对象。 resultMap 是一种“查询结果集---Bean对象”属性名称映射关系&#xff0c;使用resultMap关系可将将查询结果集中的列一一映射到bean对象的各个属性&#…...

【Linux】进程概念、fork() 函数 (干货满满)

文章目录&#x1f4d5; 前言&#x1f4d5; 进程概念&#x1f4d5; Linux下查看进程的两种方法方法一方法二&#x1f4d5; pid() 、ppid() 函数&#x1f4d5; fork() 函数、父子进程初识再理解&#x1f4d5; fork做了什么&#x1f4d5; 如何理解 fork 有两个返回值&#x1f4d5;…...

【动态规划】最长上升子序列、最大子数组和题解及代码实现

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…...

Ajax进阶篇02---跨域与JSONP

前言❤️ 不管前方的路多么崎岖不平&#xff0c;只要走的方向正确&#xff0c;都比站在原地更接近幸福 ❤️Ajax进阶篇02---跨域与JSONP一、Ajax进阶篇02---跨域与JSONP&#xff08;1&#xff09;同源策略1.1 什么是同源1.2 什么是同源策略&#xff08;2&#xff09;跨域2.1 什…...

C 语言编程 — 线程池设计与实现

目录 文章目录目录线程池&#xff08;Thread Pool&#xff09;tiny-threadpool数据结构设计Task / JobTask / Job QueueWorker / ThreadThread Pool ManagerPublic APIsPrivate Functions运行示例线程池&#xff08;Thread Pool&#xff09; 线程池&#xff08;Thread Pool&am…...

并发编程要点

Java并发编程中的三大特性分别是原子性、可见性和有序性&#xff0c;它们分别靠以下机制实现&#xff1a; 原子性&#xff1a;原子性指的是对于一个操作&#xff0c;要么全部执行&#xff0c;要么全部不执行。Java提供了一些原子性操作&#xff0c;例如AtomicInteger等&#xf…...

HDFS黑名单退役服务器

黑名单&#xff1a;表示在黑名单的主机IP地址不可以&#xff0c;用来存储数据。 企业中&#xff1a;配置黑名单&#xff0c;用来退役服务器。 黑名单配置步骤如下&#xff1a; 1&#xff09;编辑/opt/module/hadoop-3.1.3/etc/hadoop目录下的blacklist文件 添加如下主机名称&…...

基于stm32智能语音电梯消毒系统

这次来分享个最近做的项目&#xff0c;stm32智能语音电梯消毒系统功能说明&#xff1a;在电梯&#xff0c;房间&#xff0c;客道区域内&#xff0c;检测到人&#xff0c;则执行相关动作&#xff01;例如继电器开关灯&#xff0c;喷洒酒精等行为。手机app/微信小程序可以控制需要…...

FreeRTOS系列第1篇---为什么选择FreeRTOS?

1.为什么学习RTOS&#xff1f; 作为基于ARM7、Cortex-M3硬件开发的嵌入式工程师&#xff0c;我一直反对使用RTOS。不仅因为不恰当的使用RTOS会给项目带来额外的稳定性风险&#xff0c;更重要的是我认为绝大多数基于ARM7、Cortex-M3硬件的项目&#xff0c;还没复杂到使用RTOS的地…...

基于.NET Core内置浏览器窗体应用程序界面框架

更多开源项目请查看&#xff1a;一个专注推荐.Net开源项目的榜单 平常我们在做项目过程中&#xff0c;桌面软件具备操作高效、利用本地计算机做一些复杂运算、或者设定快捷操作等优势&#xff0c;但是桌面软件也有很多缺点&#xff0c;比如升级问题、系统兼容问题、系统bug排查…...

【数据结构初阶】一文带你学会归并排序(递归非递归)

目录 前言 递归实现 代码实现 非递归实现 代码实现 总结 前言 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法。该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。 作为一种典型的分而治之思想…...

Simulink壁咚(一)——What and How

目录 一、前言 二、Simulink 知多少 三、滤波算法 四、Model Verification 五、Model Coverage 六、Simulink测试实例 七、Simulink Test 八、Test Manager 九、Test Harness 十、 学习 一、前言 Simulink从2017b以后更加工程化和实用化&#xff0c;基于MBD的功能日趋…...

【PyTorch】Pytorch基础第0章

本文参加新星计划人工智能(Pytorch)赛道&#xff1a;https://bbs.csdn.net/topics/613989052 这是目录PyTorch的简介PyTorch 构建深度学习模型的步骤搭建pytorch使用环境PyTorch的简介 PyTorch 是一个开源的机器学习框架&#xff0c;由 Facebook 的人工智能研究院&#xff08;…...

Godot开源RPG框架选型与状态契约构建指南

1. 这不是又一个“Godot入门教程”&#xff0c;而是一套可落地的RPG世界构建方法论 你有没有试过打开Godot&#xff0c;新建一个项目&#xff0c;拖进几个精灵&#xff0c;写两行 move_and_slide() &#xff0c;然后卡在“接下来该做什么”上&#xff1f;我做过——整整三年前…...

Taotoken API密钥的精细化权限管理与审计日志价值

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken API密钥的精细化权限管理与审计日志价值 在将大模型能力集成到实际业务的过程中&#xff0c;API密钥的管理往往从一个简单…...

Midscene.js技术深度解析:视觉驱动UI自动化的架构演进与实践路径

Midscene.js技术深度解析&#xff1a;视觉驱动UI自动化的架构演进与实践路径 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 在传统UI自动化测试领域&#xff0c…...

ECB02蓝牙主机模式避坑实录:STM32F103C8T6连接失败、绑定不清除的5个常见问题解决

ECB02蓝牙主机模式实战避坑指南&#xff1a;STM32F103C8T6连接异常全解析 当你第一次尝试用STM32F103C8T6通过ECB02蓝牙模块建立主机连接时&#xff0c;大概率会遇到各种"灵异现象"&#xff1a;模块毫无反应、AT指令石沉大海、设备死活连不上旧设备、数据乱码像天书……...

对比直接使用厂商 API 观察通过 Taotoken 进行成本管理的便利性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接使用厂商 API 观察通过 Taotoken 进行成本管理的便利性 对于需要同时调用多个大语言模型的个人开发者或小项目而言&#x…...

B站视频下载终极方案:DownKyi全功能解析与高效使用指南

B站视频下载终极方案&#xff1a;DownKyi全功能解析与高效使用指南 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&…...

银行借记卡月月有礼活动汇总(立减金达标锦囊) 解除微信支付账户限制

文章目录 引言 I 银行借记卡月月有礼活动 打开交通银行App搜索“月月有礼”参加活动 招行储蓄卡专享-月月支付抽锦鲤 浦发银行APP-“惠支付”专区-月月享十惠 II 微信支付账户限制通知 限制原因: 快进快出 提交资金来源举证资料 注意事项 III 云闪付发票抽奖 引言 【银行活动…...

微信QQ语音解码终极指南:silk-v3-decoder免费解锁音频文件

微信QQ语音解码终极指南&#xff1a;silk-v3-decoder免费解锁音频文件 【免费下载链接】silk-v3-decoder [Skype Silk Codec SDK]Decode silk v3 audio files (like wechat amr, aud files, qq slk files) and convert to other format (like mp3). Batch conversion support. …...

API网关设计与实现完全指南

API网关设计与实现完全指南 前言 API网关是微服务架构中的统一入口&#xff0c;负责请求路由、负载均衡、安全认证、限流熔断等功能。一个设计良好的API网关可以极大地简化微服务架构的复杂度&#xff0c;提升系统的可维护性和安全性。本文将详细介绍API网关的设计理念、核心功…...

低空飞行器降噪气动智能反向设计系统已融合人工智能AI软件平台

低空飞行器降噪气动智能反向设计大模型系统已融合人工智能AI软件平台一、系统概述本系统专为低空飞行器在城市低空飞行、近地通航及密集空域作业等场景量身打造。针对当前行业内气动噪声突出、降噪设计迭代缓慢、正向构型试错成本高昂、流噪耦合计算复杂以及合规降噪难度大等核…...