C/C++编程笔记:C++入门知识,深入解析C++函数和函数模板
本篇要学习的内容和知识结构概览

文章图片
函数的参数及其传递方式1.函数参数传递方式传值:
传变量值:将实参内存中的内容拷贝一份给形参,两者是不同的两块内存
传地址值:将实参所对应的内存空间的地址值给形参,形参是一个指针,指向实参所对应的内存空间
传引用:
形参是对实参的引用,形参和实参是同一块内存空间
2.对象作为函数参数,也就是传变量值将实参对象的值传递给形参对象,形参是实参的备份,当在函数中改变形参的值时,改变的是这个备份中的值,不影响原来的值
像这样:

文章图片
3.对象指针作为函数参数,也就是传地址值形参是对象指针,实参是对象的地址值,虽然参数传递方式仍然是传递方式,因为形参和实参的地址值一样,所以它们都指向同一块内存,我们通过指针更改所指向的内存中的内容,所以当在函数中通过形参改变内存中的值时,改变的就是原来实参的值
像这样:

文章图片
对于数组,因数组名就是代表的数组首地址,所以数组也能用传数组地址值的方式

文章图片
4.引用作为函数参数,也就是传地址(注意:这里不是地址值)【C/C++编程笔记:C++入门知识,深入解析C++函数和函数模板】在函数调用时,实参对象名传给形参对象名,形参对象名就成为实参对象名的别名.实参对象和形参对象代表同一个对象,所以改变形参对象的值就是改变实参对象的值
像这样:

文章图片
优点:引用对象不是一个独立的对象 , 不单独占内存单元,而对象指针要另外开辟内存单元(内存中放实参传过来的地址) , 所以传引用比传指针更好用 。
5.默认参数不要求程序在调用时必须设定该参数,而由编译器在需要时给该参数赋默认值.
规则1:当程序需要传递特定值时需要显式的指明.默认参数必须在函数原型中说明.
如果函数在main函数后面定义,而在声明中设置默认参数,在定义中不需要设置默认参数
像这样:

文章图片
如果函数在main函数前面定义,则在定义中设置默认参数
像这样:

文章图片
规则2:默认参数可以多于一个 , 但必须放在参数序列的后部 。
像这样:
可以有一个默认参数:voidPrintValue(inta,intb,intc=0);
可以是有多个默认参数:voidPrintValue(inta,intb=0,intc=0);
不可以在中间设置默认参数:voidPrintValue(inta,intb=0,intc);
规则3:如果一个默认参数需要指定一个特定值时 , 则在此之前的所有参数都必须赋值

文章图片
6.使用const保护数据用const修饰要传递的参数,该函数只能使用参数,而无权修改参数,以提高系统的自身安全.
像这样:

文章图片
函数返回值C++函数返回值类型可以是除数组和函数以外的任何类型
当返回值是指针或引用对象时,需要注意函数返回值所指的对象必须存在,因此不能将函数内部的局部对象作为函数返回值,因为函数内,局部变量或者对象在函数运行完毕后内存就释放了
1.返回引用的函数函数可以返回一个引用,目的是为了让该函数位于赋值运算符的左边
格式:数据类型&函数名(参数列表)
像这样:

文章图片
2.返回指针的函数返回值是存储某种数据类型数据的内存地址,这种函数称为指针函数
格式:数据类型*函数名(参数列表)
像这样:

文章图片
3.返回对象的函数格式:数据类型函数名(参数列表)
像这样:

文章图片
4.函数返回值作为函数参数如果函数返回值作为另一个函数的参数,那么这个返回值必须与另一个函数的参数类型一致
像这样:

文章图片
内联函数1.内联函数的概念使用关键字inline声明的函数称为内联函数,内联函数必须在程序中第一次调用此函数的语句出现之前定义,这样编译器才知道内联函数的函数虚,然后进行替换
像这样:

文章图片
2.注意在C++中,除具有循环语句,switch语句的函数不能说明为内联函数外,其它函数都可以说明为内联函数.
3.作用使用内联函数可以提高程序执行速度,但如果函数体语句多,则会增加程序代码量.
函数重载和默认参数1.函数重载一个函数名具有多种功能,具有多种形态,称这种我为多态性,一个名字,多个函数
函数重载要满足的条件:
参数类型不同或者参数个数不同
像这样:

文章图片
2.函数重载与默认参数当函数重载与默认参数相结合时,能够有效减少函数个数及形态,缩减代码规模.
这样我们每种数据类型只保留一个函数即可完成我们的功能,直接少了两个函数.
像这样:

文章图片
如果使用默认参数,就不能对参数个数少于默认个数的函数形态进行重载,只能对于多于默认参数个数的函数形态进行重载.
像这样:

文章图片
函数模板从而上面可以看出,它们是逻辑功能完全一样的函数,所提供的函数体也一样,区别仅仅是数据类型不同,为了统一的处理它们,引入了函数模板.
现在我们的函数从4个缩减成一个,但是我们的功能没有减少,反而增加了.比如我们可以计算char,float类型
1.什么是函数模板在程序设计时没有使用实际存在的类型,而是使用虚拟的参数参数,故其灵活性得到加强.
当用实际的类型来实例化这种函数时,就好像按照模板来制造新的函数一样,所以称为函数模板
格式:一般用T来标识类型参数,也可以用其它的
Template
像这样:

文章图片
当应用函数模板与具体的数据类型连用时,就产生了模板函数,又称为函数模板实例化
2.函数模板的参数函数模板名<模板参数>(参数列表)
我们可以将参数列表的数据强制转换为指定的数据类型
像这样:intsumValue2=sumWithValue(3.2,5.1)
我们将参数列表里的数据强制转换为int类型,再参与计算
也可以样:doublesumValue2=sumWithValue(3.2,(double)5)
我们也可以将参数列表里的单个参数进行强制类型转换,再参与计算
不过我们一般不会加上模板参数.
3.使用关键字typename用途就是代替template参数列表中的关键字class
像这样
template
只是将class替换为typename,其它一样使用.
强烈建议大家使用typename,因为它就是为模板服务的,而class是在typename出现之前使用的,它还有定义类的作用,不直观,也会在一些其它地方编译时报错.
总结:
可能对于初学者来说,函数有点不是很好理解,包括我当初也是,不要想得过于复杂,其实它就是一段有特定功能的代码,只不过我们给这段代码起了个名字而已,这样就会提高代码的可读性和易维护性 。
自学C/C++编程难度很大 , 不妨和一些志同道合的小伙伴一起学习成长!
【来源:编程小火车】
声明:转载此文是出于传递更多信息之目的 。 若有来源标注错误或侵犯了您的合法权益 , 请作者持权属证明与本网联系 , 我们将及时更正、删除 , 谢谢 。 邮箱地址:newmedia@xxcb.cn
推荐阅读
- 数评时代|华为最强笔记本将出:无风扇超轻薄双触控,看看还有哪些新品
- 2020年Q2笔记本电脑出货量猛增,我国今年新增超20万家电脑相关企业,4月最多
- TOPWOMEN时髦笔记|现在元气少女都这么搭!干净又日常,想要减龄时尚必须get
- 邓超|还是如此搞笑!邓超用可擦拭的笔记录日常,阳光暴晒后全消失
- 苹果笔记本|macOS体验:是什么,使MacBook那么不一样
- 少儿编程Scratch第三讲,反弹回力球,附带程序
- 娜姐的光影笔记|聊聊王菲(一):原生家庭、性格底色和唱歌天赋
- 惠普|第二季度笔记本出货量暴增 惠普成最大赢家
- 华为|华为鸿蒙2.0来了!手表/笔记本/平板都有戏 手机悬了
- 份额|2020Q2全球笔记本出货量上涨27%, 联想惠普占比50%
