现代C++程序设计(原书第2版)
作者 : Barbara Johnston
译者 : 何亮 黄国伟 陈志
丛书名 : 计算机科学丛书
出版日期 : 2008-09-08
ISBN : 7-111-24212-3
定价 : 59.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 455
开本 : 16开
原书名 : C++Programming Today Second Edition
原出版社: Prentice Hall
属性分类: 教材
包含CD :
绝版 :
图书简介

本书以生动轻松的语言深入阐述了C++语言和面向对象程序设计技术。从最简单的面向对象技术到复杂的虚函数等内容,作者采用循序渐进的方式引领初学者进入面向对象程序设计的大门。书中设计了超过115个完整的经过教学测试的代码示例,不仅分析了这些示例的代码片段,而且还解释了如何把它们组成一个完整的程序。
  本书从第2章开始就引入了重要的面向对象的类和技术,与传统的C++教材相比,由于读者很快就知道如何创建对象和调用类函数,所以可以更早地创建复杂且有趣的程序。
  本书作者有20多年的编程和教学经验,书中提供了许多实际开发中的宝贵经验,并给出了编写代码应采取的格式、应该避免的错误、调试和定位问题的技巧以及一些常识性的建议。此外,各章后面都提供了大量练习,有助于加强读者对相关内容的理解。

本书主要特色:
  ●面向对象的原则和定义
  ●对象模型和类的关系
  ●C++类,包括string、vector、queue、stringstream、ifstream以及ofstream
  ●控制语句与循环
  ●函数、重载以及默认参数列表
  ●指针和引用
  ●数组:一维和多维
  ●构造函数、析构函数、继承、虚函数以及多态
  ●多文件程序的创建

  关于本书的代码和一些其他的资料可以在http://www.prenhall.com/johnston/details.html上下载。

图书特色

图书前言

本书的读者对象
本书是专门为对 C++编程感兴趣的读者而写的,适合的读者对象是:
 大学本科或研究生。
 专科院校学生。
 希望从事编程工作的人。
 希望在学习Java或C#前先学习 C++的人。
 对编程有浓厚兴趣的人。
不管你属于哪种情况,只要你想学习计算机编程,本书就适合你。
使用本书需具备的数学基础
许多程序的实现需要较深的数学理论作为基础,但本书涉及的数学内容只是最简单的加、减、乘、除,你不会看到很长的数学公式。所以不管你的数学基础如何,都可以采用本书作为 C++语言的学习教程。当然,程序中难免会需要一些计算。这时,我们会对相关的公式进行解释和说明。
实例简单易懂
有些 C++概念很难掌握。为了便于理解,我们给出了大量的程序实例。由于我们主要关注 C++语言的细节,所以这些例子的背景都很简单。本书至少包含115个完整的程序,每章的最后还给出了一些用于练习的程序。这些例子有助于读者深入理解如何使用 C++来设计面向对象的程序。
以数学为辅,重点强调 C++的相关概念
本书不会涉及太多的数学内容,但这并不意味着我们只是对 C++作简单的介绍。本书会介绍一些复杂的编程概念,包括类、对象、虚函数以及继承。我们还会在第5章介绍指针和引用的概念,并在后续章节中使用它们。
本书特点
本书给出了实际编程中的一些技巧,比如:
 对编程人员应该做什么、不应该做什么进行了介绍和说明。
 与第1版的另一个主要区别是,第2版中至少有115个完整的 C++程序,这些程序有助于读者更清晰地了解程序创建的过程:读者希望看到的是较复杂且完整的程序代码,而不是短小的代码片段。
 扩展了每章最后“练习”部分的内容。在第1版中,由于安排了“Lab Manual”一节,所以每章最后安排的练习内容不是很多。
 在“问题定位”部分给出了编程中常见的错误和缺陷。
 代码的书写格式非常重要,本书举例说明了好的代码格式以及不好的代码格式。
 介绍了如何一步一步地创建程序。
 总结了一些在处理数组时的技巧和经验。
 每章都结合该章内容,给出了常见的编译错误以及连接错误。
 给出了在遇到编译错误与连接错误时所应考虑的问题。
 所给出程序的大小不一。
 给出了一些完整的程序,读者可以利用这些例子作为编程的起点。
 书中多次使用了下面这4种图标,它们的含义为:

 好的编程习惯!    停下!不要这样做!
 注意!问题定位

与其他书的不同之处
本书的附录为编程人员提供了一些平时可能需要用到的内容,其中有一些内容在其他书中是很难找到的,包括:
 开始使用Visual C++2005 Express Edition以及Visual C++帮助。
 文件输入/输出,包含一些处理文本文件和二进制文件的例子。
 Microsoft Visual C++2005 Express Edition的调试器。
 如何创建多文件程序。
 C++的关键字字典,包含63个关键字,并对每个关键字都进行了说明和举例。
关于第2版
第2版是一本介绍编程语言的教材,其设计思路是“全是有用的,没有没用的”(Johnston,“all the things you need,and none of the things you dont”)。刚开始学习 C++的读者可以通过本书对 C++有一个系统的认识,并且能够开始使用类和对象进行程序设计。本书还包含了Microsoft Visual C++Express 2005(一种 C++开发环境)的相关内容。
第2版的一大特点在于从读者的角度出发,从一开始就使用 C++中类的概念(本书第1版直到第9章才开始对类的概念进行介绍)。在介绍 C++内容的同时,本书还在每一章中向读者介绍一个新的 C++类,并在具体程序中给出了使用它们的方法。这样,可以使读者在自己设计类和对象之前,加深对它们的理解和认识。
经过教学检验
本书中的内容精湛、准确,而且写作风格幽默。这种易于阅读的写作风格赢得了评论家和读者的好评。许多来自各个地方的专家对本书的第1版进行了评审,本书采纳了一些他们提出的很有价值的建议。同时,本书中的内容也是新墨西哥中央社区学院(CNM)的 C++课程所使用的。在教学过程中,学生们发现书中关于 C++string、vector、stringstream以及queue类的内容非常好理解,可以很容易地使用它们进行程序设计。而且,本书介绍函数和类时所采用的“任务分工和描述”加深了学生对这些内容的理解,使他们能够在实际编程中更为合理地设计类和对象。
与第1版的不同
在第2版中,我们对程序代码的行数进行了标记,添加了清晰的注释信息,并且在源代码的后面给出了程序的输出结果。此外,还增加了每章中较大的、完整的程序的数量。
本书第1版附录中给出了许多很重要的编程信息。第2版对这些内容进行了扩充,加入了更多的程序举例,并且提供了一些相关内容的参考资料。
第1版的每章中都含有“Laboratory Manual”一节内容。在第2版中,我们去掉了这一节内容,但大大增加了每章最后编程练习中的内容。这些练习大部分都是实际的问题,并且通过了教学的检验。
第2版中使用两章的内容来对函数进行介绍,不再把指针单独列为一章(第1版的第4章)。第2版的第4章介绍了有关函数的基本内容,包括重载和默认参数列表。在第5章中对地址、指针以及引用进行了说明。通过实际教学,证明这种循序渐进的介绍方法是可行的。
特别提醒:本书介绍ISO的 C++,不是Visual C++
本书中的程序是按照国际标准组织(ISO)的 C++标准编写的,读者可以在任何一台支持ISO标准 C++的计算机上运行这些程序。有关Visual C++的使用方法在附录中进行了说明。书中的程序采用的都是Microsoft Visual C++的控制台应用程序。
学完本书之后
掌握了书中所介绍的这些内容后,读者可以很轻松地学习其他面向对象的程序设计语言,比如Java、C#以及Ruby。另外,再接触Windows开发就会感觉比较容易了,甚至可以以此进入Qt或wxWidgets这样的跨平台开发领域。
致谢
在这里,要感谢家人和朋友在我编写这本书时给我的支持、鼓励以及耐心。在刚知道我要新写一本书时,他们的态度很不一样。有的说:“喔,那太好了!”而也有人说:“不是吧,又要写一本啊!”但几个月过去了,他们的关心从“进展得怎么样了?”到“很长时间没有你的消息了,是不是写书太忙了?别累着!”到“还没写完吗?”再到“你写完书之前我们不想见到你,不过写完了之后你得天天和我们在一起。”
感谢新墨西哥中央社区学院商业与信息技术专业的各位老师和学生。感谢和我一起教授计算机编程的Steve Parratto和Dora Lujan,他们对我的提问总是很耐心,并且对本书的内容、定位以及写作方法给出了很多有价值的建议。Steve,书中关于抵押贷款的例子是专门为你而设置的!感谢E100计算机实验室的所有人:Gary Johnson、Ben Rollag、Stephanie Chelius、Carrie Yarbrough以及Donnie Frank,你们给予了我多方面的帮助,包括许多有关Visual C++2005的问题、对书中程序进行检查,以及修改最后的编程练习。感谢Carrie和Donnie,你们以很高的编程技巧实现了每章最后的编程练习。感谢Paul Quan和Lois Carlson,你们使我有机会在实际教学中使用这本书。最后,还要感谢我的所有学生帮助我对书中的内容进行了实际的检验。
很幸运,我有两个为这本书花费了大量时间和精力的学生:Kelly Montoya,一名CNM的毕业生,从一开始就帮我对书中的每一章内容进行仔细的审阅,并对其中的程序示例做了认真的检查。Kelly很注重书中的内容,认为书的实用性是第一位的,不应该包含任何无关的东西。Kelly的认真和努力在很大程度上让这本书更丰满了。
感谢目前正在CNM攻读学位的Kathleen Hayter,她在本书编写的最后阶段对书中内容做了全面的检查。她知道应该如何使书中的内容更加清晰完整,并对书中的语法、语句结构以及用词都做了很细致的检查。
感谢Prentice Hall公司负责计算机科学图书的编辑们:Tracy Dunkelburger、Carole Snyder、Camille Trentacoste以及Rose Kernan。感谢Tracy为本书提供的宝贵建议和花费的宝贵时间。Carole是我在本书编写过程中的向导和顾问,她总能很平静地处理问题,并在各个方面给予我很大的帮助。Camille和Rose在本书的草稿阶段提供了很多有价值的信息和建议,这使得后面的出版工作容易了许多。感谢Rose在我遇到困难时所带来的帮助和幽默。
还要感谢一些审阅本书的人,包括:Yujiang Shan(南阿肯色大学玉兰分校)、Roseann Witkowski(奥兰治郡社区学院)、Cort Steinhorst(得克萨斯大学达拉斯分校)、Laurie Thompson(得克萨斯大学达拉斯分校)、Martha Sanchez(得克萨斯大学达拉斯分校)、David Chelberg(俄亥俄大学雅典分校)、John Dolan(俄亥俄大学雅典分校)、Chris Lynch(卡拉克森大学)、Amoussou Guy-Alain(洪堡州立大学)、J.Graham(Susquehanna大学)、James Handlan(Susquehanna大学)、James Boettler(南加州大学)、Paul Wilkinson(帕萨迪纳城市学院)、Steven Johnson(帕萨迪纳城市学院)、Sassan Barkeshli(帕萨迪纳城市学院)、Bob Boettcher(北哈里斯学院)、Robert Lambiase(萨福克郡城市学院)、Melanie Sparks(Pitt社区学院)、Sergio Cobo(布罗沃德社区学院)、Matthew Alimagham(斯巴达堡工学院)、Dan“Dusty”Anderson(布鲁菲尔德学院)、Tonya Melvin-Bryant(达勒姆技术社区学院)、Khaled Mansour(Washtenaw社区学院)、Emile Chi(史坦顿岛学院)、Larry Johnson(科罗拉多矿业大学)。

作者简介

Barbara Johnston:Barbara Johnston: 任教于新墨西哥中央社区学院,负责教授AA学位的计算机编程课程。她有20多年的软件开发和教学经验,目前兼任Rapid Imaging Software公司的软件开发工程师,负责开发了美国军用无人驾驶飞行器所使用的SmartCAM3D实时感知软件。

译者简介

何亮 黄国伟 陈志:暂无简介

译者序

应该如何学习一门编程语言并进行程序设计呢?答案是选择一本好的教材,以书中的内容为基础,自己动手去编写程序代码。这样,在学习完这本教材后,你会发现自己不但掌握了书中所介绍的编程语言,而且还积累了许多宝贵的编程经验。《现代 C++程序设计(原书第2版)》就是这样一本书。
本书采用一种通俗易懂的描述方式,详细介绍了 C++编程语言和面向对象程序设计理论。在内容的安排上,本书由浅入深、循序渐进,把面向对象的概念贯穿于全书。这样,读者可以在学习 C++编程语言的过程中,逐渐适应并习惯面向对象的思想。正如书中所提到的:“一旦习惯了面向对象的思维方式,你就不会再试图采用其他的方法了。”本书提供了大量的程序代码以及练习,并分析了编程时经常遇到的一些问题,这些内容可以加深读者对相关内容的理解与掌握。
Barbara Johnston有20多年的教学以及软件开发经验,她知道刚开始接触计算机编程的人究竟需要一本什么样的教材,而且也知道他们经常会遇到什么样的问题。以这些内容为基础,作者编写了这本书。
本书的英文原版是经过作者在实际教学中检验的,非常适合作为一本计算机编程的入门读物,而且可以帮助那些具有一定编程基础的读者对程序设计的相关内容进行梳理,使之更加清晰,从而形成体系。
本书前言、第1章、第2章、第5章、第6章以及附录D至附录I由何亮翻译,第3章、第4章以及附录A至附录C由黄国伟翻译,第7章、第8章由陈志翻译。限于译者水平,翻译不妥之处敬请广大读者批评指正。

何 亮
于南开大学

图书目录

出版者的话
译者序
前言

第1章 C++概述与软件开发1
 1.1 什么是C语言和 C++3
  1.1.1 C和 C++历史回顾3
  1.1.2 C/C++是一门编译语言4
  1.1.3 为什么许多程序员都选择 C++7
 1.2 什么是面向对象7
  1.2.1 C++程序并不一定是面向对象的8
  1.2.2 一个简单的面向对象程序示例8
  1.2.3 面向对象的软件更有优势8
 1.3 结构化设计与面向对象设计9
  1.3.1 ATM——结构化设计9
  1.3.2 采用面向对象方法的ATM——
究竟是谁的任务9
  1.3.3 汽车维护——结构化设计10
  1.3.4 采用面向对象方法的汽车
维护——究竟是谁的任务12
 1.4 软件开发技术概述13
 1.5 问题发现与解决14
 复习题15
第2章 C++的入门知识17
 2.1 编程基础17
  2.1.1 算法设计18
  2.1.2 正确的软件开发步骤19
 2.2 专业术语及工程创建20
 2.3 C++程序的一般格式21
  2.3.1 “Hello World!”程序21
  2.3.2 “Hows the Weather?”程序24
 2.4 程序的数据及数据类型29
  2.4.1 C++的数据类型30
  2.4.2 容器=数据类型,标签=变
量名31
  2.4.3 数据类型修饰符32
  2.4.4 问题分析:整型数据究竟
有多大32
 2.5 C++中的变量声明33
  2.5.1 C++的命名规则33
  2.5.2 在哪里声明变量34
 2.6 C++中的运算符34
  2.6.1 计算路程的程序35
  2.6.2 从键盘输入程序所需数据36
  2.6.3 赋值运算符38
  2.6.4 运算符的优先级38
  2.6.5 数据类型及其存储的值39
  2.6.6 算术运算符42
  2.6.7 自增运算符和自减运算符48
  2.6.8 复合赋值运算符48
 2.7 #define、const和数据类型转换49
  2.7.1 #define预处理指令49
  2.7.2 const修饰符50
  2.7.3 const比#define好吗51
  2.7.4 数据类型转换51
 2.8 关于键盘输入和屏幕输出的更多
内容53
  2.8.1 转义序列53
  2.8.2 ios格式标记54
  2.8.3 流的IO控制符56
 2.9 开始使用类和对象、 C++string类57
 2.10 练习60
 复习题66
第3章 控制语句和循环72
 3.1 关系运算符和逻辑运算符72
 3.2 if语句74
  3.2.1 if-else语句76
  3.2.2 问题分析:在if语句中使用
大括号78
  3.2.3 if-else if-else语句78
  3.2.4 低效的编程方法80
  3.2.5 if-else程序示例81
  3.2.6 嵌套if-else语句82
  3.2.7 条件运算符“?”84
 3.3 switch语句85
 3.4 循环88
  3.4.1 括号的用法89
  3.4.2 无限循环89
 3.5 for循环89
  3.5.1 不要改变循环索引91
  3.5.2 for循环示例91
 3.6 while循环93
 3.7 do while循环96
 3.8 跳转语句97
  3.8.1 break语句98
  3.8.2 continue语句98
 3.9 问题发现与解决99
  3.9.1 五个常见错误99
  3.9.2 调试程序102
 3.10 C++类与vector类103
 3.11 总结105
 3.12 练习107
 复习题122
第4章 函数一:基础130
 4.1 C++中的函数130
  4.1.1 只由一个main函数构成的
程序130
  4.1.2 包含多个函数的程序131
  4.1.3 函数是个好东西133
  4.1.4 三个重要的问题133
 4.2 函数:基本格式133
 4.3 函数的编写要求135
  4.3.1 你想住在 C++旅馆中吗136
  4.3.2 函数为先139
  4.3.3 函数声明或函数原型139
  4.3.4 函数定义、函数标题行与
函数体140
  4.3.5 函数调用142
  4.3.6 传值调用142
  4.3.7 问题分析:未声明的标识符145
 4.4 重载函数146
 4.5 具有默认输入参数列表的函数148
 4.6 局部变量、全局变量和静态变量150
  4.6.1 局部变量150
  4.6.2 块范围150
  4.6.3 全局变量151
  4.6.4 危险的全局变量152
  4.6.5 问题分析:全局变量y0、y1
与cmath153
  4.6.6 静态变量154
 4.7 C++ stringstream类155
 4.8 总结157
 4.9 练习159
 复习题173
第5章 函数二:变量地址、指针
以及引用179
 5.1 数据变量和内存179
  5.1.1 sizeof运算符180
  5.1.2 预留内存180
  5.1.3 计算机内存和十六进制181
 5.2 取地址运算符&182
 5.3 指针184
 5.4 函数、指针以及间接运算符186
  5.4.1 解决思路186
  5.4.2 指针和函数187
  5.4.3 有效处理大型数据189
 5.5 函数和引用190
  5.5.1 复习:两种机制192
  5.5.2 为什么要强调指针的重要性194
 5.6 queue类194
 5.7 总结197
 5.8 练习200
 复习题210
第6章 数组214
 6.1 使用单个数据变量214
 6.2 数组基础215
  6.2.1 数组的索引值从0开始216
  6.2.2 使用for循环和数组来实现的电话
账单程序216
  6.2.3 数组的声明和初始化218
  6.2.4 数组越界==严重的问题220
  6.2.5 vector与数组的比较222
 6.3 数组和函数224
  6.3.1 每个数组都有一个指针224
  6.3.2 数组指针224
  6.3.3 向函数传递数组:最开始的
引用调用225
  6.3.4 利用数组和函数生成随机数
并进行排序227
 6.4 C字符串,也称为字符数组230
  6.4.1 字符数组的初始化230
  6.4.2 null字符231
  6.4.3 C字符串的输入232
  6.4.4 C++中提供的字符数组函数236
 6.5 多维数组238
  6.5.1 二维数组的初始化238
  6.5.2 嵌套的for循环和二维数组239
  6.5.3 利用二维数组来实现Bingo
游戏240
 6.6 多维数组和函数242
  6.6.1 改进的Bingo卡片程序243
  6.6.2 白雪公主:利用二维数组来
存储姓名245
 6.7 利用数据文件对数组赋值246
 6.8 总结252
 6.9 练习253
 复习题264
第7章 类和对象271
 7.1 我们所了解的类和对象271
 7.2 编写自己的类272
  7.2.1 入门实例:自定义日期类272
  7.2.2 第一个 C++类:Date类274
  7.2.3 揭开类的生命之谜281
  7.2.4 set和get函数的作用与
VolumeCalc类288
  7.2.5 PICalculator类291
 7.3 作为类成员的对象294
 7.4 类的析构函数299
 7.5 对象数组301
 7.6 重载运算符与对象305
 7.7 指针、引用和类310
  7.7.1 指针和引用实例310
  7.7.2 处理日期和时间的程序实例312
 7.8 总结314
 7.9 练习317
 复习题331
第8章 继承和虚函数342
 8.1 为什么继承如此重要342
  8.1.1 IceCreamDialog实例342
  8.1.2 Counter类实例343
 8.2 继承基础345
  8.2.1 Counter和DeluxeCounter实例345
  8.2.2 保护成员347  8.2.3 员工、老板和CEO350
 8.3 访问控制符的规范和多继承354
 8.4 继承、构造和析构356
  8.4.1 构造函数和析构函数回顾356
  8.4.2 基类和派生类的默认构造
函数——没有参数356
  8.4.3 在重载的构造函数中使用参数356
  8.4.4 基类和派生类的析构函数356
  8.4.5 医生也是人356
  8.4.6 关于派生类和基类构造函数的
规则360
 8.5 多态和虚函数361
  8.5.1 多态——同一个接口,不同的
行为361
  8.5.2 什么是虚函数362
  8.5.3 虚函数的作用364
 8.6 总结368
 8.7 练习369
 复习题382
附录A 学习使用Visual C++2005
Express Edition388
附录B C++关键字表398
附录C C++运算符407
附录D ASCII码408
附录E 位、字节、内存和十六
进制表示413
附录F 文件输入/输出417
附录G 部分 C++类428
附录H 多文件程序432
附录I Microsoft Visual C++2005
Express Edition的调试器441
术语表449

教学资源推荐
作者: 施霞萍 张欢欢 王瑾德 马可幸
作者: [美] 约翰·戴维·斯通(John David Stone) 著
作者: 过敏意 主编吴晨涛 李超 阮娜 陈雨亭 编著
作者: [美]肯尼斯·A.兰伯特(Kenneth A. Lambert)著
参考读物推荐
作者: [印度]阿南德·巴拉钱德拉·皮莱(Anand Balachandran Pillai)著
作者: 李光琳