《C++语言程式设计(第4版)》是由郑莉、董渊、何江舟编着,2010年清华大学出版社出版的普通高等教育“十一五”国家级规划教材、“十二五”普通高等教育本科国家级规划教材、普通高等教育精品教材、国际精品课程教材。该教材是一本面向初学者的入门教材。
全书共分12章,主要内容包括:绪论,C++简单程式设计,函式,类与对象,数据的共享与保护,数组、指针与字元串,继承与派生,多态性,群体类和群体数据的组织,泛型程式设计与C++标準模板库,流类库与输入输出,异常处理。
基本介绍
- 书名:C++语言程式设计(第4版)
- 作者:郑莉、董渊、何江舟
- ISBN:9787302227984
- 类别:普通高等教育“十一五”国家级规划教材
- 页数:529页
- 出版社:清华大学出版社
- 出版时间:2010年7月1日
- 装帧:平装
- 开本:16开
- 字数:784千字
- CIP核字号:2010095875
成书过程
修订过程
该教材是在前三版的基础上,听取了读者和同行的建议,参考了最新(截止2010年7月)的资料,并根据作者在授课过程中的经验编写而成。第4版主要修改内容如下:
- 删除了原来的第13章;
- 在第2~12章中,每章增加了一节“深度探索”,作为选学内容;
- 编写了贯穿第4~10章的新的综合实例“个人银行账户管理程式”;
- 重新编写了第10章。
该教材第1~3章和第9、11、12章由郑莉编写,第4~8章由董渊、郑莉共同编写,第10章由何江舟编写,各章的综合实例和深度探索由何江舟编写,全书例题由何江舟调试。傅仕星、张瑞丰、田荣牌、孟鸿利、刘才良参加了部分编写工作。
出版工作
2010年7月1日,该教材由清华大学出版社出版。
责任编辑 | 责任校对 | 责任印製 |
---|---|---|
谢琛、薛阳 | 白蕾 | 何芊 |
内容简介
全书共分12章。
第1章绪论:从发展的角度概要介绍了面向对象程式设计语言的产生和特点,面向对象方法的由来和主要的基本概念,并简单介绍了什幺是面向对象的软体工程。最后介绍了信息在计算机中的表示和存储以及程式的开发过程。
第2章C++简单程式设计:讲述C++程式设计的基础知识。首先简要介绍C++语言的发展历史及其特点,接着学习构成C++语句的基本部分:字元集、关键字、标识符、操作符等。还有C++的基本数据类型和自定义数据类型,以及算法的控制结构:顺序、选择和循环结构。“深度探索”介绍变数的实现机制和C++表达式的执行原理。
第3章函式:讲述C++语言的函式。在面向对象的程式设计中,函式对处理问题过程的基本抽象单元,是对功能的抽象。同时,使用函式也为代码的重用提供了技术上的支持。主要从套用的角度讲述各种函式的定义和使用方法。“深度探索”介绍运行栈与函式调用的执行、函式声明与类型安全。
第4章类与对象:首先介绍面向对象程式设计的基本思想及其主要特点:抽象、封装、继承和多态。接着围绕数据封装这一特点,着重讲解面向对象设计方法的核心概念--类。其中包括类的定义、实现以及如何利用类来解决具体问题。最后,简单介绍了如何用UML语言描述类的特性。“深度探索”介绍位域、用构造函式定义类型转换,以及对象作为函式参数和返回值的传递方式。
第5章数据的共享与保护:讲述标识符的作用域和可见性及变数、对象的生存期;使用局部变数、全局变数、类的数据成员、类的静态成员和友元来实现数据共享,共享数据的保护,以及使用多档案结构来组织和编写程式,解决较为複杂的问题。“深度探索”介绍常成员函式的声明原则、代码的编译连线与执行过程。
第6章数组、指针与字元串:讨论数组、指针与字元串。数组和指针是C++语言中最常用的複合(构造)类型数据,是数据和对象组织、表示的最主要手段,也是组织运算的有力工具。本章首先介绍数组、指针的基本概念和动态存储分配以及动态数组对象。接着围绕数据和对象组织这一问题,着重讲解如何通过使用数组和指针解决数据、函式以及对象之间的联繫和协调。对于字元串及其处理,本章重点介绍string类。“深度探索”介绍指针与引用的联繫、指针的安全性隐患及其应对方案,以及const_cast的套用。
第7章继承与派生:讲述类的继承特性。围绕派生过程,着重讨论不同继承方式下的基类成员的访问控制问题、添加构造函式和析构函式。接着讨论在较为複杂的继承关係中,类成员的唯一标识和访问问题。“深度探索”介绍组合与继承的区别与联繫、派生类对象的记忆体布局,以及基类向派生类的转换及其安全性问题。
第8章多态性:讲述类的另一个重要特性--多态性。多态是指同样的讯息被不同类型的对象接收时导致完全不同的行为,是对类的特定成员函式的再抽象。C++支持的多态有多种类型,重载(包括函式重载和运算符重载)和虚函式是其中主要的方式。“深度探索”介绍多态类型与非多态类型的区别、运行时类型识别机制,以及虚函式动态绑定的实现原理。
第9章群体类和群体数据的组织:群体是指由多个数据元素组成的集合体。群体可以分为两大类:线性群体和非线性群体。本章介绍几种常用的群体类模板。该章讨论的群体的组织问题,指的是对数组元素的排序与查找方法。排序(sorting)又称分类或整理,是将一个无序序列调整为有序的过程。查找(searching)是在一个序列中,按照某种方式找出需要的特定数据元素的过程。最后“深度探索”介绍模板的实例化机制、为模板定义特殊的实现。
第10章泛型程式设计与C++标準模板库:泛型程式设计就是将程式写得儘可能通用,同时并不损失效率。本章简单介绍C++标準模板库(STL)中涉及的一些概念、术语,以及它的结构、主要的组件的使用方法。重点介绍容器、叠代器、算法和函式对象的基本套用。目的是使读者对STL与泛型程式设计方法有一个概要性的了解。“深度探索”深入介绍深複製与浅複製的问题,另外还介绍了STL组件的类型特徵与STL的扩展问题,以及Boost库。
第11章流类库与输入输出:讲述流的概念,然后介绍流类库的结构和使用。就像C语言一样,C++语言中也没有输入输出语句。但C++编译系统带有一个面向对象的I/O软体包,它就是I/O流类库。“深度探索”介绍宽字元、宽字元串与宽流,以及对象的串列化问题。
第12章异常处理:讲述异常处理问题。异常是一种程式定义的错误。C++中,异常处理是对所能预料的运行错误进行处理的一套实现机制。try,throw和catch语句就是C++语言中用于实现异常处理的机制。有了C++异常处理,程式可以向更高的执行上下文传递意想不到的事件,这样程式能更好地从这些异常事件中恢复过来。“深度探索”介绍异常安全性问题和避免异常发生时的资源泄漏。
教材目录
第1章 绪论1 1.1 电脑程式设计语言的发展1 1.1.1 机器语言与彙编语言1 1.1.2 高级语言2 1.1.3 面向对象的语言2 1.2 面向对象的方法2 1.2.1 面向对象方法的由来3 1.2.2 面向对象的基本概念4 1.3 面向对象的软体开发5 1.3.1 分析5 1.3.2 设计5 1.3.3 编程6 1.3.4 测试6 1.3.5 维护6 1.4 信息的表示与存储6 1.4.1 计算机的数字系统6 1.4.2 几种进位记数制之间的转换8 1.4.3 信息的存储单位10 1.4.4 二进制数的编码表示11 1.4.5 定点数和浮点数15 1.4.6 数的表示範围15 1.4.7 非数值信息的表示16 1.5 程式开发的基本概念16 1.5.1 基本术语16 1.5.2 完整的程式过程17 1.6 小结18 习题18 第2章 C++简单程式设计19 2.1 C++语言概述19 2.1.1 C++的产生19 2.1.2 C++的特点20 2.1.3 C++程式实例20 2.1.4 字元集21 2.1.5 词法记号22 2.2 基本数据类型和表达式23 2.2.1 基本数据类型24 2.2.2 常量25 2.2.3 变数27 2.2.4 符号常量28 2.2.5 运算符与表达式28 2.2.6 语句37 2.3 数据的输入与输出37 2.3.1 I/O流37 2.3.2 预定义的插入符和提取符37 2.3.3 简单的I/O格式控制38 2.4 算法的基本控制结构39 2.4.1 用if语句实现选择结构39 2.4.2 多重选择结构41 2.4.3 循环结构44 2.4.4 循环结构与选择结构的嵌套49 2.4.5 其他控制语句52 2.5 自定义数据类型52 2.5.1 typedef声明53 2.5.2 枚举类型enum53 2.6 深度探索55 2.6.1 变数的实现机制55 2.6.2 C++表达式的执行原理58 2.7 小结60 习题60 第3章 函式64 3.1 函式的定义与使用64 3.1.1 函式的定义64 3.1.2 函式的调用65 3.1.3 函式的参数传递78 3.2 内联函式81 3.3 带默认形参值的函式82 3.4 函式重载84 3.5 C++系统函式86 3.6 深度探索89 3.6.1 运行栈与函式调用的执行89 3.6.2 函式声明与类型安全94 3.7 小结95 习题96 第4章 类与对象98 4.1 面向对象程式设计的基本特点98 4.1.1 抽象98 4.1.2 封装99 4.1.3 继承100 4.1.4 多态100 4.2 类和对象100 4.2.1 类的定义101 4.2.2 类成员的访问控制102 4.2.3 对象103 4.2.4 类的成员函式104 4.2.5 程式实例106 4.3 构造函式和析构函式107 4.3.1 构造函式107 4.3.2 複製构造函式109 4.3.3 析构函式113 4.3.4 程式实例114 4.4 类的组合116 4.4.1 组合116 4.4.2 前向引用声明120 4.5 UML图形标识122 4.5.1 UML简介122 4.5.2 UML类图123 4.6 结构体和联合体129 4.6.1 结构体129 4.6.2 联合体130 4.7 综合实例--个人银行账户管理程式133 4.7.1 类的设计133 4.7.2 源程式及说明134 4.8 深度探索137 4.8.1 位域137 4.8.2 用构造函式定义类型转换139 4.8.3 对象作为函式参数和返回值的传递方式140 4.9 小结143 习题144 第5章 数据的共享与保护146 5.1 标识符的作用域与可见性146 5.1.1 作用域146 5.1.2 可见性150 5.2 对象的生存期150 5.2.1 静态生存期150 5.2.2 动态生存期151 5.3 类的静态成员153 5.3.1 静态数据成员154 5.3.2 静态函式成员156 5.4 类的友元158 5.4.1 友元函式160 5.4.2 友元类161 5.5 共享数据的保护163 5.5.1 常对象163 5.5.2 用const修饰的类成员164 5.5.3 常引用166 5.6 多档案结构和编译预处理命令168 5.6.1 C++程式的一般组织结构168 5.6.2 外部变数与外部函式170 5.6.3 标準C++库172 5.6.4 编译预处理173 5.7 综合实例--个人银行账户管理程式176 5.8 深度探索180 5.8.1 常成员函式的声明原则180 5.8.2 代码的编译连线与执行过程182 5.9 小结185 习题185 第6章 数组、指针与字元串188 6.1 数组188 6.1.1 数组的声明与使用188 6.1.2 数组的存储与初始化190 6.1.3 数组作为函式参数193 6.1.4 对象数组194 6.1.5 程式实例196 6.2 指针199 6.2.1 记忆体空间的访问方式199 6.2.2 指针变数的声明200 6.2.3 与地址相关的运算“”和“&" 200 6.2.4 指针的赋值201 6.2.5 指针运算203 6.2.6 用指针处理数组元素205 6.2.7 指针数组206 6.2.8 用指针作为函式参数209 6.2.9 指针型函式210 6.2.10 指向函式的指针211 6.2.11 对象指针213 6.3 动态记忆体分配218 6.4 用vector创建数组对象224 | 6.5 深複製与浅複製226 6.6 字元串229 6.6.1 用字元数组存储和处理字元串230 6.6.2 string类230 6.7 综合实例--个人银行账户管理程式234 6.8 深度探索241 6.8.1 指针与引用241 6.8.2 指针的安全性隐患及其应对方案243 6.8.3 const_cast的套用246 6.9 小结248 习题248 第7章 继承与派生251 7.1 类的继承与派生251 7.1.1 继承关係举例251 7.1.2 派生类的定义252 7.1.3 派生类生成过程254 7.2 访问控制256 7.2.1 公有继承256 7.2.2 私有继承258 7.2.3 保护继承260 7.3 类型兼容规则262 7.4 派生类的构造和析构函式264 7.4.1 构造函式265 7.4.2 複製构造函式267 7.4.3 析构函式268 7.5 派生类成员的标识与访问270 7.5.1 作用域分辨符270 7.5.2 虚基类276 7.5.3 虚基类及其派生类构造函式278 7.6 程式实例--用高斯消去法解线性方程组279 7.6.1 算法基本原理279 7.6.2 程式设计分析280 7.6.3 源程式及说明281 7.6.4 运行结果与分析286 7.7 综合实例--个人银行账户管理程式287 7.7.1 问题的提出287 7.7.2 类设计288 7.7.3 源程式及说明289 7.7.4 运行结果与分析294 7.8 深度探索295 7.8.1 组合与继承295 7.8.2 派生类对象的记忆体布局298 7.8.3 基类向派生类的转换及其安全性问题301 7.9 小结303 习题304 第8章 多态性306 8.1 多态性概述306 8.1.1 多态的类型306 8.1.2 多态的实现306 8.2 运算符重载307 8.2.1 运算符重载的规则308 8.2.2 运算符重载为成员函式309 8.2.3 运算符重载为非成员函式313 8.3 虚函式315 8.3.1 一般虚函式成员316 8.3.2 虚析构函式319 8.4 纯虚函式与抽象类321 8.4.1 纯虚函式321 8.4.2 抽象类322 8.5 程式实例——变步长梯形积分算法求解函式的定积分324 8.5.1 算法基本原理324 8.5.2 程式设计分析325 8.5.3 源程式及说明326 8.5.4 运行结果与分析329 8.6 综合实例--对个人银行账户管理程式的改进329 8.7 深度探索335 8.7.1 多态类型与非多态类型335 8.7.2 运行时类型识别337 8.7.3 虚函式动态绑定的实现原理340 8.8 小结343 习题344 第9章 群体类和群体数据的组织346 9.1 函式模板与类模板347 9.1.1 函式模板347 9.1.2 类模板350 9.2 线性群体353 9.2.1 线性群体的概念353 9.2.2 直接访问群体--数组类355 9.2.3 顺序访问群体--鍊表类363 9.2.4 栈类368 9.2.5 伫列类374 9.3 群体数据的组织377 9.3.1 插入排序377 9.3.2 选择排序379 9.3.3 交换排序380 9.3.4 顺序查找381 9.3.5 折半查找381 9.4 综合实例--对个人银行账户管理程式的改进382 9.5 深度探索385 9.5.1 模板的实例化机制385 9.5.2 为模板定义特殊的实现388 9.5.3 模板元编程简介392 9.6 小结395 习题395 第10章 泛型程式设计与C++标準模板库398 10.1 泛型程式设计及STL的结构398 10.1.1 泛型程式设计的基本概念398 10.1.2 STL简介399 10.2 叠代器402 10.2.1 输入流叠代器和输出流叠代器403 10.2.2 叠代器的分类405 10.2.3 叠代器的区间407 10.2.4 叠代器的辅助函式409 10.3 容器410 10.3.1 容器的基本功能与分类410 10.3.2 顺序容器412 10.3.3 关联容器427 10.4 函式对象435 10.4.1 函式对象基本概念及分类436 10.4.2 函式适配器441 10.5 算法447 10.5.1 STL算法基础448 10.5.2 不可变序列算法448 10.5.3 可变序列算法451 10.5.4 排序和搜寻算法455 10.5.5 数值算法459 10.6 综合实例--对个人银行账户管理程式的改进461 10.7 深度探索467 10.7.1 swap467 10.7.2 STL组件的类型特徵与STL的扩展469 10.7.3 Boost简介476 10.8 小结478 习题478 第11章 流类库与输入输出481 11.1 I/O流的概念及流类库结构481 11.2 输出流483 11.2.1 构造输出流对象483 11.2.2 使用插入运算符和操纵符484 11.2.3 档案输出流成员函式488 11.2.4 二进制输出档案490 11.2.5 字元串输出流491 11.3 输入流492 11.3.1 构造输入流对象492 11.3.2 使用提取运算符493 11.3.3 输入流操纵符493 11.3.4 输入流相关函式493 11.3.5 字元串输入流497 11.4 输入输出流498 11.5 综合实例--对个人银行账户管理程式的改进498 11.6 深度探索503 11.6.1 宽字元、宽字元串与宽流503 11.6.2 对象的串列化507 11.7 小结510 习题510 第12章 异常处理512 12.1 异常处理的基本思想512 12.2 C++异常处理的实现512 12.2.1 异常处理的语法513 12.2.2 异常接口声明515 12.3 异常处理中的构造与析构516 12.4 标準程式库异常处理517 12.5 综合实例--对个人银行账户管理程式的改进520 12.6 深度探索523 12.6.1 异常安全性问题523 12.6.2 避免异常发生时的资源泄漏525 12.7 小结528 习题529 |
(注:目录排版顺序为从左列至右列)
教学资源
该教材有配套教材——《C++语言程式设计(第4版)学生用书》。
书名 | 书号 | 出版社 | 出版时间 | 作者 |
---|---|---|---|---|
《C++语言程式设计(第4版)学生用书》 | 9787302253525 | 清华大学出版社 | 2011.06.01 | 郑莉 |
教材特色
该教材将C++语言作为计算机编程入门语言,不仅介绍了语言本身,而且介绍了常用的数据结构和算法、面向对象的设计思想和编程方法、UML建模语言。全书以面向对象的程式设计方法贯穿始终,每一章都是首先阐述面向对象的程式设计思想和方法,由实际问题入手,然后引出必要的语法知识,在讲解语法时着重从程式设计方法学的角度讲述其意义和用途。该教材的宗旨是,不仅要使读者掌握C++语言本身,而且要能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述。
针对初学者和自学者的特点,该教材将複杂的概念用简洁浅显的语言娓娓道来。不同学校可以针对自身的教学特点,选择不同的章节组合进行教学。如果学时较少,可以只选择第1~8章、第11章。每一章的深度探索也是选学内容,可以根据不同专业的教学需求进行选择。
作者简介
郑莉,女,硕士,清华大学计算机科学与技术系教授,主要研究方向为计算机套用、计算机教育、教育信息技术。
董渊,男,博士,清华大学计算机科学与技术系副教授,主要研究方向为嵌入式作业系统、编译系统、基于语言的可信软体等。