首页 > 图书中心 >图书详情
精通C++(第9版)
作者:[美]托尼·加迪斯(Tony Gaddis),朱迪·沃尔特斯(Judy Walters),戈德弗雷·穆甘达(Godfrey Muganda) 著 黄刚 等译
丛书名:清华计算机图书译丛
定价:198元
印次:1-3
ISBN:9787302503163
出版日期:2018.09.01
印刷日期:2019.11.26
本书自第1版出版以来,就深受广大读者欢迎,成为学习C++的经典教材,这是最新的第9版。本书共分19章,从计算机科学的基础知识和内容开始,介绍C++程序的基本组成部分,C++语言的语法和结构,类与面向对象编程,文件与I/O操作,递归的应用,多态与虚函数,异常处理,模板实现与标准模板库使用,链表的概念与操作,栈与队列的概念与操作,二叉树及其操作等。 本书的知识体系完整,编写体例充分考虑了教学的需要,全书给出了思考题447道,复习与练习题586道,挑战编程题304道,完整程序362个,非常适合作为高等院校计算机及相关专业程序设计与数据结构的教材,也是精通C++程序设计的首选用书。
more >欢迎使用本书第9版中文版。本书适用于2或3学期的C++编程课程或一学期的快速课程。对于刚接触编程的学生,以及其他语言课程的初学者,学习本书将大有裨益。本书不但为初学者提供了编程方面的基础知识,也针对具有一定基础的学习者深入探讨了C++语言的技术细节、陷阱和微妙之处。本书的编写风格清晰明快、易于理解,它涵盖了介绍性编程课程的所有必要主题。本书还包含大量的示例程序,这些示例简洁、实用,并且注重和现实接轨,确保学生不仅能学习到如何实现C++的功能和构造,还了解为什么要使用以及何时使用它们。 第9版中的内容 新C++ 11标准 C++ 11是C++语言的最新标准。在该标准开发之初,它被称为C++ 0x版本。2011年8月,国际标准化组织(International Standards Organization,ISO)批准了该版本,新标准正式定名为C++ 11。绝大多数流行的C++编译器现在都已经支持该标准。 新的C++ 11标准包含了核心语言的新特性,并且拓展了C++标准程序库,但是,本书并不严格要求使用C++ 11编译器。本书在介绍C++ 11标准的新性能时,会在页边附加C++ 11的图标提示,没有该图标提示的程序仍然可以使用以前的编译器进行编译。 本书介绍的C++ 11主题 * 在第2章中介绍了auto关键字,它是一种简化复杂变量定义的方式。该关键字使得编译器可以从变量的初始化值推断出它的数据类型。 * 第2章还介绍了新的long long int和unsigned long long int数据类型以及LL常数后缀。 * 第5章介绍了如何将一个string对象直接传递给一个文件流对象的open成员函数,而不必调用c_str()成员函数。同时,也为使用早期编译器的读者保留了对于c_str()成员函数的使用介绍。 * 第7章介绍了强类型枚举enum。 * 在第8章介绍了基于范围的循环。这个新的循环机制会自动对数组、矢量或其他集合的每个元素进行迭代,无须使用计数器变量或下标。 * 第8章还介绍了初始化变量的新方式,演示了如何使用初始化列表来初始化一个矢量。 * 第10章介绍了智能指针,并且提供了新的独占指针unique_ptr和共享指针shared_ptr的多个应用实例,解释了如何使用它们安全地分配和使用动态内存,以及要使用智能指针的原因。 * 第10章还介绍了移动赋值运算符,以及nullptr关键字,该关键字现在是表示空指针的新标准方式。 * 第11章讨论了移动构造函数,并且深入介绍了移动赋值运算符,此外还介绍了Lambda表达式。 * 第12章介绍了C++ 11 string库中的新函数,讨论了新的重载函数to_string,它可以将数字值转换为string对象。 * 第15章介绍和演示了新的override关键字的使用,它可以防止难以察觉的覆盖错误。此外还介绍了final关键字,它可以防止虚成员函数被覆盖。 * 第16章介绍了新的C++ 11函数begin(c)和end(c),以指定集合c中的开头和末尾位置。 其他新变化 本书的教学方法和写作风格与以前的版本保持一致。除了上面介绍的新增?C++?11?标 准内容之外,还有许多其他方面的改进,使其更方便读者学习使用。 更新材料 整本书中的材料已更新,以反映技术和软件开发环境的变化。本书的知识介绍更加简洁明快,并且在介绍性编程教学中融入了最佳实践,因此,本书新增了大量图形或经过重新设计的插图,在各章还添加了很多新的或经过改写的示例程序,使全书内容更加丰富。 新资料 本书针对很多主题都添加了新的资料。除了上面介绍的使用C++ 11新特性的主题之外,新版还包括了对常数、随机数以及枚举数据类型等知识点的新修改,以及在设计类方面的改进资料。 新编程挑战 新版在每个章节都增加了新的编程挑战题目。 重组章节 为了提高读者的学习能力,新版对若干章节进行了重组。例如,在第5章关于循环的介绍中,现在已经重组为先让读者使用while循环进行更多的练习,然后再介绍do-while和for循环。在第6章关于函数的介绍中,已经重组了定义和调用函数、函数原型介绍和main函数等方面的内容。 本书的组织结构 本书以循序渐进的方式讲授有关C++的内容。每一章都涵盖了一系列主题,并且可帮助学生随着学习的进度而逐渐建立起完善的知识体系。虽然这些章节可以很轻松地按照现有顺序进行教学,但也有一定的灵活性。下面的依赖关系图(图P-1)提出了可能的教学顺序建议。 图P-1 本书内容依赖关系图 第1章介绍基础的硬件、软件和编程概念。如果已经掌握了这些主题的知识,则可以选择跳过本章。 第2~6章涵盖了基本的C++语法、数据类型、表达式、选择结构、重复结构和函数等。这些章的每一章都建立在前一章的基础上,应该按照所提出的顺序开展教学。 第7章介绍面向对象编程,它可以在第6章之后的任何时候进行学习,但必须在第11章之前。喜欢先引入数组概念的教师可以在第7章之前先讲授第8章。当然,8.13节(对象数组)需要先学习第7章才能讲授。 如图P-1所示,在本书的后半部分,可以按任何顺序学习第11~14章,第11章、第15章和第16章应该按顺序进行。对于希望在本课程中尽早介绍数据结构的教师,可以跳过第15章和第16章的高级面向对象编程知识,先讲授第17章(链表)、第18章(栈和队列)以及第19章(二叉树),但是它们必须安排在第14章(递归)之后。并且,在这种情况下,有必要忽略第17~19章中有关处理模板和标准模板库的部分。 各章内容概述 第1章:计算机和编程简介 该章提供了和计算机科学领域相关的基础知识和内容,涵盖了硬件、软件、操作系统、编程、解决问题和软件工程等多方面的基本概念。介绍了关键词、变量、运算符和标点符号等程序组件,以及层次结构图和伪代码等编程工具。综合演练部分向学生展示了如何使用cout语句创建个性化的输出消息。本章末尾的编程挑战可以帮助学生了解如何使用相同的基本输入、处理和输出结构来创建多个程序。 第2章:C ++简介 该章旨在帮助学生初步了解C++,介绍了C ++程序的基本部件、数据类型、变量和文本的使用、赋值语句、简单的算术运算、程序输出和注释等。该章介绍了C++ string类,并且从此处开始,本书将使用string对象作为处理字符串的主要方法。该章还引入了编程风格约定,建立了良好的编程风格示范,并且贯穿全书。综合演练部分则让学生可以玩简单的基于文本的图形游戏。 第3章:表达式和交互 在该章中,学生将学习编写输入和处理数字、字符和字符串数据的程序,也包括算术运算符的使用和数学表达式的创建,以及运算符的优先级等重点知识。该章还有一个专门的小节介绍调试方法以及如何手动跟踪程序。此外还包括使用随机数字、简单的输出格式设置、数据类型转换和强制转换,以及使用库函数处理数字等。综合演练部分向学生展示了如何创建一个简单的互动文字游戏。 第4章:条件选择 在该章中,学生将学习关系表达式,以及如何使用if、else和if-else if语句来控制程序的流程。此外也介绍了逻辑运算符、条件运算符和switch语句等。同时还提供了这些结构的应用示例说明,如菜单驱动的程序。该章还介绍了块和作用域的概念,并延续调试的话题,讨论了验证输出结果的问题。综合演练部分允许学生使用随机数字和分支语句来创建算命游戏。 第5章:循环 该章介绍了C++的重复控制机制。帮助学生了解while循环、do-while循环和for循环,以及各种控制它们的方法。这些方法包括使用计数器、用户输入、结束标记符号和到达文件末尾测试等。该章还提供了很多使用循环的应用程序,例如保持累计汇总和执行数据验证等。该章还增加了一个关于文件处理的小节。另外,在有关调试和测试的部分,介绍了如何创建良好的测试数据。该章综合演练部分向学生介绍了Windows命令,如何使用它们创建丰富多彩的输出,以及通过循环实现彩色显示。 第6章:函数 在该章中,学生将学习如何构建模块化程序,并了解为什么要进行模块化。该章首先介绍了void和值返回函数、形参传递等知识,强调了通过值传递和通过引用传递参数的区别。该章也介绍了变量作用域的概念,对局部变量、全局变量和静态局部变量进行了区分。此外还介绍和演示了函数重载操作。综合演练部分包括一个模块化的菜单驱动程序,强调函数的多样性,说明如何通过发送给它们的参数来控制其行为。 第7章:类和对象简介 该章开始关注面向对象的范例。学生们将学习如何定义自己的类以及如何创建和使用这些类的对象。该章详细介绍了哪些函数属于一个类,而哪些函数则属于使用这个类的客户端程序。良好的面向对象实践是先进行充分的讨论和模块化设计,例如通过仔细构建的读取器和设置器函数来保护成员数据,并隐藏客户端程序的类实现细节。一旦学生适应了使用类和对象,则可以深入探讨本章提供的面向对象分析和设计的主题。该章还介绍了有关枚举数据类型和结构的相关知识。在综合演练部分,学生们将学习使用屏幕控制技术来创建模拟溜溜球运动的动画。 第8章:数组 在该章中,学生将学习如何创建和使用单维和多维数组。该章提供了许多数组处理的例子,包括使用函数来计算数组中的总和、平均值、最高值和最低值等。该章还介绍了使用二维数组创建表、按行或按列分析数组数据等。此外还演示了使用并行数组的编程技巧,并向学生展示了如何使用数据文件作为输入源来填充数组。该章介绍了基于范围的for循环,它是遍历数组所有元素的简便方式。此外还引入了标准模板库矢量,并使之与数组进行比较,以加深学生的印象。关于对象数组和结构数组的内容被特意放在章节的末尾,这样方便教师跳过第7章而先讲授这一章,以后需要时再回来讲授该节。综合演练部分演示如何使用数组创建一个石头、剪刀、布游戏。 第9章:搜索、排序和算法分析 在本章中,学生将学习搜索存储在数组中的信息和排序数组(包括对象数组)的基本知识。该章涵盖了线性搜索、二分搜索、冒泡排序和选择排序算法,并加入了STL矢量搜索和排序的相关内容。该章还提供了算法分析的简要介绍,并向学生展示了如何确定两种算法中哪一种算法更有效。该章的综合演练部分使用了表格查找或搜索算法来编码和解码秘密消息。 第10章:指针 该章介绍了如何使用指针,主要内容包括指针算术、指针初始化、指针比较、指针和数组、指针和函数、动态内存分配、新的nullptr关键字等。另外还新增了有关智能指针的内容,介绍如何使用它们避免内存泄漏。综合演练部分演示了如何使用指针访问返回日历时间的库数据结构和函数。 第11章:类和面向对象编程详解 该章在第7章的基础上继续深入探讨了有关类和面向对象编程的相关内容。它涵盖了对象的继承、聚合和组合等有一定深度的内容,并说明了Is-a和Has-a的区别。该章内容还包括常量成员函数、静态成员、友元、按成员赋值、复制构造函数、对象类型转换运算符、转换构造函数、运算符重载、移动构造函数和移动赋值运算符等。此外还添加了一个新的章节,介绍函数对象和C++ 11的Lambda表达式。综合演练部分汇集了继承和转换构造函数的概念,以构建一个程序,该程序将数组的内容格式化为一个HTML表格,以便在Web站点上显示。 第12章:C字符串和string类详解 该章介绍了用于处理字符和C字符串的标准库函数,以及有关string类函数的资料,涵盖新的C++ 11中的string库、新的重载的to_string函数(将数字值转换为string对象)等。综合演练部分向学生展示了如何访问基于字符串的程序环境,以获取有关计算机和运行该程序的网络的信息。 第13章:高级文件和I/O操作 该章介绍了更多有关顺序访问文本文件和随机访问二进制文件的内容。讨论了以不同的模式打开文件的设置,以及读取和写入文件内容的多种方法。综合演练程序应用了该章介绍的许多技术,将两个文本文件合并成一个HTML文档,以便在Web上显示,并用不同的颜色来说明每个数据块来自哪个文件。 第14章:递归 该章定义和演示了递归。通过清晰的递归调用图示,讲解了递归的原理和用法,并讨论了递归应用程序。该章还提供了多种递归算法示例,包括计算阶乘的递归函数、递归找到最大公约数、递归执行二分搜索、使用QuickSort进行排序以及递归解决汉诺塔问题等。对于需要更多挑战的学生来说,还可以研究本章提供的穷举和枚举算法。综合演练部分使用递归来评估前缀表达式。 第15章:多态和虚函数 该章继续深入讨论类和面向对象编程,并介绍了一些更高级的概念,如多态和虚函数。此外还提供了抽象基类、纯虚函数、继承层次结构中的类型兼容性以及虚拟继承等方面的内容。综合演练部分说明了如何使用继承和多态来显示图形并使之产生动画。 第16章:异常、模板和标准模板库 该章介绍了如何使用异常来开发增强的错误捕获技术,然后讨论了如何使用函数和类模板来创建通用代码。最后,还介绍了由标准模板库(STL)提供的容器、迭代器和算法。综合演练部分使用了标准模板库中的各种容器来创建一款寓教于乐的儿童游戏。 第17章:链表 该章介绍使用链表所需的概念和技术。学生将首先了解链表抽象数据类型(ADT),然后学习如何创建和销毁链表,以及编写函数以插入、追加和删除结点,遍历链表和搜索特定结点的函数。此外还演示了链表类模板的使用。综合演练部分将面向对象编程的许多重要概念汇集在一起,通过将对象、继承、多态与STL的list类相结合,为一组图形制作 动画。 第18章:栈和队列 在该章中,学生将学习创建和使用静态栈、动态栈和队列。学生将了解到栈和队列的操作,以及每个抽象数据类型的模板。基于静态数组的栈使用异常处理机制来处理栈的溢出和下溢,该章提供了定义、抛出和捕获异常的真实而自然的例子。综合演练部分讨论了评估后缀表达式的策略,以及使用栈将后缀表达式转换为中缀表达式的方法。 第19章:二叉树 该章介绍了二叉树抽象数据类型并演示了许多二叉树操作,包括遍历树,插入、删除和替换元素,搜索特定的元素,以及销毁树。综合演练部分介绍了一个足够多样化的树结构来创建谱系树。 书中的附录 附录A:ASCII字符集?ASCII和扩展ASCII字符及其代码的列表。 附录B:运算符优先级和关联性?C++运算符的优先级和关联性列表。 附录C:思考题答案?该附录可以作为一个工具供学生参考。通过做思考题和比较自己的答案,学生可以判断自己对各章知识点的掌握程度。该附录包括本书所有思考题的 答案。 附录D:复习和练习奇数题的答案?学生可以用来评估自身对全书知识点的理解和掌握程度的另一个工具。 本书配套站点上的其他附录 附录E:面向对象编程简介?面向对象编程的概念和术语介绍。 附录F:在类设计中使用UML?统一建模语言(UML)类图的简要介绍及其使用示例。 附录G:多源文件程序?关于如何使用多个源文件创建、编译和链接程序的教程。包括使用函数头文件、类规范文件和类实现文件。 附录H:多重和虚继承?为已经熟悉单个继承的读者提供的多重和虚继承的C++概念的自助讨论。 附录I:头文件和库函数参考?本书中使用的C++库函数和头文件的参考。 附录J:命名空间?对命名空间及其用途的解释,提供了关于如何定义命名空间和访问其成员的示例。 附录K:C++强制转换和运行时类型标识?介绍了在C++中进行类型强制转换的不同方法和运行时类型标识。 附录L:传递命令行参数?介绍编写接受命令行参数的C++程序。本附录对于在UNIX或Linux等命令行环境下工作的学生非常有用。 附录M:二进制数字和位运算?二进制数字系统和C++位运算符的指南,以及整数的内部存储的教程。 附录N:流程图介绍?介绍流程图及其符号的教程。它包括处理顺序、选择、大小写、重复和调用其他模块。该附录中提供了本书若干个程序的示例流程图。 本书特色内容 核心概念:本书大部分章节内容都以核心概念的陈述开始,它总结了本章的重点思想或核心知识点。 示例程序:本书有超过350个完整的示例程序,每个程序设计为突出目前正在讨论的主题。在大多数情况下,这些都是实用示例。本书配套站点提供了这些程序的源代码,以便学生可以自己运行程序。 程序输出:在绝大多数示例程序之后,都有一个屏幕输出样本,向读者演示了程序应该如何起作用。 综合演练:这是一个特殊的部分,在每一章的最后都有,读者可以通过该演练做一些聪明而有趣的事情,进而更好地掌握本章的内容。 思考题:这是读者测试自己学习效用的工具,也有利于读者掌握学习要点。本书后面的附录C提供了所有关于思考题的答案。 注意:出现在书中的适当位置。这些简短的解释性文字对于厘清知识要点或阐释容易引起误解的内容很有帮助。 警告:对于某些C++特性、编程技术或做法提出警告,因为它们可能会导致程序出现故障或丢失数据。 案例研究:本书绝大多数章节都提供了模拟现实世界应用的案例研究,并且为每一个案例研究提供了完整的代码。在本书配套站点上提供了更多的案例研究。这些案例研究旨在强调它们所出现章节的主要知识点。 复习和练习:本书每一章都提供了一套完整而多样的复习和练习,如填空和简答题,可以检查学生对本章介绍内容的掌握程度。接下来是对分析和解决问题能力的练习,如算法工作台、预测输出结果和找出错误部分。每个章节还提供了一项软件技能练习,侧重于培养学生的沟通技能和团队协作能力。此外,本书后面的附录D提供了所有章节的复习和练习奇数题的答案。 编程挑战:本书每一章都提供了一组编程练习,旨在巩固学生对当前正在学习的知识要点和编程技巧的认识。在大多数情况下,这些挑战题目提出了现实世界中需要解决的 问题。 团队项目:本书有若干个团队编程项目,建议由一个学生团队完成。其中一个学生可以建立程序的用户界面,另一个学生负责写数学代码,还有一个学生负责设计和实现一个程序使用的类。这个过程类似于许多专业程序的开发方式,并且也鼓励课堂内的团队合作。 补 充 资 料 学生资源 以下项目可在www.pearsonhighered.com/cs-resources的Gaddis Series资源页面上获得: * 本书包含的每个程序的完整源代码。 * 额外的案例研究及其完整的源代码。 * 本书附带的全套附录(包括若干个教程)。 * 访问本书配套站点上的视频教程。 * 下载大量编程环境和IDE的链接,包括Visual Studio Community Edition。 致??谢 本书的开发和出版获得了很多人的帮助。在此谨对以下评审人员提供的有益建议和专业知识表示衷心感谢。
more >