学习C++第二天

news2024/10/7 13:17:22

1.缺省参数

缺省参数的概念:

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

void show(int a = 10) {
	cout << a << endl;
}

int main() {
	show();
	show(20);
	return 0;
}

// 没有传参时,使用参数的默认值10,即输出10

// 传参时,使用指定的实参,即输出20

缺省参数分类:

        全缺省参数:

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

int main() {
	add();
	return 0;
}

什么都不输入即全使用默认值

     半缺省参数:

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

int main() {
	add(3,2);
	return 0;
}

1. 半缺省参数必须从右往左依次来给出,不能间隔着给

2. 缺省参数不能在函数声明和定义中同时出现

3. 缺省值必须是常量或者全局变量

在声明定义函数时,如果想要使用省缺参数,声明不能省略省缺参数,定义可以

2.函数重载

   函数重载的概念: 

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数或类型或类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。

int add(int a, int b, int c) {
	cout << a + b + c << endl;
	return a + b + c;
}

double add(double x, double y) {
	cout << x + y<<endl;
	return x + y;
}

int add(int x, int y) {
	cout << x + y << endl;
	return x + y;
}

double add(int a, double x) {
	cout << a + x << endl;
	return a + x;
}

int main() {
	add(1, 2, 3);
	add(1.3, 2.2);
	add(1, 2);
	add(1, 2.3);
	return 0;
}

1.C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。

2. 如果两个函数函数名和参数是一样的,返回值不同是不构成重载的,因为调用时编译器没办 法区分。

3.引用

引用的概念:

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间

引用书写格式:类型& 引用变量名(对象名) = 引用实体;

上述代码证明了引用变量和引用实体所指向的是同一块空间

注意:引用类型必须和引用实体是同种类型的

引用的特性:

1. 引用在定义时必须初始化

2. 一个变量可以有多个引用

3. 引用一旦引用一个实体,再不能引用其他实体

引用在定义时必须初始化:

一个变量可以有多个引用:

 引用一旦引用实体就不能再引用其他实体:

(对引用的赋值实质为对被引用对象的赋值,以下代码即可证明。)

 c是a的引用(也就是a这块空间的别名),当b给c赋值时,其实是在给a赋值,使得a,c这块空间的值变为20

常引用(const引用)

  const引用即将引用与const对象绑定。由于const引用是为const对象取别名,故无法通过修改const引用修改被引用的const对象。

int main() {
	const int a = 10;
	//int &ra = a;    //报错,a为常量,而ra为非常量引用
	 const int& ra = a;//正确写法,const修饰将ra变为常引用

	 //int& b = 10;//报错,b为常量,10为常量,而b为非常量引用
	 const int& b = 10;//正确写法,const修饰的引用为常引用

	 double x = 1.23;
	// int& ra = x;//类型不同,报错
	  const int& ra = x;//正确写法
}

第三种正确写法的原因是x先隐式转化为const修饰的临时变量,然后临时变量再被ra引用

编译器其实执行了以下两步:

  const int tmp = x;
  const int& ra = x;

使用场景:

    做参数:

交换两个数

void swap(int& x, int& y) {
	int tmp = x;
	x = y;
	y = tmp;
}

int main() {
	int a = 10;
	int b = 20;
	swap(a, b);
	cout << a << endl << b << endl;
}

之前在c语言阶段,交换两个数使用指针进行交换的

引用相当于别名,当引用作为参数时,他和实参指向的是同一块空间

做返回值:

int& add(int x, int y) {
	int c = x + y;
	return c;
}

int main() {
	cout << add(1, 2) << endl;
	return 0;
}

注意:如果函数返回时,出了函数作用域,如果返回对象还在(还没还给系统),则可以使用 引用返回,如果已经还给系统了,则必须使用传值返回。

传值和传引用效率比较:

以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直 接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。

引用和指针的区别:

1. 引用概念上定义一个变量的别名,指针存储一个变量地址。

2. 引用在定义时必须初始化,指针没有要求

3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何 一个同类型实体

4. 没有NULL引用,但有NULL指针

5. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32 位平台下占4个字节)

6. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小 

7. 有多级指针,但是没有多级引用

8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理

9. 引用比指针使用起来相对更安全

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

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

相关文章

英语智汇学习系统

目 录 1 软件概述 1.1 项目研究背景及意义 2 系统相关技术 2.1 HTML、WXSS、JAVASCRIPT技术 2.2 Vanilla框架 2.3 uni-app框架 2.4 MYSQL数据库 3 需求分析 3.1 可行性分析 3.2 功能需求分析 3.3 系统用户及用例分析 3.4 非功能需求分析 3.5 数据流图…

已解决ApplicationException异常的正确解决方法,亲测有效!!!

已解决ApplicationException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查业务逻辑 验证输入数据 确认服务器端资源的可用性 增加对特殊业务情况的处理…

android串口助手apk下载 源码 演示 支持android 4-14及以上

android串口助手apk下载 1、自动获取串口列表 2、打开串口就开始接收 3、收发 字符或16进制 4、默认发送at\r\n 5、android串口助手apk 支持android 4-14 &#xff08;Google seral port 太老&#xff09; 源码找我 需要 用adb root 再setenforce 0进入SELinux 模式 才有权限…

LabVIEW 控制 Tucsen 相机

LabVIEW 控制 Tucsen 相机 ucsen 是一家知名的显微镜相机制造商&#xff0c;其相机产品广泛应用于科研、工业和医疗等领域。本文将介绍如何使用 LabVIEW 软件来控制 Tucsen 相机&#xff0c;涵盖相机的基本情况、硬件和软件要求、具体的控制步骤和编程示例。通过使用 LabVIEW&…

【职场人】如何与同事有效沟通

在职场中&#xff0c;沟通如同桥梁&#xff0c;连接着每一位职场人士的心灵与智慧。有效的沟通不仅能让工作更加顺畅&#xff0c;还能让团队关系更加和谐。那么&#xff0c;如何与同事进行有效沟通呢&#xff1f;下面&#xff0c;我将结合个人经验和一些幽默的比喻&#xff0c;…

AI 大模型企业应用实战(11)-langchain 的Document Loader机制

loader机制让大模型具备实时学习的能力&#xff1a; 0 Loader机制 案例环境准备&#xff1a; import osos.environ["OPENAI_API_KEY"] "sk-javaedge" os.environ["OPENAI_PROXY"] "https://api.chatanywhere.tech"import os from …

开启调试模式

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 run()方法虽然适用于启动本地的开发服务器&#xff0c;但是每次修改代码后都要手动重启它。这样并不够方便&#xff0c;如果启用了调试支持&#xff…

[SAP ABAP] 删除内表数据

1.利用索引删除数据 语法格式 DELETE <itab> INDEX <idx>. <itab>&#xff1a;代表内表 <idx>&#xff1a;代表索引值 删除内表<itab>中的第<idx>条记录 示例1 lt_student内表中存在3条数据记录 我们使用如下指令删除内表中的第一条数…

WordPress强大多功能主题模板The7 v9.16.0

模板介绍 The7可以与WPBakery Page Builder&#xff08;原Visual Composer&#xff09;和Ultimate Addons的完全无缝集成。它也与大多数流行的插件完全兼容&#xff0c;例如WooCommerce&#xff0c;WPML&#xff0c;Yoast SEO&#xff0c;All in One WP Migration&#xff0c;…

解决MNIST数据集下载慢,或者Http连接失败问题

下载MNIST数据集时遇到速度慢的问题 解决&#xff1a;手动从MNIST数据集的官方网站直接使用下载好的数据文件&#xff0c;放到指定目录下&#xff0c;再进行调取即可。 手动下载地址&#xff1a;MNIST官网 http://yann.lecun.com/exdb/mnist/ 【仍需要连接外网】 这里我提供…

【大数据 复习】第3章 分布式文件系统HDFS(重中之重)

一、概念 1.分布式文件系统把文件分布存储到多个计算机节点上&#xff0c;通过网络实现、文件在多台主机上进行分布式存储的文件系统。&#xff08;就是你的电脑存a&#xff0c;我的电脑存pple&#xff09; 2.降低了硬件开销: 与之前使用多个处理器和专用高级硬件的并行化处理装…

公司倒闭被迫踏上海投简历道路,经历打压受挫后总结的Android面经,互相激励!

红黑树有啥特性? 在oncreate里面可以得到view的宽高吗? view的getwidth和getmesurewidth有啥区别? 遍历hashmap的原理? 23种设计模式 中园博林(有笔试) 如何避免out of menmory和anr? arraymap和hashmap的区别? 如何实现线程同步? 简述android事件分发机制 简…

pytorch国内镜像源安装及测试

一、安装命令&#xff1a; pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple 二、测试&#xff1a; import torch x torch.rand(5, 3) print(x)

示例:推荐一个基于第三方开源控件库DataGridFilter封装的FilterColumnDataGrid,可以像Excel拥有列头筛选器

一、目的&#xff1a;基于第三方开源控件库DataGridFilter封装的FilterColumnDataGrid&#xff0c;可以像Excel拥有列头筛选器&#xff0c;感兴趣的可以去下方链接地址查看开源控件库地址。本控件封装的目的在于将第三方库的皮肤和样式封装到皮肤库中可统一设置样式&#xff0c…

【教学类65-02】20240622秘密花园涂色书02(通义万相)(A4横版2张,一大 68张纸136份)

背景需求 【教学类65-01】20240622秘密花园涂色书01&#xff08;通义万相&#xff09;&#xff08;A4横版2张&#xff0c;一大3小 38张纸76份&#xff09;-CSDN博客文章浏览阅读118次。【教学类65-01】20240622秘密花园涂色书01&#xff08;通义万相&#xff09;&#xff08;A…

已解决javax.management.BadBinaryOpValueExpException异常的正确解决方法,亲测有效!!!

已解决javax.management.BadBinaryOpValueExpException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查操作数合法性 确认操作数类型匹配 优化代码逻辑 增…

Day 46 Redis缓存集群

Redis缓存集群 redis缓存服务 缓存数据库 缓存 ​ 读取数据 cpu ​ L1 L2 L3 L4 ​ 一级缓存 二级缓存 ​ cs context switch 上下文交换 free -m ​ buffer cache mysql服务器 ​ 缓存 表缓存 数据缓存 nginx ​ expire 1d ​ 304响应码 ​ 200 ​ 301 ​ 30…

机器学习周记(第四十四周:Robformer)2024.6.17~2024.6.23

目录 摘要ABSTRACT1 论文信息1.1 论文标题1.2 论文摘要1.3 论文引言1.4 论文贡献 2 论文模型2.1 问题描述2.2 Robformer2.2.1 Encoder2.2.2 Decoder 2.3 鲁棒序列分解模块2.4 季节性成分调整模块 摘要 本周阅读了一篇利用改进 Transformer 进行长时间序列预测的论文。论文模型…

Linux系统编程--软/硬连接

真正找到磁盘上文件的并不是文件名&#xff0c;而是inode。 其实在linux中可以让多个文件名对应于同一个inode。 命令&#xff1a; 软连接&#xff1a;ln -s 原文件名 新文件名 硬链接&#xff1a;ln 原文件名 新文件名 删除链接文件&#xff1a;unlink 文件名执行上面两条命令…

Python学习打卡:day14

day14 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day14102、封装三大特性对用户隐藏的属性和行为私有成员使用私有成员 103、封装的课后习题104、继承单继承多继承 105、复写父类成员和调用父类成…