C++的缺省参数,函数重载,引用

news2024/11/15 13:47:53

目录

1、缺省参数(不能在函数声明和定义中同时出现,若声明和定义是分开的,则缺省参数放在声明里面)

1.1、缺省参数的概念

1.2、全缺省

1.3、半缺省

2、函数重载

2.1、特殊情况

2.2、特殊情况

2.3、为什么C++支持函数重载而C语言不支持(10_12_1:40)

3、引用

3.1、概念:

3.2、引用就是取别名,别名变原名也变

3.3、引用的传参(核心)

3.4、C++引用的几种错误写法

3.4.1、引用必须初始化

3.4.2、C++中的引用初始化后,就不能第二次改变引用的指向:

3.5、引用作为返回值

3.5.1、错误的使用,这种直接返回的值是不确定的

3.5.2、正确使用,将要返回的变量设置为静态变量;

3.5.3、引用做返回值的价值


1、缺省参数(不能在函数声明和定义中同时出现,若声明和定义是分开的,则缺省参数放在声明里面)

1.1、缺省参数的概念

缺省参数是 声明或定义函数时 为函数的 参数指定一个缺省值(缺省值只能为常量或者全全局变量) 。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

1.2、全缺省

即所有参数都给定默认值,如下:

1.3、半缺省

即只有部分参数指定默认值,但缺省值必须从右往左连续给定,即没有默认值的参数必须放在最左边:

2、函数重载

即运行函数名相同,根据参数列表(包括参数个数,参数类型,类型顺序)的不同,调用对应的函数。

注意:紧靠返回值不同不能构成重载,返回值不参与重载。

2.1、特殊情况

这种情况理论上说是可以的,因为整形和浮点型之间存在隐式类型转换,但由于我重载函数中既有整形参数又有浮点型参数,就不知道谁转换成谁,就产生了二义性。

2.2、特殊情况

当重载和缺省参数相遇时,如下:

这样可以构成重载函数,但因为缺省参数的存在,导致他不知道该调用哪个函数,产生二义性;

2.3、为什么C++支持函数重载而C语言不支持(10_12_1:40)

3、引用

3.1、概念:

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

3.2、引用就是取别名,别名变原名也变

3.3、引用的传参(核心)

我们以交换两个数的功能为例:
//C语言写法
void Swap(int* p1, int* p2)
{
	int tmp = *p1;
	*p1 = *p2;
	*p2 = tmp;
}

//C++写法
void Swap(int& p1, int& p2)
{
	int tmp = p1;
	p1 = p2;
	p2 = tmp;
}

int main()
{
	int a = 0, b = 1;
	//C语言传参
	Swap(&a, &b);
	//C++传参
	Swap(a, b);
	return 0;
}

3.4、C++引用的几种错误写法

3.4.1、引用必须初始化

3.4.2、C++中的引用初始化后,就不能第二次改变引用的指向:
int main()
{
	int a = 0;
	int& c = a;
	int d = 1;
	//下面这一步是赋值,执行过后a和c的值都为1
	//而不是c变成d的引用
	c = d;
	return 0;
}

所以C++中的引用并不能完全替代指针,例如不适合链表的插入结点操作,指针域如果是个引用就不能改变指向

3.5、引用作为返回值

3.5.1、错误的使用,这种直接返回的值是不确定的

因为出了作用域,对象就会被销毁,n空间处的数据可能会被摧毁也有可能保存,所以会是个不确定的值。

3.5.2、正确使用,将要返回的变量设置为静态变量;

由于变量c是静态变量,定义在静态区,这样函数test的栈帧的销毁就不影响c,而b就是c的引用,所以可以这样使用。又由于静态变量只能初始化一次,所以下面第二次调用test函数也不会影响c的值,即不会影响引用b的值。如果是下面这种情况就会影响其值:

3.5.3、引用做返回值的价值

(1)、可以提高效率;

(2)、可以修改返回对象;

3.6、常引用

//未完待续

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

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

相关文章

springboot+itextpdf+thymeleaf+ognl根据静态模版文件实现动态生成pdf文件并导出demo

第一步&#xff1a;导入maven依赖 <!-- 导出为PDF依赖包 --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId></dependency><dependency><groupId>com.itextpdf</groupId><art…

网络安全慢速攻击

什么是低速缓慢攻击&#xff1f; 低速缓慢攻击是 DoS 或 DDoS 攻击的一种&#xff0c;依赖一小串非常慢的流量&#xff0c;可以针对应用程序或服务器资源发起攻击。与更传统的蛮力攻击不同&#xff0c;低速缓慢攻击所需的带宽非常小&#xff0c;并且难以防护&#xff0c;因为它…

Day60:WEB攻防-PHP反序列化POP链构造魔术方法流程漏洞触发条件属性修改

目录 PHP-DEMO1-序列化和反序列化 序列化操作 - 即类型转换 序列化案例 PHP-DEMO2-魔术方法触发规则 __construct(): //当对象new的时候会自动调用 __destruct()&#xff1a;//当对象被销毁时会被自动调用 __sleep(): //serialize()执行时被自动调用 __wakeup(): //uns…

程序员表白

啥&#xff1f;&#xff01;你说程序员老实&#xff0c;认真工作&#xff0c;根本不会什么表白&#xff01;那你就错了&#xff01;(除了我) 那今天我们就来讲一下这几个代码&#xff01;赶紧复制下来&#xff0c;这些代码肯定有你有用的时候&#xff01; 1.Python爱心代码 im…

MNN 执行推理(九)

系列文章目录 MNN createFromBuffer&#xff08;一&#xff09; MNN createRuntime&#xff08;二&#xff09; MNN createSession 之 Schedule&#xff08;三&#xff09; MNN createSession 之创建流水线后端&#xff08;四&#xff09; MNN Session 之维度计算&#xff08;五…

墨菲安全在软件供应链安全领域阶段性总结及思考

向外看&#xff1a;墨菲安全在软件供应链安全领域的一些洞察、思考、行动 洞察 现状&挑战&#xff1a; 过去开发安全体系是无法解决软件供应链安全问题的&#xff1b;一些过去专注开发安全领域的厂商正在错误的引导行业用开发安全思维解决软件供应链安全问题&#xff0c;治…

Linux:详解https协议

文章目录 什么是https协议信息窃取常见的加密数据摘要和数据指纹https的工作过程只使用对称加密只使用非对称加密都使用非对称加密非对称加密对称加密 证书数据签名https方案 本篇要总结的内容是关于https协议的相关内容 什么是https协议 在讲述https协议之前&#xff0c;首先…

Linux镜像文件下载地址--SCAS 开源镜像站,速度快

SCAS 开源镜像站 https://mirror.iscas.ac.cn/举例&#xff1a; 下载centos7 Index of /centos/7/isos/x86_64/ (iscas.ac.cn)

【C++算法】二分算法、二分模板详解,四道例题带详细注释

文章目录 [toc]1&#xff09;整数二分2&#xff09;解二分题步骤AcWing 789.数的范围洛谷 P1873.EKO/砍树洛谷 P1678.烦恼的高考志愿 2&#xff09;浮点二分AcWing 790. 数的三次方根 1&#xff09;整数二分 有单调性的题目一定可以二分&#xff0c;但是用二分做的题目不一定拥…

Linux初学(八)磁盘管理

一、磁盘管理 1.1 简介 磁盘的工作原理&#xff1a; 添加磁盘对磁盘进行分区格式化磁盘挂载和使用磁盘 磁盘的类型&#xff1a; 固态机械 磁盘的接口类型&#xff1a; IDESTSTSCSI 磁盘工作的原理&#xff1a; 磁盘&#xff0c;特别是硬盘&#xff0c;和内存不同&#xff0c;…

【Bug】记录2024年遇到的Bug以及修复方案

--------------------------------------------------------分割线 2024.3.22------------------------------------------------------- 1、load_sample_image raise AttributeError(“Cannot find sample image: %s” % image_name) AttributeError: Cannot find sample ima…

nvidia显卡如何安装cuda驱动

目录 查看显卡对应的cuda版本下载与你显卡匹配的CUDA Toolkit 查看显卡对应的cuda版本 按 微软 R 键&#xff0c;输入cmd 然后输入 nvidia-smi &#xff0c;回车显示下面信息&#xff1a; 看到 CUDA Version 为 12.2 下载与你显卡匹配的CUDA Toolkit 打开网页&#xff1a…

鸿蒙Harmony应用开发—ArkTS-@AnimatableExtend装饰器:定义可动画属性

AnimatableExtend装饰器用于自定义可动画的属性方法&#xff0c;在这个属性方法中修改组件不可动画的属性。在动画执行过程时&#xff0c;通过逐帧回调函数修改不可动画属性值&#xff0c;让不可动画属性也能实现动画效果。 可动画属性&#xff1a;如果一个属性方法在animation…

C++默认构造函数(二)

目录 构造函数补充 构造函数初始化列表的使用 赋值运算符重载函数 运算符重载函数介绍 运算符重载函数的使用 赋值运算符重载函数 赋值运算符重载函数的使用 拷贝构造函数和赋值运算符重载函数 重载前置和后置 前置 后置 重载流插入<<与流提取>> 流插…

C++ 其它

1、内存四区-代码区 2、内存四区-全局区 生成exe后&#xff0c;运行前是代码区和全局区 3、内存四区-栈区 4、内存四区-堆区 5、new *new一个整型10&#xff0c;返回的是该数据类型的指针&#xff0c;所以用int p 所以是int [10]&#xff0c;所以new的是int[10]&#x…

3.23项目:聊天室

1、 基于UDP的网络聊天室 项目需求&#xff1a; 如果有用户登录&#xff0c;其他用户可以收到这个人的登录信息如果有人发送信息&#xff0c;其他用户可以收到这个人的群聊信息如果有人下线&#xff0c;其他用户可以收到这个人的下线信息服务器可以发送系统信息 服务器 #inc…

东方博宜 1469. 数的统计

东方博宜 1469. 数的统计 #include<iostream> using namespace std; int main() {int n ;cin >> n ;int x ;cin >> x ;int cnt ;cnt 0;for (int i 1 ; i < n ; i){int num ;num i ;while(num!0){int g ;g num % 10 ;if (g x)cnt 1 ;num num / 10…

springboot294基于java的火车票订票系统的设计与实现

火车票订票系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装火车票订票系统软件来发挥其高效…

ElasticSearch首次启动忘记密码,更改密码(Windows 10)

先启动ElasticSearch 启动方式cmd到lasticsearch-8.12.2\bin目录下输入elasticsearch 启动成功后新开一个窗口输入elasticsearch-reset-password -u elastic

《剑指 Offer》专项突破版 - 面试题 88 : 动态规划的基础知识(C++ 实现)

目录 前言 面试题 88 : 爬楼梯的最少成本 一、分析确定状态转移方程 二、递归代码 三、使用缓存的递归代码 四、空间复杂度为 O(n) 的迭代代码 五、空间复杂度为 O(1) 的迭代代码 前言 动态规划是目前算法面试中的热门话题&#xff0c;应聘者经常在各大公司的面试中遇到…