C++入门学习(2)缺省参数

news2024/11/29 13:47:58

前言

        继上回我们学习了命名空间和在C++里面的输入输出之后,我们知道了命名空间可以解决C语言命名冲突的问题,也简单掌握了命名空间的使用,我们已经可以写出简单的C++代码,所以大家还是要继续练习敲代码,提高语感。

#include <iostream>
using namespace std;
int main()
{
    cout << "hello world" << endl;
    return 0;
}

而今天我们就继续来学习C++对C语言的改进,今天主要介绍的是缺省参数。

让我们一起往下学习吧!

一、缺省参数的诞生

1.1 缺省的意思

缺省是一种计算机的术语,大家理解成默认的意思就行,所以缺省参数的意思就是默认参数

1.2 缺省参数诞生的原因

既然缺省参数是一个参数,大家可以想一下什么的场景下会用到参数呢?用到函数的时候会用到参数对吧,大家继续想一下,在C语言中,我们没有给函数的形参传值的时候,函数的形参是不是都没有默认值,也就是,我们只要不传参数,就会编译错误,所以C++在这方面做了改善,给函数的形参增加了缺省值(默认值),大家知道这点之后,就让我们正式学习一下缺省参数吧!

二、缺省参数的定义

缺省参数是在声明或者定义函数时,为函数的参数指定一个缺省值(默认值)。

在调用该函数时,如果我们没有给指定的实参,则采用该形参的缺省值,否则使用指定的实参。

看下面代码和执行的结果:

#include <iostream>
using namespace std;
int Add(int x,int y = 3)
{
    return x + y;
}
int main()
{
    int sum1 = Add(2);
    int sum2 = Add(2,4);
    cout << "没有给y传入实参的sum1 = " << sum1 << endl;
    cout << "给y传入实参的sum2 = " << sum2 << endl;
    return 0;
}

从这里可以看出我们给y一个缺省参数为3
 

所以当我们传实参只传了个2的时候,只是给x传,而没有给y传,所以返回的就是5
 

但是当我们都传入了实参的时候,返回的就是6
 

这就应证了上面的话:在调用该函数时,如果我们没有给指定的实参,则采用该形参的缺省值,否则使用指定的实参。

那缺省参数可以怎么写呢?如果存在多个参数,我们可以随意地给缺省值吗?接下来就是我们下一个要学习的东西,缺省参数的分类

三、缺省参数的分类

3.1 全缺省参数

顾名思义,就是把所有的形参都给上缺省值

下面的代码就是把所有的形参都给了缺省值,这样的就叫做全缺省参数。我们写完函数体之后,肯定要调用我们的函数,但是这里就又出现了问题,我们应该如何去调用呢?

我们将下面的代码放到自己的编辑器上,就会发现如下报错:

#include <iostream>
using namespace std;
void Func(int a = 10, int b = 20, int c = 30)
{
     cout << "a = " << a << endl;
     cout << "b = " << b << endl;
     cout << "c = " << c << endl << endl;
}
int main()
{
    Func();      // 1
    Func(1);     // 2
    Func(1,2);   // 3
    Func(1,2,3); // 4
    Func(1,,3);  // 5 错误
    Func(,,3);   // 6 错误
    return 0;
}

这里的报错就说明的我们在调用含有缺省参数的函数时,传入的形参必须是从左往右依次传入,不能跳着给。

3.2 半缺省参数

既然知道了全缺省参数是全部的形参都给缺省值,那半缺省参数就是不给全部,只给一部分的形参 缺省值

那我们可以怎么给缺省值呢?可以跳着给吗?让我们一起看看吧!

我们如下三种代码,经过测试只有第一个是对的

所以也就是说半缺省参数,禁止跳着给,也禁止给左边不给右边

半缺省参数的规则就是:

从右往左依次给

void Func(int a, int b = 20, int c = 30)
{
     cout <<"a = "<< a << endl;
     cout <<"b = "<< b << endl;
     cout <<"c = "<< c << endl << endl;
}
void Func(int a = 10, int b, int c = 30)
{
     cout <<"a = "<< a << endl;
     cout <<"b = "<< b << endl;
     cout <<"c = "<< c << endl << endl;
}
void Func(int a = 10, int b = 20, int c)
{
     cout <<"a = "<< a << endl;
     cout <<"b = "<< b << endl;
     cout <<"c = "<< c << endl << endl;
}

在讲完这些,关于缺省参数还有一个重要的规则要说明一下

四、缺省参数在函数定义和函数声明中的规则

我们规定,缺省参数不能在函数的定义和声明中同时出现

如果函数定义和声明同时存在,缺省参数放到函数声明中。

由于函数的定义在主函数的上面再进行声明是冗余(多余)的声明,所以我把函数定义放在主函数下定义:

在这段代码中,我们的函数定义和函数声明是同时存在的,所以我们把缺省参数放在函数声明里,这个是可以正常运行的。

#include <iostream>
using namespace std;

void Func(int a = 10,int b = 20,int c = 30 );

int main()
{

    Func(1);
    Func(1,2);
    Func(1,2,3);
    return 0;
}
void Func(int a,int b,int c)
{
    cout <<"a = "<< a << endl;
    cout <<"b = "<< b << endl;
    cout <<"c = "<< c << endl << endl;
}

但是我在这里把缺省参数放到函数的定义里,不放在函数声明里,在调用的时候就会报错,这是为什么呢?

因为在我们的程序里,它会以函数声明为准,函数声明里都没有缺省参数,我们不可以用有缺省参数的形式来传参,所以里面两个会报错。

综上所述,我们以后在面对函数定义和函数声明同时存在的时候,需要用到缺省参数时,一定要放在声明中。

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

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

相关文章

再谈Android重要组件——Handler(Native篇)

前言 最近工作比较忙&#xff0c;没怎么记录东西了。Android的Handler重要性不必赘述&#xff0c;之前也写过几篇关于hanlder的文章了&#xff1a; Handler有多深&#xff1f;连环二十七问Android多线程&#xff1a;深入分析 Handler机制源码&#xff08;二&#xff09; And…

构建金融新核心生态!金融级数字底座“源启”与易捷行云可进化数字原生平台完成互认证

近日&#xff0c;金融级数字底座“源启”顺利与易捷行云可进化数字原生云平台V6完成互认证。易捷行云云平台V6可支持金融机构核心应用实现高速响应、秒级扩容&#xff0c;并切实保障银行核心系统安全稳定&#xff0c;符合“源启”金融级数字底座&#xff08;2.0版&#xff09;技…

开源Open JDK哪家强?Oracle JDK替代解决方案盘点

开源Open JDK哪家强&#xff1f;Oracle JDK替代解决方案盘点 1.1 引言1.2 Open JDK 版本分支1.3 Open JDK 选择推荐1.3.1 Liberica JDK 是什么&#xff1f;1.3.2 Oracle JDK、 OpenJDK 和Liberica JDK 之间有什么区别&#xff1f;1.3.2 OpenJDK 和 Liberica JDK 一样吗&#xf…

2034:D 类音频功率放大器的引脚排列

2034芯片是一款无滤波器5.2W单声道纯D类音频放大器。低EMI适合应用于便携式设备中。 2034芯片的引脚排列&#xff1a; 2034芯片管脚描述&#xff1a; 2034芯片具有关断功能&#xff0c;延长系统的待机时间。过热保护功能增强系统。POP声抑Z功能改进了系统的听觉感受&#xff0…

企业通配符SSL证书的特点

企业通配符SSL证书是一种数字证书&#xff0c;其可以用于保护多个企业网站&#xff0c;对网站传输信息进行加密服务。这种证书通常适用于拥有多个子域名或二级域名的企事业单位。今天就随SSL盾小编了解企业通配符SSL证书的相关信息。 1. 保护所有域名和子域名&#xff1a;企业通…

Java 设计模式——状态模式

目录 1.概述2.结构3.案例实现3.1.抽象状态类3.2.具体状态类3.3.上下文类3.4.测试 4.优缺点5.使用场景 1.概述 【例】通过按钮来控制一个电梯的状态&#xff0c;电梯有开门状态&#xff0c;关门状态&#xff0c;停止状态&#xff0c;运行状态。每一种状态改变&#xff0c;都有可…

劲升逻辑与安必快、鹏海运于进博会签署合作协议,助力大湾区外贸高质量发展

新中经贸与投资论坛签约现场 中国上海&#xff0c;2023 年 11 月 6 日——第六届进博会期间&#xff0c;由新加坡工商联合总会主办的新中经贸与投资论坛在上海同期举行。跨境贸易数字化领域的领导者劲升逻辑与安必快科技&#xff08;深圳&#xff09;有限公司&#xff08;简称…

xilinx primitives(原语)

Xilinx的原语分为10类&#xff0c;包括&#xff1a;计算组件&#xff0c;IO端口组件&#xff0c;寄存器/锁存器&#xff0c;时钟组件&#xff0c;处理器组件&#xff0c;移位寄存器&#xff0c;配置和检测组件&#xff0c;RAM/ROM组件&#xff0c;Slice/CLB组件&#xff0c;G-t…

第一章:java类的继承

系列文章目录 文章目录 系列文章目录前言一、继承的基本概念二、继承的细节总结 前言 继承是类的重要特征之一。 一、继承的基本概念 ​​​​​​ 关键字extends&#xff0c;表示Sab类继承了Base类&#xff0c;则Sab为Base的子类&#xff0c;Base为Sab的父类。继承在现实中是…

苹果Mac电脑fcpx视频剪辑:Final Cut Pro中文最新 for mac

Final Cut Pro是苹果公司开发的一款专业视频剪辑软件&#xff0c;它为原生64位软件&#xff0c;基于Cocoa编写&#xff0c;支持多路多核心处理器&#xff0c;支持GPU加速&#xff0c;支持后台渲染。Final Cut Pro在Mac OS平台上运行&#xff0c;适用于进行后期制作。 Final Cu…

支持内录系统声音的Mac录屏软件Omi Recorder

Screen Recorder by Omi是一款功能强大的屏幕录制应用程序。它可用于在Windows和Mac计算机上捕获屏幕&#xff0c;以便进行演示、教程、游戏录制、视频编辑等各种用途。 以下是该应用程序的一些主要特点&#xff1a; 支持高清录制&#xff1a;Omi Screen Recorder可以以高达6…

嵌入式发展历史

MPU、MCU、SoC、Application Processors 在一个电子系统中&#xff0c;处理器占据最重要的位置&#xff0c;被称为中央处理器单元&#xff08;CPU&#xff1a;Central Processing Unit&#xff09;。它从IO设备读取数据&#xff0c;处理&#xff0c;然后输出。 CPU的发展历史…

数字博物馆如何设计搭建,一文了解数字博物馆解决方案

导言&#xff1a; 数字博物馆是一种创新性的文化机构&#xff0c;通过数字技术的应用&#xff0c;将传统博物馆的宝贵文化遗产以全新的方式呈现给观众。 一.数字博物馆是什么 博物馆是指利用数字技术和互联网等新媒体技术来展示和传播文物、艺术品等文化遗产的博物馆。数字物…

汽车软件单元测试的要点与意义

测试是一个非常基础的概念&#xff0c;这种基础让大家可以随意在它前面添加各种定语。 尽管这种添加的背后多数是不同的分类维度&#xff0c;但让测试本身成为了繁杂概念的集合&#xff0c;这也让我们总有种无法把握的烦躁感。 单元测试就是这堆让人烦躁的繁杂概念之一。 1、3种…

Linux文件系统目录结构

典型的Linux文件系统目录结构的列表 典型的Linux文件系统目录结构的列表。每个目录都有其特定的用途&#xff1a; /bin: 存放系统引导和修复所需的二进制可执行文件&#xff0c;如ls&#xff0c;cp&#xff0c;mv等命令。 /boot: 存放操作系统引导文件&#xff0c;例如内核和…

2023世界传感器大会开幕,汉威科技多领域创新产品引瞩目

11月5日&#xff0c;2023世界传感器大会在郑州国际会展中心正式拉开帷幕。据悉&#xff0c;本次大会由河南省人民政府、中国科学技术协会主办&#xff0c;郑州市人民政府、河南省工业和信息化厅、河南省科学技术协会、中国仪器仪表学会承办。 大会由“一会一赛一展”组成&#…

Python新手必读:容器类型使用的实用小贴士

更多资料获取 &#x1f4da; 个人网站&#xff1a;涛哥聊Python Python提供了多种容器类型&#xff0c;如列表&#xff08;List&#xff09;、元组&#xff08;Tuple&#xff09;、集合&#xff08;Set&#xff09;、字典&#xff08;Dictionary&#xff09;等&#xff0c;用于…

NVM安装与配置(管理node版本)

NVM安装与配置(管理node版本) 一、安装NVM 下载安装 NVM解压后点击exe文件进行安装&#xff1a;点击下一步安装到 D:\NVM 下先在D:\NVM 下创建nodejs文件夹&#xff0c;然后将路径设置如下&#xff1a;点击next 一直点击 完成安装&#xff1b;地方是非得失范德萨范德萨发![在…

如何建设企业集成中台

企业的信息化建设是伴随企业发展不断延伸、不断升级的过程&#xff0c;而随着信息化体量不断增大&#xff0c;复杂繁多的业务系统往往又成为信息化建设的瓶颈&#xff0c;而为了消除瓶颈&#xff0c;更便捷地打通系统的关联&#xff0c;针对企业实际业务建立集成中台则是非常有…

C语言基础篇2:数组

1 一维数组 数组是一个由若干同类型变量组成的集合&#xff0c;引用这些变量可以使用同一个名字。数组均由连续的存储单元组成&#xff0c;最低地址对应于数组的第一个元素&#xff0c;最高地址对应数组的最后一个元素。 1.1 一维数组的定义和引用 一维数组示意图如下&#xf…