欧易

欧易(OKX)

国内用户最喜爱的合约交易所

火币

火币(HTX )

全球知名的比特币交易所

币安

币安(Binance)

全球用户最多的交易所

C/C++编程笔记:C++入门知识,深入解析C++函数和函数模板

时间:2022-10-09 17:53:19 | 浏览:1612

本篇要学习的内容和知识结构概览函数的参数及其传递方式1. 函数参数传递方式传值:传变量值: 将实参内存中的内容拷贝一份给形参, 两者是不同的两块内存传地址值: 将实参所对应的内存空间的地址值给形参, 形参是一个指针, 指向实参所对应的内存空

本篇要学习的内容和知识结构概览


函数的参数及其传递方式

1. 函数参数传递方式

传值:

传变量值: 将实参内存中的内容拷贝一份给形参, 两者是不同的两块内存

传地址值: 将实参所对应的内存空间的地址值给形参, 形参是一个指针, 指向实参所对应的内存空间

传引用:

形参是对实参的引用, 形参和实参是同一块内存空间

2. 对象作为函数参数, 也就是传变量值

将实参对象的值传递给形参对象, 形参是实参的备份, 当在函数中改变形参的值时, 改变的是这个备份中的值, 不影响原来的值

像这样:


3. 对象指针作为函数参数, 也就是传地址值

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

像这样:


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


4. 引用作为函数参数, 也就是传地址(注意: 这里不是地址值)

在函数调用时, 实参对象名传给形参对象名, 形参对象名就成为实参对象名的别名. 实参对象和形参对象代表同一个对象, 所以改变形参对象的值就是改变实参对象的值

像这样:


优点: 引用对象不是一个独立的对象,不单独占内存单元, 而对象指针要另外开辟内存单元(内存中放实参传过来的地址),所以传引用比传指针更好用。

5. 默认参数

不要求程序在调用时必须设定该参数, 而由编译器在需要时给该参数赋默认值.

规则1:当程序需要传递特定值时需要显式的指明. 默认参数必须在函数原型中说明.

如果函数在main函数后面定义, 而在声明中设置默认参数, 在定义中不需要设置默认参数

像这样:


如果函数在main函数前面定义, 则在定义中设置默认参数

像这样:


规则2:默认参数可以多于一个,但必须放在参数序列的后部。

像这样:

可以有一个默认参数:void PrintValue(int a, int b, int c = 0);

可以是有多个默认参数:void PrintValue(int a, int b = 0, int c = 0);

不可以在中间设置默认参数:void PrintValue(int a, int b = 0, int c);

规则3:如果一个默认参数需要指定一个特定值时,则在此之前的所有参数都必须赋值


6. 使用const保护数据

用const修饰要传递的参数, 该函数只能使用参数, 而无权修改参数, 以提高系统的自身安全.

像这样:


函数返回值

C++函数返回值类型可以是除数组和函数以外的任何类型

当返回值是指针或引用对象时, 需要注意函数返回值所指的对象必须存在, 因此不能将函数内部的局部对象作为函数返回值, 因为函数内, 局部变量或者对象在函数运行完毕后内存就释放了

1. 返回引用的函数

函数可以返回一个引用, 目的是为了让该函数位于赋值运算符的左边

格式: 数据类型 & 函数名(参数列表);

像这样:


2. 返回指针的函数

返回值是存储某种数据类型数据的内存地址, 这种函数称为指针函数

格式: 数据类型 * 函数名(参数列表);

像这样:


3. 返回对象的函数

格式: 数据类型 函数名(参数列表);

像这样:


4. 函数返回值作为函数参数

如果函数返回值作为另一个函数的参数, 那么这个返回值必须与另一个函数的参数类型一致

像这样:


内联函数

1. 内联函数的概念

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

像这样:


2. 注意

在C++中, 除具有循环语句, switch语句的函数不能说明为内联函数外, 其它函数都可以说明为内联函数.

3. 作用

使用内联函数可以提高程序执行速度, 但如果函数体语句多, 则会增加程序代码量.

函数重载和默认参数

1. 函数重载

一个函数名具有多种功能, 具有多种形态, 称这种我为多态性, 一个名字, 多个函数

函数重载要满足的条件:

参数类型不同或者参数个数不同

像这样:


2. 函数重载与默认参数

当函数重载与默认参数相结合时, 能够有效减少函数个数及形态, 缩减代码规模.

这样我们每种数据类型只保留一个函数即可完成我们的功能, 直接少了两个函数.

像这样:


如果使用默认参数, 就不能对参数个数少于默认个数的函数形态进行重载, 只能对于多于默认参数个数的函数形态进行重载.

像这样:


函数模板

从而上面可以看出, 它们是逻辑功能完全一样的函数, 所提供的函数体也一样, 区别仅仅是数据类型不同, 为了统一的处理它们, 引入了函数模板.

现在我们的函数从4个缩减成一个, 但是我们的功能没有减少, 反而增加了. 比如我们可以计算char, float类型

1. 什么是函数模板

在程序设计时没有使用实际存在的类型, 而是使用虚拟的参数参数, 故其灵活性得到加强.

当用实际的类型来实例化这种函数时, 就好像按照模板来制造新的函数一样, 所以称为函数模板

格式: 一般用T来标识类型参数, 也可以用其它的

Template <class T>

像这样:


当应用函数模板与具体的数据类型连用时, 就产生了模板函数, 又称为函数模板实例化

2. 函数模板的参数

函数模板名<模板参数>(参数列表);

我们可以将参数列表的数据强制转换为指定的数据类型

像这样:int sumValue2 = sumWithValue<int>(3.2, 5.1);

我们将参数列表里的数据强制转换为int类型, 再参与计算

也可以样:double sumValue2 = sumWithValue(3.2, (double)5);

我们也可以将参数列表里的单个参数进行强制类型转换, 再参与计算

不过我们一般不会加上模板参数.

3. 使用关键字typename

用途就是代替template参数列表中的关键字class

像这样

template <typename T>

只是将class替换为typename, 其它一样使用.

强烈建议大家使用typename, 因为它就是为模板服务的, 而class是在typename出现之前使用的, 它还有定义类的作用, 不直观, 也会在一些其它地方编译时报错.

总结:

可能对于初学者来说, 函数有点不是很好理解, 包括我当初也是, 不要想得过于复杂, 其实它就是一段有特定功能的代码, 只不过我们给这段代码起了个名字而已, 这样就会提高代码的可读性和易维护性。

自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!

C语言C++编程学习交流圈子,关注+私信【C/C++编程】微信公众号:C语言编程学习基地

有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!

相关资讯

编程和乐高机器人啥关系、编程启蒙到底怎么做|逃妈说编程(下)

于是快马加鞭地赶出了下篇。 其实本来写完上篇后我脑袋里对下篇的框架已经有了大概的构思。但后来从文章的留言,读者微信群里的讨论,以及大家私下给平台小助手、给我发的微信留言中发现,“咦,原来大家最关心的问题跟我之前的设想还是有点儿出入哦~”。于

少儿编程热,需要冷思考编程培训需要来次“编程”

少儿编程热,需要冷思考(大家谈)在不少城市,少儿编程课外培训日渐火爆。很多人认为,作为数字世界的通用语言,学习编程能有效锻炼孩子的思维能力。但也有人提出问题:受理解力所限,幼儿园阶段就送孩子学编程是否符合教育规律?出于“莫输在起跑线上”的心

C/C++编程笔记:C++入门知识,深入解析C++函数和函数模板

本篇要学习的内容和知识结构概览函数的参数及其传递方式1. 函数参数传递方式传值:传变量值: 将实参内存中的内容拷贝一份给形参, 两者是不同的两块内存传地址值: 将实参所对应的内存空间的地址值给形参, 形参是一个指针, 指向实参所对应的内存空

收藏▏全网最全解析,少儿编程到底学的是什么?

说起少儿编程,想必很多家长都有所耳闻。近几年,受国家政策和市场资本推动,少儿编程日渐火爆。越来越多的家长选择让孩子接触并深入学习,但依旧有很多家长对此了解甚微,甚至有很多家长认为,少儿编程就是教孩子们敲代码。关于这一点,我们认为有必要和家长

少儿编程全面解析,你想知道的都在这里

近年来,互联网的快速发展,大大方便了我们的生活,不仅仅是衣食住行,还衍生了线上兴趣班,小朋友在家,通过手机、电脑就可以培养自己的兴趣,爸爸妈妈、爷爷奶奶既不用奔忙于接送孩子,还能陪伴孩子一起学习。而随着人工智能在我们生活中的逐渐渗透,少儿编

孩子应不应该学编程,编程的优缺点要知道,孩子才能真正学以致用

孩子成长中的每一件事都不是小事,成长是一次没有返航的旅程。家长为了孩子能够长成参天大树,会带孩子学各种各样的知识,少儿编程便成为了很多家长的心头好。对于编程课,你了解多少但是很多家长并不知道孩子适不适合学习编程,也不知道编程是什么?就知道学

少儿编程培训值得吗?业内老师:跟真正编程两码事

少儿编程越来越火,从一线城市到二三线城市,编程培训机构如雨后春笋般涌现。少儿编程培训为什么这么火?家长们的“狂热”究竟值不值得?家长:人工智能是趋势,希望孩子早接触“机器人课程确实挺贵的,一下子就交了1万5左右的套餐费,每次课大概160元左

少儿编程十大培训机构有哪些?少儿编程课程怎么选?课程全面测评

这两年,少儿编程越来越火了,不少地区已将它纳入中小学教育。不少国家的政策将少儿编程以及人工智能编入了教育学习项目,甚至浙江编程是高考选考科目,各位宝妈们都处处欲动,很重视孩子的编程教育。想必很多家长在给孩子选课的路程多少经历了很久,那么小编

C/C++编程笔记:C语言编程知识要点总结!大一C语言知识点(全)

一、C语言程序的构成与C++、Java相比,C语言其实很简单,但却非常重要。因为它是C++、Java的基础。不把C语言基础打扎实,很难成为程序员高手。1、C语言的结构先通过一个简单的例子,把C语言的基础打牢。C语言的结构要掌握以下几点:(1

C/C++,被誉为“最经典的编程语言”,不仅是因为编程入门需要学

1、从C到C++计算机诞生初期,用机器语言或汇编语言编写程序;第一种高级语言FORTRAN诞生于1954年;BASIC语言(1964)是由FORTRAN语言的简化而成的是为初学者设计的小型高级语言;C语言是1972年由美国贝尔实验室的 D.

编程入门:编程语言(Java、C++)先学那个好?

这个问题在入门阶段一直是争议十分大的问题,反正学长每次去网上找新手应该学什么编程语言的时候,就会出现五花八门的推荐,n多语言,n多推荐,搞的新手一会听说这种语言适合新手,于是学习这种语言。一会又有人说xx语言是垃圾、弱爆了,学了也没用,之类

编程入门:如何正确认识编程?除了高薪,我再告诉你一些秘密

假期在家待得怎么样?是不是天天过着衣来伸手饭来张口的日子,当然也时常伴随着妈妈的“嫌弃”和“唠叨”?哈哈~文章来源:博学谷接下来,丫姐跟你说一件丫姐在过年期间发生的有意思的事儿:小侄子:姑姑,你会不会编程?我答:会啊...小侄子:那你教教我

编程语言盘点:2021年程序员五大编程语言!C++不在其中?

选择第一门语言是非常重要的,因为这是搭建基础的开始,自此以后我们会逐渐走进并了解编程世界。但老实说,选择哪一种编程语言并不十分重要,重要的是我们需要掌握它,并用它来提高自己解决问题和开发的能力。此后,要再从一种语言切换到另一种语言就会变得轻

编程:史上最全的计算机编程语言列表来了!你不进来了解一下吗?

计算机编程语言可用于将指令传达给计算机。它们基于某些句法和语义规则,定义了编程语言中每种结构的含义。现在我得到了一个凡是可以找得到的每种编程语言的列表。我将它们分为以下几类:解释型编程语言函数式编程语言编译型编程语言过程式编程语言脚本编程语

初学编程:C语言/C++编程新手入门学习方法及书籍推荐

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样

友情链接

网址导航 SEO域名抢注宝宝起名网妈妈知道币圈丁程鑫歌迷网今日济南十万大山温泉网凯迪拉克汽车网潜水运动青海旅游网自行车之家钢管舞培训网万科A股邵阳新闻头条网百魔洞旅游网芬迪奢侈品金毛寻回犬资讯网西贝vip会员网马宝宝取名起名网
Java编程学习网-java零基础自学、java新手入门菜鸟必学、电脑编程入门自学、java安装教程详细、java新手编程入门、前端刷题网站、java开发工程师、前端刷题小程序、java入门基础知识、java新手代码大全、编程题库网站、java程序员刷题软件、编程入门自学网站、java题库网站、java新手刷题网站。
Java编程学习网 yaliandai.cn ©2022-2028版权所有