【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. 函数重载可以用于递归函数。递归函数是指函数调用自身的函数。通过函数重载,可以定义多个版本的递归函数,每个版本处理不同的参数类型和个数。

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

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

相关文章

算法通关村第十三关——溢出问题处理模板

前言 溢出问题是面试当中输出涉及到数字的一个需要特别注意的地方&#xff0c;典型的题目有三个&#xff1a;数字反转&#xff0c;将字符串转成数字和回文数。 1.整数反转 力扣7题&#xff0c;给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。…

ORACLE 11.2.0.4 RAC Cluster not starting cssd with Cannot get GPnP profile

最近&#xff0c;处理一次oracle 11.2.0.4 rac cluster由于cssd无法启动&#xff0c;导致集群一个节点的CRS集群无法正常启动的故障。原本&#xff0c;计划变更是从ASM剔除磁盘&#xff0c;解除存储到数据库服务器的映射&#xff1b;磁盘已经成功从ASM剔除&#xff0c;也已经成…

数据库误修改后的数据恢复

一不小心将数据库数据修改了&#xff0c;而且回滚无效&#xff0c;于是去尝试各种方法恢复数据 查询到修改时间点之前的数据 恢复数据 恢复数据库被修改数据的流程及代码&#xff0c;这里被修改的表是AUTH_USER,实际应用填写对应表名。 -- 通过时间恢复删除且已提交的数据-- 1…

uni-app rich-text组件富文本图片展示不全问题

背景&#xff1a;phpfastadmin富文本插件上传富文本内容到数据库&#xff0c;uni-app渲染富文本内容。这里后端不需要特殊处理。uni-app的rich-text组件展示图片跑板。直接贴代码。 <template><view><title-bar title"会员动态" back backcolor"…

解释区块链技术的应用场景和优势

概述 区块链技术是一种分布式数据库技术&#xff0c;用于存储和传输数字资产&#xff08;如加密货币&#xff09;的信息。它通过将交易记录分散保存到节点网络中的多个节点上&#xff0c;从而保证了数据的安全性和透明度。区块链技术的核心是基于密码学技术的算法&#xff0c;…

JDK1.8下载、安装和环境配置使用

JDK1.8下载、安装和配置 下载安装包解压文件配置测试安装 下载安装包 链接地址 https://pan.baidu.com/s/1RF7-ulq0_qAelpXskDxdvA 提取码 d1y0解压文件 jdk1.8.0_181 配置 右击我的电脑&#xff0c;选择属性 2.点击高级系统设置 在系统变量区里点击&#xff1a;新建…

Oralce集群管理-19C RAC 私有网络调整为BOND1

1 尝试在线添加私有网络的新接口 是否成功。 使用oifcfg命令在线添加新的网卡接口&#xff0c;在还没有配置bond1的条件下 也是可以添加成功的。 [gridorcldb1 ~]$ oifcfg getif eno3 192.168.224.0 global public ens3f0 10.2.0.0 global cluster_interconnect,asm eno…

2023年高教社杯数学建模国赛C题详细版思路

C 题 蔬菜类商品的自动定价与补货决策 2023年国赛如期而至&#xff0c;为了方便大家尽快确定选题&#xff0c;这里将对C题进行解题思路说明&#xff0c;以分析C题的主要难点、出题思路以及选择之后可能遇到的难点进行说明&#xff0c;方便大家尽快找到C题的解题思路。 难度排…

【OJ比赛日历】快周末了,不来一场比赛吗? #09.09-09.15 #15场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-09-09&#xff08;周六&#xff09; #5场比赛2023-09-10…

适用于多种场景功能强大的在线海报图片素材设计器源码

源码介绍: 在线海报设计系统素材设计源码是一个漂亮且功能强大的在线海报图片设计器, 仿照稿定设计而成。该系统适用于多种场景,包括海报图片生成、电商分享图、文章长图、 视频/公众号封面等。用户无需下载软件,即可轻松实现创意,迅速完成排版,让设计更简单! 该系统…

Python之基础数据类型(二)

目录 列表 list初始化切片&#xff08;有序&#xff09;可变数据类型存放任何数据类型 常用方法运算底层存储&#xff08;地址值的传递&#xff09;遍历示例 元组 tuple初始化与list的主要区别是不可变运算与list相互转换 字典 dict初始化删除字典的合并in、not in、values()遍…

Ubuntu离线或在线安装CMake

首先下载适用于Ubuntu的CMake安装包&#xff0c;可以去官网下载&#xff0c;也可以通过下面的命令下载&#xff08;需要联网&#xff09;&#xff1a; wget https://cmake.org/files/v3.22/cmake-3.22.1.tar.gz将下载的安装包进行解压&#xff1a; tar -xvzf cmake-3.22.1.ta…

本地如何使用HTTPS进行调试

在现代前端开发中&#xff0c;HTTPS已经成为不可或缺的一部分&#xff0c;因为它在保护用户数据和确保网站安全性方面发挥着关键作用。然而&#xff0c;有时在本地开发过程中启用HTTPS可能会变得有些复杂。在本文中&#xff0c;我们将介绍如何轻松地在本地进行HTTPS调试&#x…

JVM学习(五)--方法区

概念&#xff1a; 方法区就是存和类相关的东西&#xff0c;成员方法&#xff0c;方法参数&#xff0c;成员变量&#xff0c;构造方法&#xff0c;类加载器等&#xff0c;逻辑上存在于堆中&#xff0c;但是不同的虚拟机对它的实现不同&#xff0c;oracle的hotsport vm在1.6的时…

U-net网络学习记录

U-net网络 本质上是一个用于图像分割的神经网络 输入是一幅图&#xff0c;输出是目标的分割结果。继续简化就是&#xff0c;一幅图&#xff0c;编码&#xff0c;或者说降采样&#xff0c;然后解码&#xff0c;也就是升采样&#xff0c;然后输出一个分割结果。根据结果和真实分…

uwsgi部署多进程django apscheduler与问题排查

&#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是Zeeland&#xff0c;开源建设者与全栈领域优质创作者。&#x1f4dd; CSDN主页&#xff1a;Zeeland&#x1f525;&#x1f4e3; 我的博客&#xff1a;Zeeland&#x1f4da; Github主页: Undertone0809 (Zeeland)&…

基于Simulink的用于电力系统动态分析

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【正版软件】Air Explorer - 一个程序访问您的所有云服务

前言&#xff1a;Air Explorer支持最好的云服务。 功能特点&#xff1a; 直接管理云中的文件 设置同一服务上的多个帐户 您可以在任何云服务或计算机之间同步文件夹 云文件浏览器易于使用 通过加入您的所有云服务来增加存储空间 应用程序适用于Windows/Mac Air Explorer…

vue+antd——table组件实现动态列+表头下拉选择功能——技能提升

Table 表格 展示行列数据。 何时使用 当有大量结构化的数据需要展现时&#xff1b; 当需要对数据进行排序、搜索、分页、自定义操作等复杂行为时。 最近在写vueantd的框架&#xff0c;遇到一个需求&#xff1a;就是要实现table表格的动态列&#xff0c;并且相应的表头要实现下拉…

Scrapy的基本介绍、安装及工作流程

一.Scrapy介绍 Scrapy是什么&#xff1f; Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架(异步爬虫框架) 通常我们可以很简单的通过 Scrapy 框架实现一个爬虫&#xff0c;抓取指定网站的内容或图片。 Scrapy使用了Twisted异步网络框架&…