【C++起飞之路】初级——缺省参数、函数重载、引用

这篇具有很好参考价值的文章主要介绍了【C++起飞之路】初级——缺省参数、函数重载、引用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、缺省参数🛫

1.1 🚝什么是缺省参数

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

缺省参数使用主要规则:调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数。

👉C++中可以给函数的形参赋值:

【C++起飞之路】初级——缺省参数、函数重载、引用
这就是给函数的参数指定一个缺省值
如果不进行传参,就会直接使用缺省值
如果传参,则使用传过来的参数

1.2 🚝缺省参数的分类

a. 全缺省参数

全缺省参数:所有参数都有缺省值
【C++起飞之路】初级——缺省参数、函数重载、引用规律见图👆
如果要传参,传递的参数从函数第一个参数开始传递,依次传递

我们可能要问了,如果我只想传递第二个参数(跳过前面的参数直接传后面的),行不行呢?
比如:
【C++起飞之路】初级——缺省参数、函数重载、引用 当然是错误的,全缺省传参的时候必须从左往右连续的传,不能 “跳着” 传 !

b. 半缺省参数(部分缺省参数)

半缺省参数:函数中的所有参数最右边往左连续地缺省一部分(当然也可以省一个)

【C++起飞之路】初级——缺省参数、函数重载、引用省了,但没完全省

【C++起飞之路】初级——缺省参数、函数重载、引用

举个栗子:
错误①
【C++起飞之路】初级——缺省参数、函数重载、引用
部分缺省时就不能不传参了

错误②:

【C++起飞之路】初级——缺省参数、函数重载、引用
函数中的所有参数最右边往左连续地缺省
不可以从除倒数第一个参数以外的参数开始缺省:

【C++起飞之路】初级——缺省参数、函数重载、引用

正确用法:

【C++起飞之路】初级——缺省参数、函数重载、引用

1.3 🚝注意事项

    1. 半缺省参数必须从右往左依次来给出,不能间隔着给
    1. 缺省参数不能在函数声明和定义中同时出现
    1. 缺省值必须是 常量或者全局变量
    1. C++可以,但是C语言不支持(编译器不支持)

注意第二点:如果声明与定义中同时缺省,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值

声明时给缺省值,定义的时候不能给

二、函数重载🛫

—— “一词多义” ,即一个函数有多个 “ 意思 ”

2.1 🚝什么是函数重载

定义:如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为重载( overloaded )函数。

函数重载是函数的一种特殊情况

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

注意:
①函数重载不能只有函数返回值类型不同
②main函数不能重载

2.2 🚝演示

比如下面我们定义几个Print函数:
【C++起飞之路】初级——缺省参数、函数重载、引用

这些函数接受的形参类型不一样,但是执行的操作类似。功能相同

当调用这些函数时,编译器会根据传递的实参类型 推断想要的是哪个函数:

【C++起飞之路】初级——缺省参数、函数重载、引用
👉函数的名字仅仅是让编译器知道它调用的是哪个函数

而函数重载可以在一定程度上减轻程序员给函数起名字、记名字的负担。

2.3 🚝用法注意事项

a) 不能只有返回值类型不同

【C++起飞之路】初级——缺省参数、函数重载、引用

b) 类型顺序相同,形参名字不同不构成函数重载

【C++起飞之路】初级——缺省参数、函数重载、引用
要求类型的顺序不同,不是形参名字的顺序

比如:
【C++起飞之路】初级——缺省参数、函数重载、引用
到底应该调用哪一个?
无法确定!
会产生歧义

c) 相同类型数据,顺序不同不构成函数重载

【C++起飞之路】初级——缺省参数、函数重载、引用
与b)类似

b)、c)归结起来就是:形参的名字仅仅起到帮助记忆的作用,有没有它并不影响形参列表的内容

像这样不写形参的名字也是编的过的:
【C++起飞之路】初级——缺省参数、函数重载、引用

2.4🚝 const 形参

顶层const不影响传入函数的对象。

一个拥有顶层const的形参无法和另一个没有顶层const的形参区分开来

比如:

【C++起飞之路】初级——缺省参数、函数重载、引用

第二行重复声明了int Add(int a);


【C++起飞之路】初级——缺省参数、函数重载、引用
第6行重复声明了int Add(int* a);

在这两组函数声明中,每一组的第二个声明和第一个声明是等价的

三、引用🛫

3.1🚝 什么是引用

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

引用即别名:引用并非对象,相反的,它只是为一个已经存在的  对象所起的另外一个名字

语法:类型& 引用变量名(对象名) = 引用实体

📘例如:

	int a = 10;
	int& b = a;

通过调试观察引用跟原来变量的关系↓
【C++起飞之路】初级——缺省参数、函数重载、引用
【C++起飞之路】初级——缺省参数、函数重载、引用
➡印证了概念中所说的:编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间

3.2 🚝引用的定义

允许在一条语句中定义多个引用,其中每个引用标识符都必须以& 开头

int main()
{
	int i = 1024, i2 = 2048;//i和j都是int
	int& r = i, r2 = i2;//r是引用,与i绑定;r2是int
	int i3 = 1024, &ri = i3;//i3是int;ri是引用,与i3绑定
	int& r3 = i3, & r4 = i2;//r3\r4都是引用
	return 0;
}

3.3🚝 特性

a. 在定义时必须初始化

一般在初始化变量的时候,初始值会被拷贝到新建的对象中。But,定义引用时,程序把引用和它的初始值绑定在一起, 而不是将初始值拷贝给引用。

👉👉👉因此,一旦初始化完成,引用就跟它的初始值对象一直绑定在一起,以后就再也分不开了(即无法让这个引用绑定另一个对象了~),故引用必须初始化!【C++起飞之路】初级——缺省参数、函数重载、引用

b. 引用类型的初始值必须是一个对象(不能是常量)

除了两种例外情况,其他所有引用的类型都要和与之绑定的对象严格匹配。What’s more,引用只能绑定在对象上 不能与字面值 or 某个表达式的计算结果绑定在一起
【C++起飞之路】初级——缺省参数、函数重载、引用

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

通俗一点来说,别名可以不只有一个。

就好比孙悟空的别名有孙行者、心猿、金公、斗战胜佛、齐天大圣等等

【C++起飞之路】初级——缺省参数、函数重载、引用对别名取别名也是允许的,例子见《4.1 什么是引用》的第一张图

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

【C++起飞之路】初级——缺省参数、函数重载、引用【C++起飞之路】初级——缺省参数、函数重载、引用

b = x只是赋值而已,b绑定的仍是a(并不是让 b 变成 x 的别名

3.4🚝 常引用

a. const 修饰的常变量

	const int a = 10;
	int& ra = a; 
	const int& cra = a;//正确

【C++起飞之路】初级——缺省参数、函数重载、引用【C++起飞之路】初级——缺省参数、函数重载、引用加了const限定,使得 a 不能被修改(权限为“ 只读 ”),那么a的引用也不可以被修改。a 权限是只读,但是引用 ra 没有加const修饰,权限为“ 可读可写 ”(a的引用权限放大了,会报错)

所以可以使ra的权限变成和 a 相同的,即加上 const 修饰 ra (见上图),就可以消除这个error了

b. 常量

	int& b = 10; // 该语句编译时会出错,b为常量
	const int& rb = 10;//正确

【C++起飞之路】初级——缺省参数、函数重载、引用解释跟a. const 修饰的常变量类似

c. 不同类型

	double d = 12.34;
	int& rd = d; // 该语句编译时会出错,类型不同
	const int& rd = d;//会给出警告,但不是error

【C++起飞之路】初级——缺省参数、函数重载、引用double变int会丢失精度

3.5🚝 引用与指针的区别

语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。

【C++起飞之路】初级——缺省参数、函数重载、引用

这里我们不需要理解引用底层的实现(引用的底层其实也是用指针实现的)
只明确引用不开辟空间就行了

引用和指针的不同点:文章来源地址https://www.toymoban.com/news/detail-445397.html

    1. 引用概念上定义一个变量的别名,指针存储一个变量地址
    1. 引用在定义时必须初始化,指针没有要求
    1. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何
      一个同类型实体
    1. 没有NULL引用,但有NULL指针
    1. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32
      位平台下占4个字节)
    1. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
    1. 有多级指针,但是没有多级引用
    1. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
    1. 引用比指针使用起来相对更安全

到了这里,关于【C++起飞之路】初级——缺省参数、函数重载、引用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ 命名空间、域、缺省参数、函数重载、引用、auto、内联函数的知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏

            从本章开始我们正式进入到C++的内容,对此如果没有学习过C语言的建议先将C语言系统的学习一遍后再来(已经更新完在专栏就能看到)。 话不多说安全带系好,发车啦 (建议电脑观看) 。 附:红色,部分为重点部分;蓝颜色为需要记忆的部分(不是死记硬背哈,

    2023年04月24日
    浏览(98)
  • 计算机语言 之【C++】入门级知识讲解(命名空间,C++输入输出,缺省参数,函数重载,引用,内敛函数,auto关键字,for循环,指针空值nullptr)

    三点睡六点起,阎王夸我好身体 不到三点我不睡,太平间里抢C位 目录: 前言: 本片博客是以学习过C语言之后进入C++学习为前提,讲解C++入门级知识,为C++之后的学习做铺垫 –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀

    2024年04月11日
    浏览(129)
  • 【C++】入门 --- 缺省参数&函数重载

    缺省参数是声明或定义函数时 为函数的参数指定一个缺省值 。 在调用该函数时, 如果没有指定实参则采用该形参的缺省值 ,否则使用指定的实参。 🌰举个栗子👇 🚨 注意: 缺省值(函数形参的默认值)不能同时在函数声明和函数定义中给出(缺省参数不能在函数声明和定义

    2024年02月15日
    浏览(35)
  • 【C++】缺省参数与函数重载

    👀樊梓慕: 个人主页  🎥 个人专栏: 《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》 🌝 每一个不曾起舞的日子,都是对生命的辜负 本篇文章博主将带你学习 缺省参数 与 函数重载 ,一些需要注意的点博主都会特别标注以便大家学习。 欢

    2024年02月08日
    浏览(32)
  • C++入门:函数缺省参数与函数重载

    目录 1.函数缺省参数 1.1 缺省参数概念 1.2 缺省参数分类 2.函数重载 2.1 函数重载概念 2.2 C++支持函数重载的原理 缺省参数是 声明或定义函数时 为函数的 参数指定一个缺省值 。在调用该函数时,如果没有指定实 参则采用该形参的缺省值,否则使用指定的实参,有点备胎的意

    2024年02月12日
    浏览(32)
  • 【初识C++】(缺省参数和函数重载)

    缺省参数是在函数的声明中给定参数一个指定的值。 如果传参没有给定参数,那就按照声明中默认的缺省值,如果给定了参数,那就按照给定的参数值。 比如: 对于Func函数如果没有给定参数,那就按照默认的缺省值来赋值。如果给定了参数,那就按照给定的参数进行赋值。

    2024年02月01日
    浏览(33)
  • 【C++初阶(二)】缺省参数&函数重载

    目录 前言 1. 缺省参数  1.1 什么是缺省参数  1.2 缺省参数的分类      1.2.1 全缺省参数  1.2.2 半缺省参数 2. 函数重载  2.1 什么是函数重载  2.2 缺省参数与函数重载  2.3 函数重载的使用  3. C++支持函数重载的原因  总结         在学习C语言时我们就会发现,C语言中存在的

    2024年02月07日
    浏览(33)
  • 【C++初阶】缺省参数与函数重载

        C++祖师爷在用C写代码的时候,就觉得有些地方用着很不方便,于是就在C++设计了缺省参数,在实现一些功能时,用这个就方便了许多。 缺省参数是声明或定义函数时为 函数的参数指定一个缺省值 。在调用该函数时:             a.如果没有指定实参则采用该形参的缺省

    2023年04月22日
    浏览(49)
  • 【C++初阶】C++入门——缺省参数、函数重载

     缺省参数是 声明或定义函数时为函数的参数指定一个缺省值 。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。  上面代码在 fun 函数的形参部分给了缺省值10,这意味着在调用 fun 函数的时候可以传参,也可以不传参,如果传参了那形参

    2024年02月11日
    浏览(37)
  • C++中命名空间、缺省参数、函数重载

    目录 1.命名空间 2.缺省参数 3.函数重载 在C++中定义命名空间我们需要用到namespace,后面跟上命名空间的名字,结构框架有点类似结构体(如图所示) 上面的代码我一一进行讲解: 1.我们先来说第三行和main函数中的代码意思,第三行代码的意思是展开std库的空间,std是

    2024年01月23日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包