网站首页  软件下载  游戏下载  翻译软件  电子书下载  电影下载  电视剧下载  教程攻略

请输入您要查询的图书:

 

书名 C++程序设计教程(第3版通用版C++程序设计系列教材十二五普通高等教育本科国家级规划教材)
分类
作者 钱能
出版社 清华大学出版社
下载
简介
内容推荐
C++是一种高效实用的程序设计语言,它既可进行过程化程序设计,也可进行面向对象程序设计,因而成为编程人员最广泛使用的工具。学好C++,再学习其他软件就很容易,C++架起了通向强大、易用、真正的软件开发应用的桥梁。本书共分两大部分:第一部分包括第1章~第10章,是基础部分,主要介绍C++程序设计语言、程序结构和过程化基础;第二部分包括第11章~第21章,是面向对象程序设计部分,它建立在C++程序设计基础之上,讲述了面向对象程序设计方法。 本书提供课程教学的全程视频,读者可扫描封底的刮刮卡观看。本书还提供电子课件和程序源码,读者可以扫描封底的课件二维码下载。
本书适合用作大学计算机专业和非计算机专业的程序设计基础课程教材,也可供自学的读者使用。
目录
第一部分 C++过程化语言基础
第1章 C++入门
1.1 从C到C++
1.2 程序与语言
1.3 结构化程序设计
1.4 面向对象程序设计
1.5 程序开发过程
1.6 最简单的程序
1.7 函数
小结
第2章 基本数据类型与输入/输出
2.1 字符集与保留字
2.2 基本数据类型
2.3 变量定义
2.4 字面量
2.5 常量
2.6 I/O流控制
2.7 printf与scanf
小结
练习
第3章 表达式和语句
3.1 表达式
3.2 算术运算和赋值
3.3 算术类型转换
3.4 增量和减量
3.5 关系与逻辑运算
3.6 if语句
3.7 条件运算符
3.8 逗号表达式
3.9 求值次序与副作用
小结
练习
第4章 过程化语句
4.1 while语句
4.2 do…while语句
4.3 for语句
4.4 switch语句
4.5 转向语句
4.6 过程应用:求π
4.7 过程应用:判明素数
4.8 过程应用:求积分
小结
练习
第5章 函数
5.1 函数概述
5.2 函数原型
5.3 全局变量与局部变量
5.4 函数调用机制
5.5 静态局部变量
5.6 递归函数
5.7 内联函数
5.8 重载函数
5.9 默认参数的函数
小结
练习
第6章 程序结构
6.1 外部存储类型
6.2 静态存储类型
6.3 作用域
6.4 可见性
6.5 生命期
6.6 头文件
6.7 多文件结构
6.8 编译预处理
小结
练习
第7章 数组
7.1 数组的概念
7.2 访问数组元素
7.3 初始化数组
7.4 向函数传递数组
7.5 二维数组
7.6 数组应用:排序
7.7 数组应用:Josephus问题
7.8 数组应用:矩阵乘法
小结
练习
第8章 指针
8.1 指针的概念
8.2 指针运算
8.3 指针与数组
8.4 堆内存分配
8.5 const指针
8.6 指针与函数
8.7 字符指针
8.8 指针数组
8.9 命令行参数
8.10 函数指针
小结
练习
第9章 引用
9.1 引用的概念
9.2 引用的操作
9.3 什么能被引用
9.4 用引用传递函数参数
9.5 返回多个值
9.6 用引用返回值
9.7 函数调用作为左值
9.8 用const限定引用
9.9 返回堆中变量的引用
小结
练习
第10章 结构
10.1 结构概述
10.2 结构与指针
10.3 结构与数组
10.4 传递结构参数
10.5 返回结构
10.6 链表结构
10.7 创建与遍历链表
10.8 删除链表结点
10.9 插入链表结点
10.10 结构应用:Josephus问题
小结
练习
第二部分 面向对象程序设计
第11章 类
11.1 从结构到类
11.2 软件方法的发展
11.3 定义成员函数
11.4 调用成员函数
11.5 保护成员
11.6 屏蔽类的内部实现
11.7 名字识别
11.8 再论程序结构
小结
练习
第12章 构造函数
12.1 类与对象
12.2 构造函数的必要性
12.3 构造函数的使用
12.4 析构函数
12.5 带参数的构造函数
12.6 重载构造函数
12.7 默认构造函数
12.8 类成员初始化的困惑
12.9 构造类成员
12.10 构造对象的顺序
小结
练习
第13章 面向对象程序设计
13.1 抽象
13.2 分类
13.3 设计和效率
13.4 讨论Josephus问题
13.5 结构化方法
13.6 结构化方法的实现
13.7 面向对象方法
13.8 面向对象方法的实现
13.9 程序维护
小结
练习
第14章 堆与拷贝构造函数
14.1 关于堆
14.2 需要new和delete的原因
14.3 分配堆对象
14.4 拷贝构造函数
14.5 默认拷贝构造函数
14.6 浅拷贝与深拷贝
14.7 临时对象
14.8 无名对象
14.9 构造函数用于类型转换
小结
练习
第15章 静态成员与友元
15.1 静态成员的必要性
15.2 静态成员的使用
15.3 静态数据成员
15.4 静态成员函数
15.5 需要友元的原因
15.6 友元的使用
小结
练习
第16章 继承
16.1 继承的概念
16.2 继承的工作方式
16.3 派生类的构造
16.4 继承方式
16.5 继承与组合
16.6 多继承如何工作
16.7 多继承的模糊性
16.8 虚拟继承
16.9 多继承的构造顺序
小结
练习
第17章 多态
17.1 多态性
17.2 多态的思考方式
17.3 多态性如何工作
17.4 不恰当的虚函数
17.5 虚函数的限制
17.6 继承设计问题
17.7 抽象类与纯虚函数
17.8
序言
人工智能发展的大势人工智能代表了人类科学发展的
前沿领地,C++与其关系密不可分,所以本教材系列的出版
有人工智能发展背景的一席之地。人工智能目前尚处初级
阶段,但其研究所派生的应用已经硕果累累,正在快速地
改变我们的生活。人工智能解读医学拍片的本领已经比医
生高; 查阅法律证据的能力也比律师强; 飞机及航空管
理正在被人工智能替代; 车辆行驶人工智能系统比人的操
纵更好; 搜索引擎中的人工智能可以分析照片,告诉你
照片里面的故事。在线地图、数码相机、自动驾驶、无人
超市、无人餐馆、无人银行等,今后甚至桩桩、件件、处
处都可装智能芯片,从而纳入人工智能管理。人工智能最
关心的是人工自主意识,目前网络和计算机已经完成了知
识的检索和存储,几大搜索引擎也完成了关键字关联解
释的功能和海量数据积累,大多数机器人厂商已经完成了
反应机、自适应等高级功能,但却还没有能通过图灵测试
的真正的人工自主意识。当然人类对自身意识的研究水平
制约着人工智能的实现,人工智能的应用还可反哺于人类
对自身意识的研究。人工智能或许认为,神经网络系统只
有复杂到一定程度,且在大尺度上的相似性保持高度一致
,其个体自然产生的意识才会具备类似神经网络个体的认
同和感知。但在技术上,意识只不过是人造神经网络中诸
多需求反馈链交错所致。所以,人们通过研究人类神经网
络的构成分布、互联网的社会化训练过程,“自然产生”
个体意识。但实际上目前网上的软件自动机和各种设备产
生的不知名网络现象,即所谓自主意识,因还无法被人工
智能所感知,只被当作不知名故障进行“修复”处理,自
当无解。人工智能又或许认为,可以通过人工制造的智慧
个体(机器人),在初期表现出类似创造者的行为和意识
,再慢慢地进化。“机器学习“和“深度学习”被证明是
个有效的手段,但受限于机器人硬件发展和大数据,前路
漫漫。况且面临着神经反馈网络发展的实际问题,进化过
程中的数据“过载”或“饥荒”会导致行为和意识的随时
失却。然而人类正在不依不饶地解决人工智能的关键问题
: 机器人的行动能力和对环境的视觉、听觉、触觉、嗅觉
感知能力都在快速增强,智能推演之,则机器人就可自行
获取运行的能源; 软件自编程系统逐渐实现的自继承、自
升级和自恢复,可以使机器人自我修复和完善; 人类所掌
握的全方位机器人设计、生产、测控在逐渐人工智能化,
总有一天,机器人可以自行复制。未来的人工智能发展速
度将呈指数级攀升,将有越来越多的机器人通过图灵测试
而具意识。一旦人工智能具有创造性思维,其发展将促进
人类的巨大科学进步。显然,人工智能离不开计算,其需
要远远大于现有的计算能力,除了期待量子计算机外,还
需要有高可靠性的软件架构和高性能算法,这便需要千锤
百炼的编程语言和纵横交错的软件工具。
C++发展与地位
C++在1998年制定了一个里程碑式的C++98国际标准,
确立了C++语言的强势地位。之后,C++标准每年修订,
2011年制定的C++11标准,使得C++的强类型特征得到了充
分的体现,模板编程规范渐趋成熟。C++11标准再次深度影
响了C++编译器的变革,其发展无时无刻不在说明其语言的
完美缔造。C++充分继承了C,保持了与硬件的亲和性,在
此基础上,有机结合了诸多编程方法,兼容C的过程化编程
框架,实现了面向对象的高效设计,又开辟了可自动生成
的模板编程架构,在程序设计语言界绝无仅有。C++是当前
使用最广泛的软件工具之一,其实现技术含量最高,应用
于最重要领域。C++给我们搭建的软件架构,得以让人类展
开多层次的人人、人机的互动设计,其正完美地表现
出作为人类自然语言的化身角色。从另一个角度来说,C++
编程本身就是在撰写一篇优美的诗文,叙述一个精彩的故
事,谱写一首动听的曲子。随着韵律和情节的跌宕起伏,
什么时候故事讲完了,代码也就收尾了。好文章语义清晰
、简练生动、词藻华美、引人入胜; 好代码通俗易懂、结
构清晰、层次分明、优化高效。因为C++独具多种编程方法
,包揽从算法优化的微观细节,到模板架构的宏观布局,
因而其开拓了编程中更广泛的遐想与表达的空间,C++编程
充满美感。微软操作系统及其架构,Apple的大部分底层软
件,腾讯的QQ和微信,阿里云、百度云计算之底层架构,
Google的Android底层架构,大部分数据库核心代码,几
乎所有重要的系统,只要上规模,需要保证高可靠性,计
较性能,无一不是用C++工具搭建。正因为C++继承了C的衣
钵,充分实现与系统硬件的无缝对接,追求高效率编程,
才使得人工智能兴起的今天,大量涉及硬件相关的软件开
发,C++是首选; 其在人工智能的软件架构中,核心的逻
辑语义表达,不但描述能力无可挑剔,而且在性能和效率
方面占尽了优势。重量级IT企业在招聘大数据工程师时,
机器人公司在招聘开发人员时,都把C++编程作为必备能力
。目前在中小学教学的信息学与程序设计课程开设中,C++
趋向于统一指定为高考入学备考科目。事实上,学好C++,
再自学其他编程语言就很容易,反之则不行。编程语言的
世界排名前四名已经长时间被Java、C、C++、Python这4
种语言所占据。Java因其应用面更广泛而持续居于榜首,
但在人工智能领域,Python编程相比Java,或许更加清爽
、整洁、漂亮,其跃居前四,又有后来居上之势。人工智
能也带来了C++的再次繁荣,从某种程度上说,Python编
程只是在搭建软件的外包装,而C++才是其核心。C++与C在
占据系统底层应用方面没有什么差距,但是在规模化编程
、自动生成、实现系统架构方面,非C++莫属。况且由于C
++源自C的特点,C编程往往又是在C++平台中实现。追本溯
源,C++语言才是当今人工智能大发展上最重要的工具。改
版 框 架本教材系列进化到第3版,是作者20多年C++教学
研究与实践的总结。改版之后,每本主教材的框架结构没
有变,所以遵循原编排特点、内容特点、学习方式。但毕
竟编程应用需求形势大变,C++的地位攀升,急需权威的C
++教材主导C++的编程教学,故而第3版各版本的名称拟定
、排版、内容都作了较大更新。第3版中各版本一律改用双
色文字排版,代码以及关注文字用另一种颜色和底纹凸显
,从根本上改变了排版式样,可读性得以显著提升。第3版
中各版本的内容在原书的基础上修改提升,涉及内涵深度
、风格表现、描述侧重点等诸多不同。其版本名称见表1。
表1第3版版本框架
序类别较早版新版
1基础型
主教材《C++程序设计教程(修订版)——设计思想与
实现》
(十二五规划教材)《C++程序设计教程(第3版)通
用版》
2实战型
主教材《C++程序设计教程(第2版)》
(十一五规划教材)《C++程序设计教程(第3版)竞
技版》
31拓展型
主教材《C++程序设计教程详解——过程化编程》
(十一五规划教材)《C++程序设计教程(第3版)专
业版——过程化编程》
32拓展型
主教材《C++程序设计教程详解——对象化编程》*
(十一五规划教材)《C++程序设计教程(第3版)专
业版——对象化编程》4配套
教辅《C++程序设计教程(第2版)——实验指导》
(十一五规划教材)《C++程序设计教程(第3版)—
—实验指导》
5配套
教辅《C++程序设计教程(第2版)——习题及解答》
(十一五规划教材)
《C++程序设计教程(第3版)——习题解答》
*指原书未出版。
第3版的通用版: 侧重C++基础,主要从概念着手,
介绍C++编写程序的技法,强调编写正确的程序。学习之后
,应当能了解C++是怎么回事,能解决什么问题,能看懂C
++程序,了解C++的诸多技术特征,能编制一些简单的C++
程序,能发现一些常规的C++错误,了解不同的程序设计方
法,对面向对象程序设计方法及其特征有一个基本的了解
,具备进一步学习后续课程(如数据结构、算法分析与设
计)的基础。第3版的竞技版: 侧重C++分析设计技术,从
实战训练着手,介绍C++的各种编程策略与技术,引导对数
学及算法学习的重视,强调编写高效的程序。学习之后,
应当能掌握基本的问题分析方法,掌握解决问题的设计技
术; 了解编程过程中的许多难点,深切体会细节决定成败
; 能够学习且具备参加各个层次程序设计竞赛的能力;
对C++能解决什么问题的能力有全新的看法,进一步了解面
向对象程序设计的方法; 学会层次分析和功能拆解,具备
独立设计一个规模较大的程序的能力; 具备语言学习的独
立能力。第3版的专业版: 一方面对竞技版的C++分析设计
技术从底层的内存布局、编译器类型识别、各项技术相互
关联等进行深度解析; 另一方面介绍C++新标准及其新编
译器所涉及的技术,以纵向视角来审视C++的未来发展,更
全面地了解C++的实现技术,全面了解面向对象程序设计方
法和技术,产生对高级模板编程的兴趣。虽然本版本未必
能成为高校C++课程学习的主流,但是将其作为参考,可以
作为国外诸多C++优秀教材之补充。通用版、竞技版、专业
版编纂目的不同,学习目标不同,但3个版本都出自同一起
点——“Hello World”。每个主教材版本独立成体系,
保证概念的正确性和前后连贯性,而又相互补充,展示C++
不同的发展阶段,也展示不同的目标要求,满足了不同学
习能力的读者的学习需要。对于没有编程基础的读者,则
适合从基础型教材的学习开始,逐渐进入实战型教材的学
习训练,而将拓展型教材作为研读或参考教材,去领略C++
前沿之精妙。在上述3个版本主教材的基础上,所撰写的三
大教材的统一的实验指导和习题解答,则适合作教辅资料
。倘若没有基础版的学习,又无行家点拨,则后面的编程
学习会具有一定的困难,这也是在教学过程中确实存在的
问题。第3版的教材与其他国内外教材最大的不同,是聚焦
于培养读者的编程实战能力。C++语法现象的学习或许并没
有面面俱到,但是运用C++的编程方法与技巧,实际地解决
问题,却占有相当的篇幅。
本书技术特征本书保持了原书的描述风格,知识密集
型特征,将基本概念有效地划分为一个个独立块,形式多
样地讲清,而形成结构清晰的亮点,独到地按从简单到复
杂、从易到难循序渐进地推进各个章节。成书较早而使用
BC、BCB 6.0、VC 6.0这3种编译器。代码风格常有16位编
译器的影子。例如,浮点变量采用float居多,未涉64位整
型等。因反映的是C++98标准前后的内容,故与C结合得紧
密些。改版后,代码重写而逐渐形成自己的风格,且全部
符合C++98标准。然而,C语言描述习惯的痕迹仍在。例如
,变量定义统统放在块首,for循环变量仍早在for之前定
义。改版坚持把概念准确放在第一位。书中调整了个别章
节,例如,在第11章添加了“名字识别”这一节,将原第
17章的“多重继承”并到了第16章,而原第16章的“多态
”和“抽象类”独立出来成为第17章。特别在面向对象程
序设计部分,修改和明确了多处原概念模糊不清的地方。
例如,模板类与类模板的区别,以及与类模板实例的差别
,私有继承与保护继承的概念,多态的目的,继承与组合
的差别与联系,等等。调整之后,理顺知识、归类概念变
得更加自然。改版继承了原书诸多优点。例如,在实例应
用方面,强调完整实现,除了连贯地使用了单一问题描述
的系列解决方案Josephus之外,还对诸多排序方法以及链
表算法作了详细的描述; 关于字串处理,从字符的数组、
指针、库函数,到输入/输出,甚至字串流,代码全部使用
C字串,系统滤清了C字串的概念; 书中重视操作符重载,
用了许多实例,滤清了多种单目操作符和双目操作符的用
法和使用误区; 书中对“引用”概念单辟一章来写,专述
其原理及使用; 此外,注重描述一些重要概念,如左值、
类型相容及显隐式转换、表达式副作用等,这些都是编程
最容易误解或出错之处,构成C++进阶的重要基础。因通用
版关乎C++基础,故未涉及C++STL概念,也未述及string
字串。其编程尚停留在程序正确性之品质要求。面向对象
程序设计概念也需要后续版本进一步展开。例如,在多态
编程中,仅简单叙述多态对象类型转换的概念。教材注重
能力培养的理念与架构,必然在课程教学中从事问题驱动
的教学模式,重视实践环节的设计和辅导,故在前言后面
的附表中列出了课程教学的全程视频对应表,读者可扫描
封底的刮刮卡观看教学视频。本书还提供电子课件和程序
源码,读者可以扫描封底的课件二维码下载。温 馨 致 谢
世界真奇妙,人逢知天命之年,却还百般任性,人的劣性
也由此爆发,各种不顺都来围剿,整天疲于应对琐事,因
而我放弃了写书。不料,出版社的魏江江,一句希望,一
句怂恿,把我封存在心的C++情结给钓了出来。回想这改版
啊,本来就是我的梦。终于2018年的9月,决定要做改版的
事。编辑王冰飞,诸多鼓励和建议,洋溢着热情与幽默,
以及印象深刻的高效工作,让我感受到C++教材撰写工作的
崇高。教材的受益群体,从中小学生、大学生到程序员,
都需要提升编程能力来强化自己的内涵和跟进现实世界,
以致我认定了意义,直奔赶进度的节奏而去。家人默默的
生活支持,酿成了一种影响力,一句“快写C++”的催促,
将本不起眼的几个音节,窝成了一个大大的推波,汹涌地
扑在我的心上。诸多同事,C++的OPS(Online
Programming Space在线编程天地)提交系统维护者刘端
阳和陈波老师,还有与我抱团的张永良和王英姿老师,共
同实施了C++精品课程的编程能力训练。还有我的整个C++
教学团队,学院教学院长江颉老师从一开始就是C++能力培
养型教学的支持者,课程教学责任人龙胜春老师的虚心求
教的启示及平时给予我很多的关照,毛国红老师对我的C++
程序设计试卷提出的精益求精的见解,等等,恕不一一列
出。他们都是我教材撰写的促进者。在我内心深处,还有
一种更原始的动力,来自恩师王国东先生,他是我的人生
导师,我能得以轻轻放下,又重拾信心,拣起改版一事;
他更是我长此以往写C++教材时的诸多灵感与智慧的源泉,
系列成书,功不可没第一人。钱能于杭州自在居2019年除

附表1C++视频对应表——过程化编程
序标题注释1001C++课程概述C++课程的编程概述,
实验方法1002编程操作提交编程操作,提交平台,实验1布
置1003输入输出和循环简单语句,变量与字符,循环
1004变量与字符字符,字符三角形1005次数控制循环
编程细节,字符菱形11006增量操作增量操作,字符菱形
21007输出格式交替字符倒三角形,格式阵列11008整
型原理格式阵列2,整型10091!到n!的和1!到n!的和11
010文件操作1!到n!的和2,最大公约数,文件操作1011浮
点输出浮点格式输出,等比数列1,斐波那契数列1012函数
使用表达式副作用,函数,最大公约数,最小公倍数,寻找素
数对11013素数筛法寻找素数对2,素数筛法,对称三位数
素数1,逻辑短路1014浮点型原理1浮点型11015浮点型
原理2浮点型2,级数求和1016集合逻辑短路,集合,对称
三位数素数21017位操作对称三位数素数3,位操作,整数
内码,整除3、5、71018递归1整除3、5、7,母牛问题,递
归1019空间换时间A类数,协方差11020数学方法优化
协方差2,五位以内对称素数1021提交策略做题提交策略,
十二进制转换11022转移语句转移语句,十二进制转
换2,统计天数1023字串处理字符,字串处理,输出格式1
024计算技巧uglyNumber1025期中讲评1期中考试讲评
,接龙,斜纹布,斐波追溯数11026期中讲评2斐波追溯数
2,字符表,少数服从多数1027期中讲评311的倍数,无秤
售油,组合数11028期中讲评4组合数2,矩阵鞍点11029
多重集列出完数,12!配对11030二维数组12!配对2,矩阵
鞍点21031排序1排序1,参数传递1032排序2排序
21033结构01串排序,按绩点排名11034逆反按绩点
排名2,逆反01串1035String搜索1去掉双斜杠注
释,string串的find,排列对称串1036常规做题策略
BoxofBricks,算菜价1037数学方法运用n!的位数
1038String搜索2剪花布条1039递归2勘探油田
11040Map勘探油田2,最多的商品1041运行错误解析
Getline,运行错误解析
附表2C++视频对应表——面向对象编程
序标题注释2005期末讲评与程序结构1C++程序设计
Ⅰ期末考试讲解,过程化程序结构12006程序结构2过程化
程序结构22007四则运算程序控制PartⅡ第四套实验讲
解——简单四则运算2008大数加,计算器实验1大数加等,
计算器样本实验问题理解,实验要求12009n!中的
0PartII第五套实验讲解——n!中的02010计算器实验2
计算器样本实验处理总体框架逻辑2011程序结构3过程化
程序结构32012程序结构4过程化程序结构4,实验要求22
013计算器实验3计算器样本实验数据处理过程,实验要求
32014计算器实验4计算器样本实验程序控制,测试数据制
作2015类与对象1数据类型,数据传递,数据封装12016
类与对象2数据封装2,对象创建,计算器实验类型创建2
017类与程序结构1对象化编程1,计算器实验程序框架12
018类与程序结构2对象化编程2,计算器实验程序框架2,异
常处理2019对象创建1对象内存映射12020对象创建2
对象内存映射22021对象创建3对象内存映射3,深拷贝浅
拷贝1,拷贝构造1,赋值2022对象创建4动态内存申请,深
拷贝浅拷贝2,拷贝构造2,析构2023继承1访问权限,对象
内存映射42024继承2对象内存映射5,批量数据处理特征
12025多态1批量数据处理特征2,多态虚函数12026
多态2函数重载与覆盖,多态虚函数22027多态处理批量
数据处理特征32029抽象类1纯虚函数2030抽象类2面
向对象程序结构2031归纳面向对象1学术竞赛讲评
13001归纳面向对象2学术竞赛讲评2
导语
本书共分两大部分:第一部分包括第1章~第10章,是基础部分,主要介绍C++程序设计语言、程序结构和过程化基础;第二部分包括第11章~第21章,是面向对象程序设计部分,它建立在C++程序设计基础之上,讲述了面向对象程序设计方法?
本书适合用作大学计算机专业和非计算机专业的程序设计基础课程教材,也可供自学的读者使用?
精彩页
第3章表达式和语句
程序是一些按次序执行的语句。执行语句是为了完成某个操作,修改某个数据。程序中大
部分的语句是由表达式构成的,因为表达式直截了当地返回值。正因为如此,表达式是
C++
编译器处理的重要内容。学习本章后,要求理解表达式和语句的概念,掌握表达式中各种运
算符的功能与特点,更好地理解C++语言的强大与灵
活。
3.1表达式
1. 表达式概述
表达式是操作符、操作数和标点符号组成的序列,其目的是说明一个计算过程。
表达式可以嵌套,例如2+3+(5*sizeof(int))/345。
表达式根据某些约定、求值次序、结合性和优先级规则来进行计算。
所谓约定,即类型转换的约定。例如:
float a;
a=5/2;
结果a得到值为2。5/2是整数除法取整,因为5和2都是整数,不会由于a是float型而轻易改
变运算的性质。
所谓求值次序,是指以正确计算表达式值为目的,以内部优化为手段,为每个操作数规定一个计值的顺序。求值次序视编译器不同而不同,见3.9节。
所谓结合性,是指表达式中出现同等优先级的操作符时,该先做哪个操作的规定。例如:
d=a+b-c;//C++规定,加减法先左后右。先做a+b,其结
果再减去c
d=a=3;//C++规定,等号是先右后左。先做a=3,其
结果再赋给d
所谓优先级,是指不同优先级的操作符,总是先做优先级高的操作。例如:
d=a+b*c;//乘法优先级比加法高。先做b*c,其结果再与a相加
2. 左值和右值
左值(left value,缩写为lvalue)是能出现在赋值表达式左边的表达式。左值表达式具有
存放数据的空间,并且存放是允许的。例如:
int a=3;//a是变量,所以a是左值
const int b=4;//b是常量,所以b不是左值
显然常量不是左值,因为C++规定常量的值一旦确定是不
能更改的。
右值(right value,缩写为rvalue)只能出现在赋值表达式的右边。左值表达式也可以作
为右值表达式。例如:
int a,b=6; a=b;//b是变量,所以是左值,此处作为右值
a=8;//8是常量,只能作右值,不能作为左值
表达式终能产生数值结果,可表示左值或右值。例如:
int a;
(a=4)=28;//ok:a=4是左值表达式,可以被赋以值28
void f(){return ;}//此为函数定义,该函数不返回任何值
28是右值表达式,而a=4是左值表达式(C++的语法规定)
,所以可以放在赋值语句的左边。该语句表示a的值用28替代刚刚赋给的值4。
函数定义f()本身不是表达式,它说明了一个不返回值的函数。对函数f()的调用是语句,它实
施了一个没有返回值的操作。
3. 优先级和结合性
表31对操作符的优先级和结合性作了小结。表中包含了C++
所有的操作符,共有16级优先

。表中的操作符如重复出现,则第1次出现的是单目运算符,第2次出现的是双目运算符。每一
级的结合性,不是从左到右就是从右到左。表达式中,在没有括号的情况下,这些规则决定
了表达式运算的次序。
每一级中的操作符是同优先级的。
表31C++操
作符的优先级与结合性
优先级操作符结合性
1()、[]、-) ::左→右
2!、~、+、-、++、--、&、* (强制转换类型) sizeof new delete
右→左
3.、*、-)、*左→右
4*、/、%左→右
5+、-左→右
6((、))左→右
7(、(=、)=、)左→右
8==、!=左→右
9&左→右
10^左→右
11|左→右
续表
优先级操作符结合性
12&&左→右
13||左→右
14?:右→左
15=、*=、/=、+=、-=、|=、((=、))= 右→左
16,左→右
4. 语句与块 C++中所有的操作运算都通过表达式来实现。由表达式
组成的语句称为表达式语句,它由一个表达式后接一个分号“;
”组成。
通过计算表达式即执行了表达式语句。大多数表达式语句为赋值语句和函数调用。
语句是用来规定程序执行的控制流。在没有跳转和分支(见第4章)的情况下,语句将按照
其在源程序中出现的次序顺序执行。
语句可以是空语句。空语句是只有一个分号而没有表达式的语句,其形式为:
;
它不产生任何操作运算,只作为形式上的语句,被填充在控制结构中。例如:
if(x)9)
;
else
cout (("not larger than 9\n";
例中判断x是否大于9,如果大于9,不做任何事,否则输出“not larger than 9”和回车。
块(或称复合语句)是指括在一对大括号{}里的语句序列。从语法上来说,块可以被认为是
单个语句。例如:
if(x)9)
{
cout (("The number is perfect.\n";
cout (("It is larger than 9\n";
}
else
{
cout (("not larger than 9\n";
}
x若大于9,则执行两
随便看

 

霍普软件下载网电子书栏目提供海量电子书在线免费阅读及下载。

 

Copyright © 2002-2024 101bt.net All Rights Reserved
更新时间:2025/1/19 16:11:40