新标准C++程序设计教程
新标准C++程序设计教程重点大学计算机专业系列教材新标准C++程序设计教程郭炜编著清华大学出版社北京内容简介本书基于新的C++标准“C+11”,从全新的思路出发,融合作者丰富的编程实践经验,深入浅出地全面介绍C艹+程序设计的过程,包含丰富的样例程序,强调实践性和专业性。本书适合作为高等院校理工类专业程序设计课程的教材、学生自学和做毕业设计的参考书,也可供IT从业人员和编程爱好者参考。本书封面贴有清华大学出版杜防伪标签,无标签者不得销售。版权所有,侵权必究。侵权举报电话:010-6278298913701121933图书在版编目(CIP)数据新标准C艹+程序设计教程/郭炜编著.一北京:清华大学出版社,2012.8重点大学计算机专业系列教材ISBN978-7-302-28380-5I.①新…Ⅱ.①郭…Ⅲ.①C语言一程序设计一教材Ⅳ.①TP312中国版本图书馆CTP数据核字(2012第050118号责任编辑:付弘宇王冰飞封面设计:常雪影责任校对:李建庄责任印制:何芊出版发行:清华大学出版社pagte:http://www.tup.comcn,http://www.wqbook.com地址:北京清华大学学研大厦A座邮编:100084社总机:00-62770175邮购;01062786544投稿与读者服务:010-62776969,service@tup,tsinghua,edu.cn质量反馈:010-6272015,zhiliang@tup.tsinghua.edu.cn课件下载:htp://www.tup.com.cn,010-62795954印装者:三河市李旗庄少明印装厂经销:全国新华书店开本:185mm×260mm印张:28字数:696千字版次:2012年8月第1版印次:2012年8月第1次印刷印数:1~3000定价:;44.50元产品编号:045620-01INTRODUCTION出版说明随着国家信息化步伐的加快和高等教育规模的扩大,社会对计算机专业人才的需求不仅体现在数量的增加上,而且体现在质量要求的提高上,培养具有研究和实践能力的高层次的计算机专业人才已成为许多重点大学计算机专业教育的主要目标。目前,我国共有16个国家重点学科、20个博士点一级学科、28个博士点二级学科集中在教育部部属重点大学,这些高校在计算机教学和科研方面具有一定优势,并且大多以国际著名大学计算机教育为参照系,具有系统完善的教学课程体系、教学实验体系、教学质量保证体系和人才培养评估体系等综合体系,形成了培养一流人才的教学和科研环境重点大学计算机学科的教学与科研氛围是培养一流计算机人才的基础,其中专业教材的使用和建设则是这种氛围的重要组成部分,一批具有学科方向特色优势的计算机专业教材作为各重点大学的重点建设项目成果得到肯定。为了展示和发扬各重点大学在计算机专业教育上的优势,特别是专业教材建设上的优势,同时配合各重点大学的计算机学科建设和专业课程教学需要,在教育部相关教学指导委员会专家的建议和各重点大学的大力支持下,清华大学出版社规划并出版本系列教材。本系列教材的建设旨在“汇聚学科精英、引领学科建设、培育专业英才”,同时以教材示范各重点大学的优秀教学理念、教学方法、教学手段和教学内容等。本系列教材在规划过程中体现了如下一些基本组织原则和特点1.面向学科发展的前沿,适应当前社会对计算机专业高级人才的培养需求。教材内容以基本理论为基础,反映基本理论和原理的综合应用,重视实践和应用环节2.反映教学需要,促进教学发展。教材要能适应多样化的教学需要,正确把握教学内容和课程体系的改革方向。在选择教材内容和编写体系时注意体现素质教育、创新能力与实践能力的培养,为学生知识、能力、素质协调发展创造条件。3实施精品战略,突出重点,保证质量。规划教材建设的重点依然是专业基础课和专业主干课;特别注意选择并安排了一部分原来基础比较好的优秀教材或讲义修订再版逐步形成精品教材;提倡并鼓励编写体现重点大学新标准C++程序设计教程计算机专业教学内容和课程体系改革成果的教材。4.主张一纲多本,合理配套。专业基础课和专业主干课教材要配套,同一门课程可以有多本具有不同内容特点的教材。处理好教材统一性与多样化的关系;基本教材与辅助教材以及教学参考书的关系;文字教材与软件教材的关系,实现教材系列资源配套。5.依靠专家,择优落实。在制订教材规划时要依靠各课程专家在调查研究本课程教材建设现状的基础上提出规划选题。在落实主编人选时,要引入竞争机制,通过申报、评审确定主编。书稿完成后要认真实行审稿程序,确保出书质量。繁荣教材出版事业,提高教材质量的关键是教师。建立一支高水平的以老带新的教材编写队伍才能保证教材的编写质量,希望有志于教材建设的教师能够加入到我们的编写队伍中来。教材编委会FOREWOR D前言本书的写作背景C+功能强大、运用广泛,许多大学都将其作为入门的程序设计语言进行教学。笔者在北京大学信息科学技术学院讲授C++程序设计已有10年,随着时间的推移,渐觉现有的教材已经不能满足教学的需要,于是萌生了自己编写一本教材的想法。C艹+有两大特点:支持面向对象的程序设计和支持泛型程序设计。然而,国内大部分教材往往对“泛型程序设计”这部分内容基本忽略,或只是略作交待。这导致许多学过或准备学C++的学生有如下印象:C+是为了编写大型的程序而设计的,如果编写一个十几,几十行的小程序,没有必要用C++,用C语言就足够了。实际上,编写很小的程序用面向对象的程序设计方法确无必要,但不等于用C+没必要。C++中的标准模板库(STL)是泛型程序设计的最成功应用,其中包含许多常用的数据结构(如动态数组、栈等)和算法(如排序、二分查找等),STL即便应用于十几行的程序中,也能有效地提高编程效率。对熟练的C++程序员来说,编写一个十几行的程序多半不会考虑到面向对象的程序设计,但会很自然地用到STL。在笔者看来,如果计算机专业的学生学了C++却不会用STL,那么找工作面试的时候是会受影响的C++标准委员会成员 Andrew Koenig有句名言“库设计就是语言设计,语言设计就是库设计。”学了C+语言,却不会用该语言的核心库,对于计算机专业的学生来说,这样的教学很难说是成功的。国内大多数C++教材对泛型程序设计和STL讲述甚少,国外虽有几部经典教材,全面覆盖了C++的两大特点,但是都卷帙浩繁,动輒近千页,不适合初学者。为解决这个矛盾,笔者编写了本教材,篇幅适当,全面讲述了C++面向对象的各种特性此外还覆盖了标准模板库90%以上的内容。初学者通过本书的学习,可以比较全面地掌握C++程序设计语言的精髓。另外,大多数C++教材依据的是1998年的C++标准(一般称为“C++98”)。而在1998年后,C+标准进行了一些修订,加入了一些新特性,2011年C++标准委员会又通过了新的C++标准“C++11”。这些变化在大多数教材中没有新标准C+程序设计教程体现。让教材与时俱进,也是笔者编写本教材的初衷之一二、本书的特点1。内容深广却通俗易懂,入门与提高并重木书面向大学计算机专业的低年级学生,或非计算机专业但对编程能力要求较高的学生。本书可作为入门的程序设计语言教学之用,没学过C语言的读者可以直接学习本书。本书内容很广,覆盖了C++语言的方方面面,全面讲述了标准模板库STL的用法,几乎可以作为C+语言的参考手册来查阅。第4篇“C++高级主题”中的内容更是大多数同等篇幅的教材所不曾涉及的。而且,由于本书的宗旨是让读者不但要知其然,还要知其所以然,因此对于C+的一些语法特性,不但介绍如何使用,还会讲解C++为什么会有这个语法特性,甚至该特性是如何实现的,如“多态”的实现方法。笔者有10年的C++语言第一线教学经验,非常清楚学生在学习C++时哪些地方不易掌握,会提出什么样的问题,以及他们的问题应该如何回答。因此,在本书写作时,就已经将学生困惑的解答融入其中,用精简的语言直指问题的重点、难点和本质,可以说将有跟的文字都用在了刀刃上。笔者的目标是力图做到“读者不用教师讲授,也能独立看懂本书”。2.紧扣C++标准国内大多数C+教材依据的是1998年的C++标准“C++98”。许多教材甚至都不能完全符合“C++98”的标准,这从其声称“程序都在 Visual c++6.0中编译通过”就可看出Visual c++6.0并不是严格遵循“C++98”标准的编译器。日目前,对C++标准支持最好的编译器有 gNU gcc和微敦的uaC++10.0(包含在 Visual studi2010中)等。本书中的所有程序除个别有特殊说明的以外,都同时在 Visual c++10.0和DevC++4.9.9.2(其内核编译器是gc)中编译通过,并且运行结果相同,可以保证是符合C++标准的,而不是某种“C++方言”。最新的“C++1”标准通过的时间很短,目前还没有编译器能完全支持它。因此,本书不可能完全以“C+11”作为依据。本书的主要依据依然是“C++98”,但是收录了几个“C+98”之后新引入的特性,如“ long long"数据类型、无序容器(即哈希表)、智能指针 shared_ ptr等。本书中的头文件都是C++风格的,不像某些教材仍然使用C语言风格的头文件。另外,许多教材中的程序在用到字符串时往往使用C语言风格的字符数组,而本书则尽量使用C++风格的 string对象处理字符串。3.程序实例丰富实用,贴近编程实践笔者不仅具有丰富的C++教学经验,还有着数十万行的C+商业软件开发经验。笔者独立开发了多种流行的英语学习软件,如《我爱背单词》、《我爱背句子》、《我爱学语法》、《我爱学音标》、《角斗士超级复读机》等,还开发了背单词的网站“爱单词网”。这些软件大量使用C+语言进行开发,有的完全用C++写成。因此,笔者自认为在对C+语言的运用和理解方面,比一般的教材作者多了一些心得,更能从实践的角度阐述如何运用C++的各种特性。本书中所有样例程序都由笔者精心编写,绝非网上复制所得。程序风格优美,贴近现实,对实践的指导意义很强。4.强调程序设计基本思想的培养笔者担任北京大学ACM国际大学生程序设计竞赛队教练已有8年,手下的队员都是V前言北京大学最出色的编程高手。他们的成长、求学、求职经历可以验证,算法才是程序设计的核心。学习程序设计决不是仅仅掌握一门语言的语法,更重要的是掌握算法。只掌握语言的语法,在碰到具体问题时往往还是不知道如何去编程解决。作为入门的程序设计语言教材,本书不可能讲述太多的算法,但是程序设计的基本思想是必定要涉及的。为此,本书专门辟出一章,讲述了枚举、递归、二分3种基本的程序设计思想。此外,其他章节的一些例题和程序也能体现程序设计的基本思路三、内容编排本书主要分为以下四篇。第1篇结构化程序设计:是对C语言的继承以及在C语言基础上的一些扩充。学过C语言的读者可以粗略阅读甚至跳过此篇大部分内容,但是需要学习目录中带“*"的章节,这些章节仍然是C语言中没有的内容。第2篇面向对象的程序设计:包含类和对象、运算符重载、继承、多态等内容,是C++语言的学习重点。第3篇泛型程序设计:包括如何编写模板,以及如何使用标准模板库STL。即便不想用面向对象的程序设计方法编程,学习STL也是大有裨益的第4篇C艹+高级主题:涉及了异常处理、名字空间、C艹+风格的强制类型转换等C+语言中比较深入的内容,以及C++11标准引入的几个新特性。本书各章最后都有小结和习题。各章内的讲述中还穿插了许多思考题,思考题难度较大,很适合作为启发式教学的讨论话题四、总结总而言之,本书书名中的“新标准”有两层含义:第一层含义是指本书所有的讲述和程序都是严格遵循C+标准的,而且提及了一些新C+标准的内容;第二层含义更为重要,指的是希望读者通过本书的学习,对C+的掌握程度能够达到更高的标准,除了深入理解面向对象的程序设计外,还能够进行泛型程序设计并熟练使用STL。本书的配套课件和书中的例题程序代码可以从清华大学出版社网站Rwww.tup.comcn下载。如果在本书和课件的下载使用中遇到问题,请联系fuhy@tup. tsinghua.edu,cn。五、鸣谢编写本书的动力来自作者在北京大学信息学院“程序设计实习”课程的教学经历。感谢课程主持人李文新教授对作者在教学中的支持和指导。还要感谢多年来共同讲授此课程的余华山老师、田永鸿老师,和他们的讨论使我获益良多。三位老师编写的讲义,也是本书的重要参考。感谢您选用本书。由于笔者水平所限,不足之处在所难免,欢迎读者及同仁们批评指正,笔者不胜感激。笔者的E-mail:gwpl@pku,edu.cn郭炜2012年6月于北京大学CONTENTS目录第1篇结构化程序设计第1章计算机基础知识1.1信息在计算机中的表示和存储………1.1.1如何用0和1表示各种信息31.1.2二进制和十六进制1.1.3整数和小数的计算机表示………………………………61.2计算机程序设计语言……………………………………71.2.1机器语言1.2.2汇编语言…1.2.3高级语言7891.3C+语言的历史……1.4小结∵………………………………………………………11习题…12第2章C++语言的基本要素…………………………132.1C++的标识符…………132.2C+的关键字……2.3最简单的C++程序………………………………………………142.4变量…………162,4.1变量的定义…162.4.2变量的初始化…………………162.4.3变量的赋值………172.4.4常变量………172.5C++的数据类型…172.5.1C++基本数据类型…………172.5.2数据类型自动转换18
用户评论
good!!! I like this one!