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

【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"

函数重载的注意事项

  1. 函数重载仅根据参数的类型和个数来区分函数,返回值类型不会影响函数重载。如果两个函数的参数类型和个数相同,但返回值类型不同,将会导致编译错误。

  2. 函数重载的参数列表必须不同,不能只是参数名称不同。例如,下面的代码是不合法的:

    void foo(int x);
    void foo(int y); // 不合法,参数列表相同
    
  3. 函数重载可以有不同的访问权限,例如一个函数可以是公有的,而另一个函数可以是私有的。这样可以根据需要对不同的函数进行封装和访问控制。

  4. 函数重载可以在类中使用,这被称为成员函数的重载。成员函数的重载可以根据不同的参数类型和个数来区分不同的成员函数。

  5. 当调用一个重载函数时,编译器会根据实参的类型和个数选择最匹配的函数进行调用。如果找不到匹配的函数,将会导致编译错误。

  6. 函数重载可以用于递归函数。递归函数是指函数调用自身的函数。通过函数重载,可以定义多个版本的递归函数,每个版本处理不同的参数类型和个数。

相关文章:

【C++漂流记】函数的高级应用——函数默认参数、占位参数、重载

函数的高级应用&#xff0c;侧重介绍函数的默认参数、函数的占位参数、函数重载定义解释及使用。 文章目录 一、函数的默认参数二、函数的占位参数三、函数重载函数重载的注意事项 一、函数的默认参数 函数默认参数是指在函数声明时为参数提供一个默认值&#xff0c;这样在调…...

Java——》synchronized的原理

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…...

CPU主频

CPU主频&#xff0c;也称为时钟频率&#xff0c;是指中央处理单元&#xff08;CPU&#xff09;的工作时钟的速度&#xff0c;通常以赫兹&#xff08;Hz&#xff09;为单位表示。它表示CPU每秒钟执行的时钟周期数。CPU主频是CPU性能的一个重要指标之一&#xff0c;但不是唯一的性…...

PHP8中查询数组中指定元素-PHP8知识详解

php是使用最广泛的web编程语言&#xff0c;数组是一个数据集合&#xff0c;数组是一种非常常用的数据类型。在操作数组时&#xff0c;有时我们需要查询数组中是否有某个指定元素。在实际的程序开发中&#xff0c;我们用到了下列方法来查询数组中指定的元素&#xff1a;使用arra…...

在Git中将本地分支推送到远程仓库

这里很明显 我git云端只有一个master分支 然后 我在本地创建了一个develop分支 然后 现在我想将他放在云端 首先 我们要执行 git checkout -b develop将本地切换到 develop 分支上 因为我这里已经选择的就是了 就不需要了 然后我们执行 git push origin develop这样 刷新云…...

【数据仓库基础(四)】数据仓库需求:基本需求和数据需求

文章目录 一. 基本需求1. 安全性2. 可访问性3. 自动化 三. 数据需求1. 准确性2&#xff0e;时效性3&#xff0e;历史可追溯性 从基本需求和数据需求两方面介绍对数据仓库系统的整体要求。 一. 基本需求 1. 安全性 数据仓库中含有机密和敏感的数据。为了能够使用这些数据&…...

C++类模板是一种通用的编程工具,可以创建可以适用于多种数据类型的类

C类模板是一种通用的编程工具&#xff0c;可以创建可以适用于多种数据类型的类。它们允许在类定义中使用参数&#xff0c;以便根据需要实例化具体的类。使用C类模板时&#xff0c;首先需要定义模板。模板定义的语法如下&#xff1a;cpp template <typename T> class MyCl…...

Vite和Webpack如何使用CDN包

为了精简打包输出的dist目录大小&#xff0c;我们可以引入CDN外部包的方式&#xff0c;来缩小打包的体积&#xff0c;加快打包速度。这里介绍Vite和Webpack中如何引入React CDN外部包。 一、Vite引入CDN包 1、安装插件 npm i vitejs/plugin-react-refresh vite-plugin-cdn-i…...

TOWE雷达光敏感应开关,让生活更智能、更安全

现代生活中&#xff0c;智能家居成为人们追求品质生活的必备之选。其中&#xff0c;照明控制的智能化已然成为一种趋势&#xff0c;传统的灯光开关需要人们手动操作&#xff0c;既不方便&#xff0c;有时候也会造成资源的过度浪费&#xff0c;而雷达光敏感应开关的出现&#xf…...

git:亲测体验rebase与merge

rebase与merge异同与最佳使用场景[1] 这个dev-cui分支从devlop分支切出后,一直都只有我一个人在开发&维护. 假如还有一位同事张三, 在devlop分支切出的分支dev-zhangsan上进行开发,他添加了一个glossary.md,而后进行了add & commit 此时项目开发完成,需要将两个分支合并…...

深度神经网络之BiseNet

标题&#xff1a;深度神经网络之BiseNet 1.模型介绍 BiseNet是一种用于实时语义分割的神经网络模型&#xff0c;由华为公司提出。它结合了全卷积网络和空间金字塔池化模块的优点&#xff0c;可以同时实现高效率和高精度的语义分割。 BiseNet的核心思想是将图像分为两个部分&…...

Ubantu终端常用命令、快捷键和基本操作

目录 前言 一、常用命令 二、常用快捷键 三、快捷键自定义设置 总结 前言 Ubantu终端常用命令和快捷键用于进行系统管理、文件操作、软件安装等常见使用场景。使用它们可以提高工作效率&#xff0c;简化操作流程&#xff0c;并进行更多的自定义配置和控制。同时&#xff0c…...

9.5 校招 内推 面经

绿泡*泡&#xff1a; neituijunsir 交流裙 &#xff0c;内推/实习/校招汇总表格 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来实现一个简单的绘画流程图功能

简单流程图的实现&#xff08;基于antdvue2的&#xff09;代码很多哦~ 实现页面如下 1.简单操作如下 2.弹框中使用组件&#xff1a; <vfdref"vfd"style"background-color: white;":needShow"true":fieldNames"fieldNames"openUse…...

【小吉送书—第二期】阿里后端开发:抽象建模经典案例

文章目录 0.引言1.抽象思维2.软件世界中的抽象2.1 命名抽象2.2 分层抽象2.3 原则抽象 3. 经典抽象案例3.1 方案一&#xff1a;战术抽象&#xff0c;多快好省&#xff0c;跑步前进3.2 方案二&#xff1a;深入分析&#xff0c;透过表象&#xff0c;探寻本质 5. 推荐一本书&#x…...

深度学习常用的Python库(核心库、可视化、NLP、计算机视觉、深度学习等)

&#xff08;1&#xff09;核心库与统计&#xff1a;Numpy、Scipy、Pandas、StatsModels。 &#xff08;2&#xff09;可视化&#xff1a;Matplotlib、Seaborn、Plotly、Bokeh、Pydot、Scikit-learn、XGBoost/LightGBM/CatBoost、Eli5。 &#xff08;3&#xff09;深度学习&a…...

Android菜单(上下文菜单)(选项菜单)

菜单资源文件通常放置在res\menu目录下&#xff0c;在创建项目时&#xff0c;默认不自动创建menu目录&#xff0c;所以需要手动创建。Android Resource Directory->value menu 菜单资源根元素通常是<menu></menu>标记&#xff0c;子元素为<item></ite…...

l8-d11 TCP连接管理与UDP协议

一、三次握手 TCP 建立连接的过程叫做握手。 采用三报文握手&#xff1a;在客户和服务器之间交换三个 TCP 报文段&#xff0c;以防止已失效的连接请求报文段突然又传送到了&#xff0c;因而产生 TCP 连接建立错误。 二、四次挥手 TCP 连接释放过程比较复杂。 数据传输结束后…...

Python+Requests+Pytest+Excel+Allure 接口自动化测试项目实战【框架之间的对比】

--------UnitTest框架和PyTest框架的简单认识对比与项目实战-------- 定义&#xff1a; Unittest是Python标准库中自带的单元测试框架&#xff0c;Unittest有时候也被称为PyUnit&#xff0c;就像JUnit是Java语言的标准单元测试框架一样&#xff0c;Unittest则是Python语言的标…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...