C++面向对象程序设计(第4版)
定 价:59.9 元
丛书名:高等院校计算机基础教育课程体系特色教材系列
本书是供已学过C语言的读者学习C 面向对象程序设计的教材。C 是国内外广泛学习和使用的支持面向对象程序设计的现代计算机高级语言,国内许多高校已陆续开设了C 程序设计课程。但是,由于C 涉及的概念很多,语法比较复杂,内容十分广泛,不少人感到学习难度很大,难以入门。针对这种情况,作者深入研究了C 的内容和初学者的认知规律,专门为已学习过C语言的读者构建了便于学习的教材体系,编写了这本C 面向对象程序设计入门教材。本书对面向对象程序设计的基本概念和C 语言的基本内容作了全面、通俗而详尽的说明,并且把这两方面有机地结合起来。第1章介绍在面向过程程序设计领域中C 对C的扩充,第2章初步介绍面向对象程序设计的基本知识,第3~8章由浅入深地介绍怎样利用C 编写程序,在此过程中自然地介绍了面向对象程序设计方法的应用。本书内容全面,概念清晰,例题丰富,通俗易懂,易于学习,可作为大学各专业学习C 面向对象程序设计的基础教材,也适于C 的初学者自学。即使没有教师讲授,读者也基本能看懂本书的大部分内容。本书配有两本辅导教材:《C 面向对象程序设计(第4版)学习辅导》和《C 程序设计实践指导》,供教学参考。
本书为普通高等教育十一五国家级规划教材,获全国高校出版社优秀畅销书一等奖。本书内容全面,概念清晰,例题丰富,通俗易懂,深入浅出,易于学习,可作为大学各专业学习C 面向对象程序设计的基础教材,也适于C 的初学者自学。本书内容包括面向对象程序设计的基本理论概念和C 语言的基本內容,并且把这两方面有机地结合起来。第一章介绍面向过程程序设计领域中C 对C的扩充,第二章简要而通俗清晰地介绍了面向对象程序设计的基本知识,在后续各章中由浅入深地介绍怎样编写C 程序,在这过程中自然地具体地介绍了面向对象程序设计方法的应用。
本书是一本介绍C 面向对象程序设计的入门基础教材。目前的主流计算机的指令执行是过程导向的,每个步骤(计算机指令)是依次执行的。因此早期的编程语言也是面向过程的,设计者必须充分地考虑程序的每个细节,要指定程序在每一环节应执行的动作。C语言是面向过程的结构化和模块化的语言,C语言是编写UNIX操作系统的语言,功能强大,使用灵活。它在处理小型问题时得心应手,但在处理大型复杂问题时就显得力不从心了。现代计算机应用已经远远超出了科学计算和控制计算机操作的层面,而是更多地去解决各种各样现实生活与工作中的复杂问题,如模拟气象现象,制作文字、图形、视频作品等。为了处理复杂应用程序,计算机科学家提出了面向对象程序设计的理论,并于20世纪末期在C语言的基础上推出支持面向对象的C 语言,为处理复杂应用程序提供了有力的工具。近年来,国内许多大学的计算机类专业都开设了C 程序设计课程,一些大学的非计算机专业也开设了C 面向对象程序设计课程,许多学过C语言程序设计的人也想了解和学习C 和面向对象程序设计的有关知识。但是,由于C 涉及概念很多,语法比较复杂,内容十分广泛,使不少人感到学习难度较大,难以入门。应读者的要求,作者在十多年前编著了《C 程序设计》一书,由清华大学出版社出版并向全国发行。该书以未学过C语言的读者为对象,从面向过程入手介绍程序设计的基本知识和方法,然后介绍用C 进行面向对象程序设计的方法。由于内容全面,概念清晰,通俗易懂,该书出版后,受到各校师生的欢迎和好评。目前在大学理工类专业,普遍开设了C语言程序设计的课程,许多学生在学习C语言后希望对C 面向对象程序设计有所了解,以便日后在需要时能较快地进入该领域。很多师生希望我能编写一本以C语言为起点的C 教材。为此,几年前我在清华大学出版社出版了《C 面向对象程序设计》一书。该书是在《C 程序设计》一书的基础上编写而成的,已学习过C语言程序设计的读者,不必再重新学习面向过程程序设计的部分,而可以直接从面向对象程序设计入手。作者将《C 程序设计》一书中介绍面向对象程序设计的内容抽出来改写后单独成书,并且重新写了第1章从C到C ,介绍C 面向对象程序设计的初步知识以及C 对C语言在面向过程程序设计方面的扩展,为以后各章的学习打下基础。这样的安排使内容更集中,篇幅更紧凑。该书仍然保持了通俗易懂、贴近读者、容易入门的特点。希望有助于大学生学习C 课程,初步掌握面向对象程序设计的方法。几年前,作者曾对该书进行过修订,出版了《C 面向对象程序设计》(第3版),最近根据教学实践的情况,又进行一次全面的修订。这次修订,在保留原书内容全面、概念清晰的优点的基础上,从章节标题到正文都进行了不少修改和补充,使之更加通俗易懂,容易学习。现在出版《C 面向对象程序设计》(第4版),即本书。在此,对本书的指导思想作以下的说明。1. 教材要准确定位首先要明确教材是为什么人写的,他们学习C 的目的是什么,要学到什么程度,不能无的放矢。推出C 的初衷是解决大型复杂应用软件开发中遇到的问题,提高软件的开发效率。只有参加过研制相对大型软件的人才会真正体验到C 的优越性。应当说明,本书的主要对象不是C 的专业开发人员,而是高校各专业的大学生和自学现代编程语言的读者,本书不是程序员培训班教材。本书的读者一般并无实际程序开发的经验,将来多数人也不一定成为专业的编程人员。不可奢望,通过几十小时的学习,就能使一个没有C 程序设计基础的初学者变成一个熟练的C 开发人员。应当有实事求是的分析和估计。本书的定位是入门与基础。用有效的方法使读者顺利入门,通过学习,打好基础。通过学习本书,多数读者会有以下收获:①清晰地了解面向对象程序设计的方法以及C 的主要功能与特点;②能够用C 编写简单的面向对象的程序;③能看懂别人编写的规模比较小的C 程序; ④奠定进一步学习和应用的良好基础。也就是从不知到初知,从不会到初会。入了门,有了良好的基础,以后提高和应用就不困难了。2. 要设计合适的教材体系,合理取舍内容学习C 面向对象程序设计,应当对面向对象的方法和C 的基本特点有基本的了解。C 面向对象程序设计涉及面向对象程序设计的理论和C 语言的语法两方面,都很重要。本书主要介绍C 处理问题的面向对象的思维方式和C 语言的基本内容。我们不是抽象地介绍面向对象程序设计的理论,也不是枯燥地介绍C 的语法,而是以程序设计为中心把这两方面有机地结合起来。在介绍用C 语言编程的过程中,自然而然地引出面向对象程序设计的有关概念,通过C 编程过程理解面向对象程序设计方法,二者紧密结合,相得益彰。本书内容系统而全面。面向对象程序设计有4个主要特点:抽象、封装、继承和多态性,在C 语言中都有相应的机制来实现它们。作为教材,不能忽略C 的主要内容,本书的内容全面涵盖了以上4方面,提供了详细而通俗的介绍和编程举例。我们努力使读者通过较短时间的学习,能对面向对象方法和C 有基本和全面的了解,而不是陷于烦琐的细节之中。教材不同于使用手册。手册的任务是提供无所不包的使用细节以备查询,而教材的任务是用容易理解的方法讲清楚有关的基本概念和基本方法。不能把教材写成包罗万象的手册,否则将会使篇幅过大,而且会冲淡重点,主次不分,使读者感到枯燥无味。本书的做法是:从应用出发,对编程所用到的最基本内容和注意的问题都作了详细的说明,但是并不罗列C 语法中过多的细节,需要时把一些细节列出成表,供用时查阅。希望读者在学习时多理解,勿死记,以把主要精力放在基本概念和基本方法上。要深入了解和掌握面向对象程序设计的概念和方法,是一个学习实践再学习再实践的过程,不可能一蹴而就。在初学阶段,要引导读者初步理解面向对象的概念,并由简到繁地学会编写C 程序。奠定了C 编程的初步基础,以后再进一步提高。这样的方法可能符合大多数学习者的情况,降低了学习难度。3. 概念清晰,深入浅出,化难难点,容易学习C 不容易学,也不容易教。作者在写作过程中花了很大的精力考虑怎样使读者接受和理解。作者一贯认为:教材编著者应当与读者将心比心,换位思考,要站在读者的角度思考和提出问题,帮助他们解除学习中的困难。要善于把复杂的问题简单化,而不应当把简单的问题复杂化,要善于化解难点,深入浅出。作者着力使读者对于面向对象的方法和C 的特点有清晰、准确和全面的认识。有一些面向对象的概念,名词很抽象,理论很难懂,有的初学者会被唬住,感到高深莫测。作者用通俗易懂的方法和语言叙述清楚复杂的概念,化解学习中的困难。读者可以看到,在本书中,几乎对每一个新出现的概念,都会用日常生活中的例子加以通俗地说明,一看就懂,很容易理解和入门。希望读者不要被一大堆高深莫测的名词术语吓住,有些问题看起来很深奥,其实换一个角度去解释就很容易理解,一个通俗的例子就把问题说清楚了。C 的名词术语很多,一般C 的教材的章节标题都是一些陌生的、深奥莫测的专业词汇,往往使人摸不着头脑,不知道要学的是什么,难以引发学习的兴趣和欲望。作者经过反复思考,改变了标题的写法,不是简单地列出一个名词术语,而是着重说明它是解决什么问题的。例如,原来有一节的标题是带参的构造函数,这次作者把它改为用带参的构造函数对不同对象进行初始化,读者从标题就可以知道带参的构造函数是为了对象初始化的,从前一节到下一节,前后连贯,承上启下,读者就会想看看究竟是怎样处理的。又如,有一节的标题是友元,读者第一次听到这个术语,往往不知所云,这次作者把标题改为可以访问私有数据的朋友,通俗易懂,具有目的性和启发性,使读者想去了解和学习。学习的过程不应该是教师讲什么,学生学什么的被动式学习,应当形成学生主动思考问题、主动学习的局面。在各章的叙述中,本书不是先给出一个新概念或新术语,再去解释它,而是先提出需要解决的问题,然后讨论用什么方法去处理它,从而引出新的概念和新的方法。传统的教学三部曲是:提出概念解释概念举例说明,作者在多年的计算机教学实践中,采用了新的教学三部曲:提出问题分析和解决问题归纳分析。 在引入每个程序时,都按照以下几个步骤展开:提出问题编写程序运行结果程序分析。由浅入深,逐步展开。不是先理论后实际,先抽象后具体,先一般后个别,而是从具体到抽象,从实际到理论,从个别到一般,从零散到系统。这样做,符合初学者的认知规律。4. 教学过程要采取容易入门,逐步提高的方法(1) 精心选择例子。教材中的例题是基础性质的,是为了帮助读者更好地理解某一方面的教学内容而专门编写的,相对简单,容易理解。作者认为,在初学阶段的例题不宜太复杂,更不宜把一些比较复杂的实际应用的程序直接搬到课堂当作例题。一个实用的C 程序需要考虑许多因素,综合各部分知识,有许多注释行,而且一般是多文件的程序包,读懂这类大型程序往往需要一定的经验。作为教学程序要对问题进行简化,尽量压缩不必要的语句。本书中的例题的选择原则是:①通过例题能更深入地理解有关的概念和编程方法。②篇幅一般不太长,绝大多数读者能独立读懂程序。③通过程序举例使读者掌握编程的方法和技巧。(2) 在初步掌握C 编程方法后,后续阶段学习的例题程序会逐渐复杂一些。各章例题的难度是循序渐进的,每一个台阶都不大,读者能在原来的基础上逐步提高。(3) C 面向对象程序设计的概念较多,语法复杂。有的读者往往把精力放在弄清楚一个个具体问题上,而在学完一章后对全章的内容缺乏整体的概念。建议读者对于教材每一章的内容至少认真读两遍,第一遍弄清楚各个部分的内容,不留死角。然后在学完全章后再从头到尾认真看一遍,把各个知识点串成一条线,建立一个整体的概念,知道本章讲了什么,重点在哪里,难点在哪里,在编程中怎样使用它们。在开始学习时是化整为零,各个击破,然后再化零为整,形成整体的认识。这样做的读者都会有很大收获。(4) 不要满足于能看懂例题程序,而应当在学完每一章后自己独立编写比例题难度大一点的程序。在各章最后的习题中,有些题的难度比教材中的例题稍大一些,希望教师能从中选择一些指定学生完成,并通过上机实践,进一步掌握C 的调试与运行的方法。(5) 在学完本教材各章后,最好学习一些综合的程序实例,以巩固收获,提高编程能力。本书的参考用书《C 程序设计实践指导》,提供了约50个实用或接近实用的程序,教师可以从中选择一些在课堂讲授,或者指定学生自己阅读参考。(6) 本书便于自学,即使没有老师讲解,读者也能看懂本书的大部分内容。老师可以要求学生先自学,然后在课堂上选择重点内容讲授。有些语法中的具体的规定可以不必讲授,由学生自学。5. C 教材应当体现C 标准C 是从C语言发展而来的。多数编译器同时兼容C语言与C 。C 中有很多语法是继承了C语言的(当然也有不少改进)。熟悉C语言编程的人往往会沿用某些C语言的传统用法,例如,头文件带后缀.h;使用系统库时不使用命名空间;早期的C语言允许主函数为void类型、主函数可以无返回值等。但是,ANSI C 标准在一些方面有新的规定。例如,要求主函数为int类型,如果程序正常执行,则返回0值;系统头文件不带后缀.h;使用系统库时使用命名空间std;增加了字符串类型string等。虽然C 编译器仍然允许使用从C语言继承来的一些传统用法,但作者认为,作为教材,应当提倡C 的标准用法。引导读者从一开始就按照C 标准编写程序,养成C 的编程习惯和风格。本书各章都是依据C 标准介绍的,同时也说明允许使用的C语言的传统用法。在本书中,程序的形式大致如下:#include//头文件不带后缀.h#include//包含string头文件,以便程序中使用字符串变量using namespace std;//使用系统库时使用命名空间stdint main() //主函数为int类型{string str; //可以定义字符串变量str…return 0; //程序正常执行则返回0}6. 提供配套的教学资源,满足教学需要考虑不同学校、不同专业、不同读者对学习C 有不同的要求,我们提供了配套的教学资源,供选用。除了主教材外,推荐使用以下两本教学参考书:(1) 《C 面向对象程序设计(第4版)学习辅导》,谭浩强编著,清华大学出版社出版。该书提供主教材各章中的全部习题的解答。由于教材篇幅有限,有些很好的例子无法在教材中列出,因此把它们作为习题,希望读者自己完成,教师也可以从中选择一些习题作为例题讲授。学生除了完成教师指定的习题外,最好把习题解答中的程序看一遍,以更好地理解C 程序,扩大眼界,启迪思路,丰富知识,增长能力。程序设计是一门实践性很强的课程,只靠听课和看书是学不好的。衡量学习好坏的标准不是懂不懂,而是会不会干。因此必须强调多编程,多上机实践。在《C 面向对象程序设计(第4版)学习辅导》中,还介绍了运行C 程序的方法。此外,书中还给出上机实践任务,要求学生完成若干上机实践。(2) 《C 程序设计实践指导》,陈清华、朱红编著,清华大学出版社出版。该书提供了50多个具有实用价值的C 应用程序。这是为学习教材后进一步深入学习的读者准备的,目的是提高编程能力。该书内容包括: 怎样编写C 应用程序;提供若干不同规模的实际的C 应用程序供分析阅读;安排并指导学生完成1~2个C 应用程序。经过这样的训练,学生的实际能力将会有较大的提高。此外,本书还提供教材中全部例题的源程序,以便于教师上机和讲授,也便于学生在此基础上调试和修改程序,需要者可在清华大学出版社官网下载。同时,还向使用本书的教师免费提供讲课的电子演示文稿(PPT的素材),以节省教师的备课时间。本书由谭浩强教授编写,谭亦峰也参加了部分编写工作。全国高等院校计算机基础教育研究会和浩强工作室的各位专家以及全国各高校老师多年来对作者始终给予了热情的支持和鼓励。清华大学出版社对本书的出版十分重视并作了周到的安排,使本书得以在短时间内出版。对于曾经鼓励、支持和帮助过我的朋友,谨表示真挚的谢意。本书肯定会有不妥之处,诚盼专家和广大读者不吝指正。
谨识2023年9月于清华园
第1章C11.1从C到C 11.2最简单的C 程序21.3C 对C的扩充81.3.1C 的输入输出81.3.2用const定义常变量111.3.3函数原型声明111.3.4函数的重载121.3.5函数模板141.3.6有默认参数的函数161.3.7变量的引用171.3.8内置函数241.3.9作用域运算符251.3.10字符串变量261.3.11动态分配/撤销内存的运算符new和delete291.3.12C 对C功能扩展的小结311.4C 程序的编写和实现311.5关于C 上机实践33习题33第2章类和对象的特性372.1面向对象程序设计方法概述372.1.1什么是面向对象的程序设计372.1.2面向对象程序设计的特点412.1.3类和对象的作用422.1.4面向对象的软件开发432.2类的声明和对象的定义442.2.1类和对象的关系442.2.2声明类的类型452.2.3定义对象的方法472.2.4类和结构体类型的异同482.3类的成员函数492.3.1成员函数的性质492.3.2在类外定义成员函数502.3.3内置成员函数(inline成员函数)512.3.4成员函数的存储方式522.4怎样访问对象的成员542.4.1通过对象名和成员运算符访问对象中的成员542.4.2通过指向对象的指针访问对象中的成员552.4.3通过对象的引用来访问对象中的成员552.5类和对象的简单应用举例552.6类的封装性和信息隐蔽642.6.1公用接口与私有实现的分离642.6.2类声明和成员函数定义的分离652.6.3面向对象程序设计中的几个名词68习题68第3章怎样使用类和对象713.1类对象的初始化713.1.1需要对类对象进行初始化713.1.2用构造函数实现数据成员的初始化723.1.3用带参数的构造函数对不同对象初始化743.1.4在构造函数中用参数初始化表对数据成员初始化763.1.5可以对构造函数进行重载773.1.6构造函数可以使用默认参数793.1.7用构造函数实现初始化方法的归纳823.1.8利用析构函数进行清理工作833.1.9调用构造函数和析构函数的顺序853.2对象数组873.3对象指针893.3.1指向对象的指针893.3.2指向对象成员的指针903.3.3指向当前对象的this指针933.4共用数据的保护943.4.1定义常对象953.4.2定义常对象成员963.4.3指向对象的常指针973.4.4指向常对象的指针变量983.4.5对象的常引用1013.4.6const型数据的小结1023.5对象的动态建立和释放1023.6对象的赋值和复制1043.6.1对象的赋值1043.6.2对象的复制1053.7不同对象间实现数据共享1083.7.1把数据成员定义为静态1083.7.2用静态成员函数访问静态数据成员1103.8允许访问私有数据的朋友1133.8.1可以访问私有数据的友元函数1133.8.2可以访问私有数据的友元类1173.9类模板118习题122第4章对运算符进行重载1264.1为什么要对运算符重载1264.2对运算符重载的方法1284.3重载运算符的规则1314.4运算符重载函数作为类成员函数和友元函数1334.5重载双目运算符1364.6重载单目运算符1414.7重载流插入运算符和流提取运算符1434.7.1重载流插入运算符<<1444.7.2重载流提取运算符>>1464.8有关运算符重载的归纳1484.9不同类型数据间的转换1494.9.1标准类型数据间的转换1494.9.2把其他类型数据转换为类对象用转换构造函数1504.9.3将类对象转换为其他类型数据用类型转换函数151习题157第5章类的继承1585.1继承与派生1585.2派生类的声明方式1615.3派生类的构成1615.4派生类成员的访问属性1635.4.1公用继承1645.4.2私有继承1665.4.3保护成员和保护继承1695.4.4多级派生时的访问属性1735.5派生类的构造函数和析构函数1745.5.1简单的派生类的构造函数1755.5.2有子对象的派生类的构造函数1785.5.3多层派生时的构造函数1815.5.4派生类构造函数的特殊形式1835.5.5派生类的析构函数1845.6多重继承1845.6.1声明多重继承的方法1855.6.2多重继承派生类的构造函数1855.6.3多重继承引起的二义性问题1885.6.4在继承间接共同基类时减少数据冗余用虚基类1915.7基类与派生类的转换1965.8继承与组合1995.9继承在软件开发中的重要意义201习题202第6章C 的多态性2076.1什么是多态性2076.2一个典型的例子2086.3利用虚函数实现动态多态性2146.3.1虚函数的作用2146.3.2静态关联与动态关联2186.3.3在什么情况下应当声明虚函数2196.3.4虚析构函数2206.4纯虚函数与抽象类2216.4.1没有函数体的纯虚函数2216.4.2不能用来定义对象的类抽象类2226.4.3应用实例223习题229第7章输入输出流2307.1C 的输入和输出2307.1.1输入输出的含义2307.1.2C 的I/O对C的发展类型安全和可扩展性2307.1.3C 的输入输出流2317.2标准输出流2367.2.1cout,cerr和clog流2367.2.2标准类型数据的格式输出2387.2.3用流成员函数put输出字符2437.3标准输入流2447.3.1cin流2447.3.2用于字符输入的流成员函数2467.3.3istream类的其他成员函数2507.4对数据文件的操作与文件流2537.4.1文件的概念2537.4.2文件流类与文件流对象2557.4.3文件的打开与关闭2557.4.4对ASCII文件的操作2587.4.5对二进制文件的操作2637.5字符串流268习题273第8章善于使用C2748.1对出现异常情况的处理2748.1.1异常处理的任务2748.1.2异常处理的方法2758.1.3在函数声明中进行异常情况指定2828.1.4在异常处理中处理析构函数2838.2用命名空间避免同名冲突2858.2.1同名冲突2858.2.2什么是命名空间2888.2.3使用命名空间解决名字冲突2908.2.4使用命名空间中的成员的方法2928.2.5使用无名的命名空间2948.2.6使用标准命名空间std2958.3使用早期的函数库296习题297附录A常用字符与ASCII码对照表299附录B运算符与结合性300参考文献302
平台介绍|荣誉资质|联系我们|出版社登陆