【第2章 开始学习C++】函数

news2024/11/30 8:52:11

文章目录

  • 导语
  • 使用有返回值的函数
  • 函数变体
  • 用户定义的函数
  • 用户定义的有返回值的函数

导语

函数用于创建 C++ 程序的模块, 对 C++ 的 OOP 定义至关重要。

C++ 函数分两种: 有返回值的和没有返回值的。

使用有返回值的函数

有返回值的函数将生成一个值, 而这个值可赋给变量或在其他表达式中使用。

在这里插入图片描述

表达式 sqrt(6.25) 将调用 sqrt( ) 函数。 表达式 sqrt(6.25) 被称为函数调用, 被调用的函数叫做被调用函数, 包含函数调用的
函数叫做调用函数。

在这里插入图片描述

参数是发送给函数的信息, 返回值是从函数中发送回去的值。

在这里插入图片描述

在使用函数之前, C++ 编译器必须知道函数的参数类型和返回值类型。C++ 提供这种信息的方式是使用函数原型语句。

C++ 程序应当为程序中使用的每个函数提供原型。函数原型之于函数就像变量声明之于变量—指出涉及的类型。

sqrt() 的函数原型像这样:

在这里插入图片描述

第一个 double 意味着 sqrt() 将返回一个 double 值。 括号中的 double 意味着 sqrt() 需要一个 double 参数。

原型结尾的分号表明它是一条语句, 这使得它是一个原型, 而不是函数头。 如果省略分号, 编译器将把这行代码解释为一个函数头, 并要求接着提供定义该函数的函数体。

在程序中使用 sqrt() 时, 也必须提供原型。 可以用两种方法来实现:

  • 在源代码文件中输入函数原型;
  • 包含头文件 cmath(老系统为 math.h) , 其中定义了原型

不要混淆函数原型和函数定义。 原型只描述函数接口。它描述的是发送给函数的信息和返回的信息。 而定义中包含了函数的代码, 如计算平方根的代码。 C 和 C++ 将库函数的这两项特性(原型和定义) 分开了。 库文件中包含了函数的编译代码, 而头文件中则包含了原型。

C++库函数存储在库文件中。 编译器编译程序时, 它必须在库文件搜索您使用的函数。

函数变体

有些函数需要多项信息。 这些函数使用多个参数, 参数间用逗号分开。

在这里插入图片描述
数学函数 pow() 接受两个参数, 返回值为以第一个参数为底, 第二个参数为指数的幂。

另外一些函数不接受任何参数。

在这里插入图片描述
关键字 void 明确指出, 该函数不接受任何参数。 如果省略 void, 让括号为空, 则 C++ 将其解释为一个不接受任何参数的隐式声明。

在 C++ 中, 函数调用中必须包括括号, 即使没有参数。

还有一些函数没有返回值。

在有些语言中, 有返回值的函数被称为函数(function) ; 没有返回值的函数被称为过程(procedure) 或子程序(subroutine) 。 但 C++ 与 C 一样, 这两种变体都被称为函数。

用户定义的函数

每个 C++ 程序都必须有一个 main( ) 函数, 用户必须对它进行定义。

假设需要添加另一个用户定义的函数。 和库函数一样, 也可以通过函数名来调用用户定义的函数。

对于库函数, 在使用之前必须提供其原型, 通常把原型放到 main( ) 定义之前。 但现在您必须提供新函数的源代码。 最简单的方法是, 将代码放在 main( ) 的后面。

函数格式

在这里插入图片描述
C++ 不允许将函数定义嵌套在另一个函数定义中。 每个函数定义都是独立的, 所有函数的创建都是平等的。

函数头

在这里插入图片描述

开头的 void 表明 simon( ) 没有返回值, 因此调用 simon( ) 不会生成可在 main( ) 中将其赋给变量的数字。

在这里插入图片描述
空括号(其中可以包含 void) 表明, main( ) 没有参数。 对于有返回值的函数, 应使用关键字
return 来提供返回值, 并结束函数。

main( ) 返回一个 int 值, 而程序员要求它返回整数 0。 但可能会产生疑问, 将这个值返回到哪里了呢?

计算机操作系统(如UNIX或Windows) 看作调用程序。 因此, main( ) 的返回值并不是返回给程序的其他部分, 而是返回给操作系统。 很多操作系统都可以使用程序的返回值。 例如, UNIX外
壳脚本和Windows命令行批处理文件都被设计成运行程序, 并测试它们的返回值(通常叫做退出值) 。 通常的约定是, 退出值为 0 则意味着程序运行成功, 为非零则意味着存在问题。

用户定义的有返回值的函数

return 后面并非一定得跟一个简单的数字。 也可以通过使用较为复杂的表达式, 避免了创建一个新变量, 将结果赋给该变量, 然后将它返回。

在这里插入图片描述

在可以使用一个简单常量的地方, 都可以使用一个返回值类型与该常量相同的函数。

在这里插入图片描述

函数原型描述了函数接口, 即函数如何与程序的其他部分交互。 参数列表指出了何种信息将被传递给函数, 函数类型指出了返回值的类型。
在这里插入图片描述

函数特性:

  • 有函数头和函数体
  • 接受一个参数
  • 返回一个值
  • 需要一个原型

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

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

相关文章

MySQL SELECT 查询(二):复杂查询的实现

MySQL SELECT 查询(二):复杂查询的实现 文章目录 MySQL SELECT 查询(二):复杂查询的实现1. 多表查询1.1 常见错误:笛卡尔积与属性归属1.2 连接条件与规范1.3 连接类型1.4 SQL99 连接特性 2. SQL…

C++红黑树(简单易懂)

C红黑树 红黑树红黑树的概念 红黑树节点的定义红黑树的插入颜色变化红黑树的插入拷贝构造红黑树的验证全部代码实现红黑树与AVL树的比较红黑树的应用 🌏个人博客主页:个人主页 红黑树 红黑树的概念 红黑树,是一种二叉搜索树,但在…

Java并发 - 线程池

文章目录 总体设计常见线程池FixedThreadPoolCachedThreadPoolSingleThreadPoolThreadPoolExecutor 核心参数工作原理生产者消费者模型创建线程池提交任务任务提交方式任务提交流程executeaddWorker Worker队列线程运行 runWoker获取任务销毁工作线程线程池关闭shutdown/shutdo…

维修数据屏:重塑热力公司运维管理新格局

在热力公司的运维管理中,高效的报修和维修流程是确保系统稳定运行的关键。随着科技的发展,维修数据屏的出现为热力公司的运维工作带来了重大变革。 一、传统热力运维面临的挑战 过去,热力公司在报修和维修方面存在诸多问题,给运维…

基于Java的超市管理系统(源码+定制+解答)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

创建包含可导入浏览器信任的SSL自签名证书

问题:现在的三大浏览器,chrome、edge、firefox 一般都默认启用https检查,这就要求我们自建的局域网内的网址和其他诸如nextcloud、photoprism、tiddlywiki等应用也必须要有证书。解决方法是使用openssl自己生成一个。由此则会再衍生出一个问题…

哪款宠物空净运行吸毛好、噪音小?希喂、霍尼韦尔、安德迈测评!

作为宠物领域目前最火热的产品,宠物空气净化器的讨论度一直很高。身为铲屎官的我在产品刚出的时候就购入了一台,结果让我非常失望! 抛开产品效果不提,它运行起来的声音实在太大了!我家猫根本不愿意靠近,每…

定焦镜头可以改变焦距吗?

1、问题背景 焦距是镜头的一个固有光学特性,和镜头设计相关,所谓定焦镜头,焦距肯定是固定不变的。 但有个问题一直有点疑惑,焦距是镜头中心到焦点的距离,当我们拧动镜头调焦的过程,就是为了使得焦点成像在传…

信息安全保障人员认证(CISAW)全攻略

由中国网络安全审查认证和市场监管大数据中心耗时六年,汇聚业界专家、企业翘楚、高校及研究机构学者共同精心打磨而成的针对信息安全保障的不同专业技术方向、应用领域和保障岗位,依循国际标准 ISO/IEC 17024《人员认证机构通用要求》所构建的、多层次的…

LabVIEW提高开发效率技巧----减少UI更新频率

在LabVIEW开发中,图形化用户界面(UI)的更新频率对程序的响应速度有着显著影响。频繁的UI更新会占用大量资源,导致系统性能下降。本文将详细介绍如何通过减少UI更新频率来提升LabVIEW程序的运行效率,从多个角度进行分析…

TCP/UDP通信协议

TCP通讯时序 下图是一次TCP通讯的时序图。TCP连接建立断开。包含大家熟知的三次握手和四次挥手。 在这个例子中,首先客户端主动发起连接(connet)、发送请求,然后服务器端响应请求,然后客户端主动关闭连接。两条竖线表…

多功能校准仪怎么进行计量校准?

多功能校准仪计量校准是计量行业常会进行的一种校准,因为其多功能校准仪的普遍适用性,以及其计量校准技术也是在行业内比较通用,那么具体多功能校准仪计量校准怎么进行呢? 校准方法 一、在多功能校准仪的输出范围内,布…

观察者模式的思考

观察者模式由来 观察者模式(Observer Pattern)是一种行为型设计模式,它的起源可以追溯到20世纪90年代初,由设计模式四人帮(Erich Gamma, Richard Helm, Ralph Johnson 和 John Vlissides)在其著作《设计模…

反走样算法(MSAA、TAA、FXAA、DLSS)

光栅化的采样过程会导致图形走样,走样有很多种形式: 锯齿 摩尔纹 走样的本质原因是采样速度跟不上信号变化的速度 采样频率低,使得我们将连续变化的信号离散化. 反走样方法 anti-alisaing MSAA 多重采样反走样 超采样 优点: 对几何反走样效果良好 缺点…

razor TagHelper 汇总、HtmlHelper 汇总

Tag Helper Tag Helpers 的范围由 addTagHelper 和 removeTagHelper 进行控制&#xff0c;并且 “!” 为退出字符。 addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers // 手动高亮 asp-for 》》 Label <label asp-for"userName"></label>》》生…

你的炼丹炉选对GPU卡了吗?

现在抢GPU卡搞智算、搞AI模型训练的都太火了。 无论你是一个游戏爱好者还是一个赛博炼丹师&#xff08;大模型训练&#xff09;&#xff0c;英伟达GPU卡选型都将是绕不过的一道命题。 那么重点来了&#xff0c;如何在琳琅满目的各种型号GPU卡中选取一款合适且性价比高的呢&…

zookeeper实现RMI服务,高可用,HA

这可不是目录 1.RMI原理与说明1.1含义1.2流程1.3rmi的简单实现1.4RMI的局限性 2.zookeeper实现RMI服务&#xff08;高可用、HA&#xff09;2.1实现原理2.2高可用分析2.3zookeeper实现2.3.1代码分析2.3.2公共部分2.3.3服务端2.3.4客户端2.3.5运行与部署2.3.6效果展示与说明 1.RM…

Spring Boot: 构建高效中小型医院网站

1 绪论 1.1研究背景 随着计算机技术的成熟、普及&#xff0c;现代信息技术革命的迅猛发展,正冲击并进而改变着经济和社会结构。信息化的程度已经成为一个国家&#xff0c;一个企业&#xff0c;一个组织仍至一个人发展的基础和竞争成败的关键。 在实际的生活中&#xff0c;用户都…

软件评测CNAS资质获取流程

软件评测实验室如有意向申请 CNAS 检验机构认可&#xff0c;首先需要依据 CNAS 的认可准则建立管理体系&#xff0c;正式运行6个月以上&#xff0c;自我评估满足 CNAS 认可条件后可向 CNAS 提交申请。软件评测实验室CNAS认可的整体流程如图所示&#xff0c;后面的内容针对每个环…

数据结构之单链表详解:从原理到C语言实现

一、 什么是单链表&#xff1f; 单链表&#xff08;Singly Linked List&#xff09;是一种线性数据结构&#xff0c;它的特点是每个节点通过指针链接到下一个节点。不同于顺序表&#xff08;数组&#xff09;&#xff0c;链表的每个元素&#xff08;节点&#xff09;并不存储在…