【C++漂流记】函数的高级应用——函数默认参数、占位参数、重载
函数的高级应用,侧重介绍函数的默认参数、函数的占位参数、函数重载定义解释及使用。
文章目录
- 一、函数的默认参数
- 二、函数的占位参数
- 三、函数重载
- 函数重载的注意事项
一、函数的默认参数
函数默认参数是指在函数声明时为参数提供一个默认值,这样在调用函数时如果没有传入相应的参数,就会使用默认值代替。函数默认参数可以简化函数的调用,使得函数更加灵活。
函数默认参数的解释:
- 函数默认参数是在函数声明时为参数提供一个默认值。
- 默认参数可以简化函数的调用,使得函数更加灵活。
- 默认参数只能在函数声明中提供,不能在函数定义中提供。
- 默认参数只能从右向左连续设置,即右侧的参数必须都有默认值,左侧的参数不能有默认值。
示例代码:
#include <iostream>// 带有默认参数的函数
void printMessage(std::string message = "Hello, world!") {std::cout << message << std::endl;
}int main() {// 调用函数时不传入参数printMessage(); // 输出: Hello, world!// 调用函数时传入参数printMessage("Hello, C++!"); // 输出: Hello, C++!return 0;
}
在上面的例子中,printMessage函数的默认参数是"Hello, world!"。当调用函数时没有传入参数时,函数会使用默认参数"Hello, world!"进行处理。当传入参数时,函数会使用传入的参数进行处理。在main函数中的两次调用中,第一次没有传入参数,所以使用了默认参数,输出了"Hello, world!";第二次传入了参数"Hello, C++!",所以输出了"Hello, C++!"。
二、函数的占位参数
函数的占位参数是指在函数声明或定义中使用一个没有具体名称的参数,通常用下划线 _ 表示。占位参数在函数调用时不会被使用,它的存在只是为了占据参数位置,用于保持函数的参数个数和顺序的一致性。
占位参数的解释:
- 占位参数在函数声明或定义中使用一个没有具体名称的参数。
- 占位参数在函数调用时不会被使用,它的存在只是为了保持函数的参数个数和顺序的一致性。
- 占位参数通常用下划线
_表示,但实际上可以使用任何合法的标识符作为占位符。 - 占位参数可以在函数声明或定义中的任何位置使用,但通常将其放在参数列表的末尾。
示例代码:
#include <iostream>// 带有占位参数的函数
void printNumbers(int, int, _) {std::cout << "Printing numbers..." << std::endl;
}int main() {printNumbers(1, 2, 3); // 调用函数时传入三个参数,占位参数不会被使用return 0;
}
在上面的例子中,printNumbers函数有三个参数,其中第三个参数是一个占位参数。在函数调用时,传入了三个参数,但是占位参数并没有被使用。占位参数的存在只是为了保持函数的参数个数和顺序的一致性。
三、函数重载
函数重载是指在同一个作用域内,可以定义多个同名但参数列表不同的函数。通过函数重载,可以根据不同的参数类型和个数来调用不同的函数,从而提高代码的灵活性和可读性。
函数重载的解释:
- 函数重载是指在同一个作用域内,可以定义多个同名但参数列表不同的函数。
- 函数重载通过参数类型和个数的不同来区分不同的函数。
- 函数重载可以提高代码的灵活性和可读性,使得函数调用更加直观和自然。
- 函数重载只能通过参数类型和个数的不同来区分函数,返回值类型不同不会构成函数重载。
示例代码:
#include <iostream>// 函数重载
void printNumber(int num) {std::cout << "Printing an integer: " << num << std::endl;
}void printNumber(double num) {std::cout << "Printing a double: " << num << std::endl;
}int main() {int a = 10;double b = 3.14;printNumber(a); // 调用第一个printNumber函数,输出: Printing an integer: 10printNumber(b); // 调用第二个printNumber函数,输出: Printing a double: 3.14return 0;
}
在上面的例子中,printNumber函数被重载了两次,分别接受整数参数和双精度浮点数参数。在main函数中,根据传入的参数类型的不同,会调用对应的函数进行处理。传入整数时,调用第一个printNumber函数,输出"Printing an integer: 10";传入双精度浮点数时,调用第二个printNumber函数,输出"Printing a double: 3.14"。
函数重载的注意事项
-
函数重载仅根据参数的类型和个数来区分函数,返回值类型不会影响函数重载。如果两个函数的参数类型和个数相同,但返回值类型不同,将会导致编译错误。
-
函数重载的参数列表必须不同,不能只是参数名称不同。例如,下面的代码是不合法的:
void foo(int x); void foo(int y); // 不合法,参数列表相同 -
函数重载可以有不同的访问权限,例如一个函数可以是公有的,而另一个函数可以是私有的。这样可以根据需要对不同的函数进行封装和访问控制。
-
函数重载可以在类中使用,这被称为成员函数的重载。成员函数的重载可以根据不同的参数类型和个数来区分不同的成员函数。
-
当调用一个重载函数时,编译器会根据实参的类型和个数选择最匹配的函数进行调用。如果找不到匹配的函数,将会导致编译错误。
-
函数重载可以用于递归函数。递归函数是指函数调用自身的函数。通过函数重载,可以定义多个版本的递归函数,每个版本处理不同的参数类型和个数。
相关文章:
【C++漂流记】函数的高级应用——函数默认参数、占位参数、重载
函数的高级应用,侧重介绍函数的默认参数、函数的占位参数、函数重载定义解释及使用。 文章目录 一、函数的默认参数二、函数的占位参数三、函数重载函数重载的注意事项 一、函数的默认参数 函数默认参数是指在函数声明时为参数提供一个默认值,这样在调…...
Java——》synchronized的原理
推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…...
CPU主频
CPU主频,也称为时钟频率,是指中央处理单元(CPU)的工作时钟的速度,通常以赫兹(Hz)为单位表示。它表示CPU每秒钟执行的时钟周期数。CPU主频是CPU性能的一个重要指标之一,但不是唯一的性…...
PHP8中查询数组中指定元素-PHP8知识详解
php是使用最广泛的web编程语言,数组是一个数据集合,数组是一种非常常用的数据类型。在操作数组时,有时我们需要查询数组中是否有某个指定元素。在实际的程序开发中,我们用到了下列方法来查询数组中指定的元素:使用arra…...
在Git中将本地分支推送到远程仓库
这里很明显 我git云端只有一个master分支 然后 我在本地创建了一个develop分支 然后 现在我想将他放在云端 首先 我们要执行 git checkout -b develop将本地切换到 develop 分支上 因为我这里已经选择的就是了 就不需要了 然后我们执行 git push origin develop这样 刷新云…...
【数据仓库基础(四)】数据仓库需求:基本需求和数据需求
文章目录 一. 基本需求1. 安全性2. 可访问性3. 自动化 三. 数据需求1. 准确性2.时效性3.历史可追溯性 从基本需求和数据需求两方面介绍对数据仓库系统的整体要求。 一. 基本需求 1. 安全性 数据仓库中含有机密和敏感的数据。为了能够使用这些数据&…...
C++类模板是一种通用的编程工具,可以创建可以适用于多种数据类型的类
C类模板是一种通用的编程工具,可以创建可以适用于多种数据类型的类。它们允许在类定义中使用参数,以便根据需要实例化具体的类。使用C类模板时,首先需要定义模板。模板定义的语法如下:cpp template <typename T> class MyCl…...
Vite和Webpack如何使用CDN包
为了精简打包输出的dist目录大小,我们可以引入CDN外部包的方式,来缩小打包的体积,加快打包速度。这里介绍Vite和Webpack中如何引入React CDN外部包。 一、Vite引入CDN包 1、安装插件 npm i vitejs/plugin-react-refresh vite-plugin-cdn-i…...
TOWE雷达光敏感应开关,让生活更智能、更安全
现代生活中,智能家居成为人们追求品质生活的必备之选。其中,照明控制的智能化已然成为一种趋势,传统的灯光开关需要人们手动操作,既不方便,有时候也会造成资源的过度浪费,而雷达光敏感应开关的出现…...
git:亲测体验rebase与merge
rebase与merge异同与最佳使用场景[1] 这个dev-cui分支从devlop分支切出后,一直都只有我一个人在开发&维护. 假如还有一位同事张三, 在devlop分支切出的分支dev-zhangsan上进行开发,他添加了一个glossary.md,而后进行了add & commit 此时项目开发完成,需要将两个分支合并…...
深度神经网络之BiseNet
标题:深度神经网络之BiseNet 1.模型介绍 BiseNet是一种用于实时语义分割的神经网络模型,由华为公司提出。它结合了全卷积网络和空间金字塔池化模块的优点,可以同时实现高效率和高精度的语义分割。 BiseNet的核心思想是将图像分为两个部分&…...
Ubantu终端常用命令、快捷键和基本操作
目录 前言 一、常用命令 二、常用快捷键 三、快捷键自定义设置 总结 前言 Ubantu终端常用命令和快捷键用于进行系统管理、文件操作、软件安装等常见使用场景。使用它们可以提高工作效率,简化操作流程,并进行更多的自定义配置和控制。同时,…...
9.5 校招 内推 面经
绿泡*泡: neituijunsir 交流裙 ,内推/实习/校招汇总表格 1、校招 | 航天五院2024届校园招聘启动 校招 | 航天五院2024届校园招聘启动 2、校招 | 中国电科五十五所2024届校园招聘正式启动 校招 | 中国电科五十五所2024届校园招聘正式启动 3、校招 | …...
计算机网络中的应用层和传输层(http/tcp)
目录 1、协议的通俗理解 1.1 理解协议 2.应用层 2.1 http协议 2.2 HTTP的方法 2.3 HTTP的状态码 2.4 HTTP常见Header 3、传输层 3.1 端口号 3.1.1 端口号范围划分 3.1.2 netstat 3.1.3 认识知名端口号(Well-Know Port Number) 3.2 UDP协议 3.2.1 UDP协议端格式 3…...
基于antd+vue2来实现一个简单的绘画流程图功能
简单流程图的实现(基于antdvue2的)代码很多哦~ 实现页面如下 1.简单操作如下 2.弹框中使用组件: <vfdref"vfd"style"background-color: white;":needShow"true":fieldNames"fieldNames"openUse…...
【小吉送书—第二期】阿里后端开发:抽象建模经典案例
文章目录 0.引言1.抽象思维2.软件世界中的抽象2.1 命名抽象2.2 分层抽象2.3 原则抽象 3. 经典抽象案例3.1 方案一:战术抽象,多快好省,跑步前进3.2 方案二:深入分析,透过表象,探寻本质 5. 推荐一本书&#x…...
深度学习常用的Python库(核心库、可视化、NLP、计算机视觉、深度学习等)
(1)核心库与统计:Numpy、Scipy、Pandas、StatsModels。 (2)可视化:Matplotlib、Seaborn、Plotly、Bokeh、Pydot、Scikit-learn、XGBoost/LightGBM/CatBoost、Eli5。 (3)深度学习&a…...
Android菜单(上下文菜单)(选项菜单)
菜单资源文件通常放置在res\menu目录下,在创建项目时,默认不自动创建menu目录,所以需要手动创建。Android Resource Directory->value menu 菜单资源根元素通常是<menu></menu>标记,子元素为<item></ite…...
l8-d11 TCP连接管理与UDP协议
一、三次握手 TCP 建立连接的过程叫做握手。 采用三报文握手:在客户和服务器之间交换三个 TCP 报文段,以防止已失效的连接请求报文段突然又传送到了,因而产生 TCP 连接建立错误。 二、四次挥手 TCP 连接释放过程比较复杂。 数据传输结束后…...
Python+Requests+Pytest+Excel+Allure 接口自动化测试项目实战【框架之间的对比】
--------UnitTest框架和PyTest框架的简单认识对比与项目实战-------- 定义: Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Python语言的标…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
