清华大学计算机基础教育课程系列教材:C++程序设计基础教程
定 价:33 元
- 作者:郑莉 ,董渊 著
- 出版时间:2010/8/1
- ISBN:9787302233619
- 出 版 社:清华大学出版社
- 中图法分类:TP312C
- 页码:336
- 纸张:胶版纸
- 版次:1
- 开本:16开
《C++程序设计基础教程》针对程序设计的初学者,以面向对象的程序设计思想为主线,以通俗易懂的方法介绍C++语言,引导读者以最自然的方式,将人类习惯的面向对象的思维方法运用到程序设计中。主要内容包括程序设计基础知识、类与对象的基本概念、继承与多态以及输入输出流。整套教材语言生动、流畅,深入浅出。适用于各类学校的C++语言程序设计课程。
《C++程序设计基础教程》是《C++语言程序设计》系列教材之一,根据《C++语言程序设计(第3版)》修订而成,针对程序设计的初学者,以面向对象的程序设计思想为主线,以通俗易懂的方法介绍C++语言,引导读者以最自然的方式,将人类习惯的面向对象的思维方法运用到程序设计中。全书以面向对象的程序设计方法贯穿始终,每一章都是首先阐述面向对象的程序设计思想和方法,由实际问题入手,然后引出必要的语法知识,在讲解语法时着重从程序设计方法学的角度讲述其意义和用途。《C++程序设计基础教程》的宗旨是,不仅要使读者掌握C++语言本身,而且要能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述。 《C++语言程序设计》系列教材提供了全面和细致的学习辅助资源,可以为不同读者提供个性化的学习辅导。
一、 版本说明
本书是《C++语言程序设计(第4版)》的姊妹篇。《C++语言程序设计》第1版于1999年出版,第2版于2001年出版,第3版于2003年出版。在前三版基础上,广泛听取了读者和同行的建议,参考了最新的资料,并根据作者本人在授课过程中的经验,针对不同的教学要求,将这本书分成了两个不同的版本: 《C++程序设计基础教程》和《C++语言程序设计(第四版)》。本书适合用于程序设计课程学时较少的学校和专业。
与《C++语言程序设计(第3版)》相比,本书主要在以下方面作了修订:
1. 去掉了原来的第9、10、12、13章。
2. 从第4章开始,每章编写了新的综合实例“个人银行账户管理程序”.
3. 部分例题有更新。
与《C++语言程序设计(第4版)》相比,去年了第9、10、12章,去掉了每章的“深度探索”一节。
二、 本书的编写背景
C++是从C语言发展演变而来的一种面向对象的程序设计语言。C++语言的主要特点表现在两个方面: 一是兼容C,二是支持面向对象的方法。
面向对象的程序设计(OOP)方法将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体--对象。对同类型对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口,与外界发生关系,对象与对象之间通过消息进行通讯。这样,程序模块间的关系简单,程序模块的独立性、数据的安全性具有良好的保障,通过继承与多态性,使程序具有很高的可重用性,使得软件的开发和维护都更为方便。
由于面向对象方法的突出优点,目前它已经成为开发大型软件时所采用的主要方法。而C++语言是应用最广泛的面向对象的程序设计语言之一。
长期以来,C++语言被认为是较难使用的专业开发语言,特别是对于程序设计类课程学时较少的学校和专业,很难开设C++程序设计课程。
实际上面向对象方法的出现,是程序设计方法发展的一个返朴归真过程。软件开发从本质上讲,就是对软件所要处理的问题域进行正确的认识,并把这种认识正确地描述出来。面向对象方法所强调的基本原则,就是直接面对客观存在的事物来进行软件开发,将人们在日常生活中习惯的思维方式和表达方式应用在软件开发中,使软件开发从过分专业化的方法、规则和技巧中回到客观世界,回到人们通常的思维。
虽然C++语言是从C语言发展而来的,但是学习C++可以不必从C语言开始,C++本身是一个完整的程序设计语言,是可以作为入门的程序设计语言来学习的。
本书就是针对初学者的入门教程,适合用于开设一门学时不多的C++课程。
三、 本书的特色
本书的特色是涵盖了C++语言的主要语法、面向对象的程序设计方法,内容深入浅出、立体配套。
全书以面向对象的程序设计方法贯穿始终,每一章都是首先阐述面向对象的程序设计思想和方法,由实际问题入手,然后引出必要的语法知识,在讲解语法时着重从程序设计方法学的角度讲述其意义和用途。本书的宗旨是,不仅要使读者掌握C++语言本身,而且要能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述。当然,要达到能够描述较复杂的问题域还需要学习面向对象的软件工程课等其他课程。
针对初学者和自学者的特点,本书力求做到深入浅出,将复杂的概念用简洁浅显的语言娓娓道来。
本书建议的讲课学时数为24学时。建议讲课学时数分配如下:
第1章2学时,第2章4学时,第3章2学时,第4章4学时,第5章2学时,第6章4学时,第7章2学时,第8章2学时,第9章2学时。
实验学时数的分配请参考配套的《C++程序设计基础教程学生用书》.
学生可以通过配套的《C++程序设计基础教程学生用书》,在实践中达到对内容的深入理解和熟练掌握。为了方便教师备课,本书还配有电子教案(PPT文件).
四、 内容摘要
第1章 绪论: 从发展的角度概要介绍了面向对象程序设计语言的产生和特点,面向对象方法的由来和主要的基本概念,并简单介绍了什么是面向对象的软件工程。最后介绍了信息在计算机中的表示和存储以及程序的开发过程。
第2章 C++简单程序设计: 讲述C++程序设计的基础知识。首先简要介绍C++语言的发展历史及其特点;接着学习构成C++语句的基本部分,包括字符集、关键字、标识符、操作符等;还有C++的基本数据类型和自定义数据类型以及算法的控制结构,包括顺序、选择和循环结构。“深度探索”介绍变量的实现机制和C++表达式的执行原理。
第3章 函数: 讲述C++语言的函数。在面向对象的程序设计中,函数对处理问题过程的基本抽象单元,是对功能的抽象。同时,使用函数也为代码的重用提供了技术上的支持。我们主要从应用的角度讲述各种函数的定义和使用方法。“深度探索”介绍运行栈与函数调用的执行、函数声明与类型安全。
第4章 类与对象: 首先介绍面向对象程序设计的基本思想及其主要特点,包括抽象、封装、继承和多态;接着围绕数据封装这一特点,着重讲解面向对象设计方法的核心概念-类,其中包括类的定义、实现以及如何利用类来解决具体问题;最后,简单介绍了如何用UML语言描述类的特性。“深度探索”介绍位域、用构造函数定义类型转换,以及对象作为函数参数和返回值的传递方式。
第5章 数据的共享与保护: 讲述标识符的作用域和可见性及变量、对象的生存期;使用局部变量、全局变量、类的数据成员、类的静态成员和友元来实现数据共享,共享数据的保护,以及使用多文件结构来组织和编写程序解决较为复杂的问题。“深度探索”介绍常成员函数的声明原则、代码的编译连接与执行过程。
第6章 数组、指针与字符串: 讨论数组、指针与字符串。数组和指针是C++语言中最常用的复合(构造)类型数据,是数据和对象组织、表示的最主要手段,也是组织运算的有力工具。本章首先介绍数组、指针的基本概念动态存储分配以及动态数组对象。接着围绕数据和对象组织这一问题,着重讲解如何通过使用数组和指针解决数据、函数以及对象之间的联系和协调。对于字符串及其处理,本章重点介绍string类。“深度探索”介绍指针与引用的联系、指针的安全性隐患及其应对方案,以及const_cast的应用。
第7章 继承与派生: 讲述类的继承特性。围绕派生过程,着重讨论不同继承方式下的基类成员的访问控制问题、添加构造函数和析构函数。接着讨论在较为复杂的继承关系中,类成员的唯一标识和访问问题。“深度探索”介绍组合与继承的区别与联系、派生类对象的内存布局,以及基类向派生类的转换及其安全性问题。
第8章 多态性: 讲述类的另一个重要特性-多态性。多态是指同样的消息被不同类型的对象接收时导致完全不同的行为,是对类的特定成员函数的再抽象。C++语言支持的多态有多种类型,重载(包括函数重载和运算符重载)和虚函数是其中主要的方式。“深度探索”介绍多态类型与非多态类型的区别、运行时类型识别机制,以及虚函数动态绑定的实现原理。
第9章 流类库与输入输出: 讲述流的概念,然后介绍流类库的结构和使用。就像C语言一样,C++语言中也没有输入输出语句。但C++编译系统带有一个面向对象的I/O软件包,它就是I/O流类库。“深度探索”介绍宽字符、宽字符串与宽流,以及对象的串行化问题。
第10章 异常处理.
感谢读者选择使用本书,欢迎您对本书内容提出意见和建议,我们将不胜感激。作者的电子邮件地址: zhengli@mail.tsinghua.edu.cn,来信标题请包含“C++book" .
作 者2010年5月于清华大学
第1章 绪论
1.1 计算机程序设计语言的发展
1.1.1 机器语言与汇编语言
1.1.2 高级语言
1.1.3 面向对象的语言
1.2 面向对象的方法
1.2.1 面向对象方法的由来
1.2.2 面向对象的基本概念
1.3 面向对象的软件开发
1.3.1 分析
1.3.2 设计
1.3.3 编程
1.3.4 测试
1.3.5 维护
1.4 信息的表示与存储
1.4.1 计算机的数字系统
1.4 J2,L种进位记数制之间的转换
1.4.3 信息的存储单位
1.4.4 二进制数的编码表示
1.4.5 定点数和浮点数
1.4.6 数的表示范围
1.4.7 非数值信息的表示
1.5 程序开发的基本概念
1.5.1 基本术语
1.5.2 完整的程序过程
1.6 小结
习题
第2章 C++简单程序设计
2.1 C++语言概述
2.1.1 C++的产生
2.1.2 C++的特点
2.1.3 C++程序实例
2.1.4 字符集
2.1.5 词法记号
2.2 基本数据类型和表达式
2.2.1 基本数据类型
2.2.2 常量
2.2.3 变量
2.2.4 符号常量
2.2.5 运算符与表达式
2.2.6 语句
2.3 数据的输入与输出
2.3.1 I/O流
2.3.2 预定义的插入符和提取符
2.3.3 简单的I/O格式控制
2.4 算法的基本控制结构
2.4.1 用if语句实现选择结构
2.4.2 多重选择结构
2.4.3 循环结构
2.4.4 循环结构与选择结构的嵌套
2.4.5 其他控制语句
2.5 自定义数据类型
2.5.1 typedef声明
2.5.2 枚举类型enum
2.6 小结
习题
第3章 函数
3.1 函数的定义与使用
3.1.1 函数的定义
3.1.2 函数的调用
3.1.3 函数的参数传递
3.2 内联函数
3.3 带默认形参值的函数
3.4 函数重载
3.5 C++系统函数
3.6 小结
习题
第4章 类与对象
4.1 面向对象程序设计的基本特点
4.1.1 抽象
4.1.2 封装
4.1.3 继承
4.1.4 多态
4.2 类和对象
4.2.1 类的定义
4.2.2 类成员的访问控制
4.2.3 对象
4.2.4 类的成员函数
4.2.5 程序实例
4.3 构造函数和析构函数
4.3.1 构造函数
4.3.2 复制构造函数
4.3.3 析构函数
4.3.4 程序实例
4.4 类的组合
4.4.1 组合
4.4.2 前向引用声明
4.5 UML图形标识
4.5.1 UML简介
4.5.2 UML类图
4.6 结构体和联合体
4.6.1 结构体
4.6.2 联合体
4.7 综合实例——个人银行账户管理程序
4.7.1 类的设计
4.7.2 源程序及说明
4.8 小结
习题
第5章 数据的共享与保护
5.1 标识符的作用域与可见性
5.1.1 作用域
5.1.2 可见性
5.2 对象的生存期
5.2.1 静态生存期
5.2.2 动态生存期
5.3 类的静态成员
5.3.1 静态数据成员
5.3.2 静态函数成员
5.4 类的友元
5.4.1 友元函数
5.4.2 友元类
5.5 共享数据的保护
5.5.1 常对象
5.5.2 用const修饰的类成员
5.5.3 常引用
5.6 多文件结构和编译预处理命令
5.6.1 C++程序的一般组织结构
5.6.2 外部变量与外部函数
5.6.3 标准C++库
5.6.4 编译预处理
5.7 综合实例——个人银行账户管理程序
5.8 小结
习题
第6章 数组、指针与字符串
6.1 数组
6.1.1 数组的声明与使用
6.1.2 数组的存储与初始化
6.1.3 数组作为函数参数
6.1.4 对象数组
6.1.5 程序实例
6.2 指针
6.2.1 内存空间的访问方式
6.2.2 指针变量的声明
6.2.3 与地址相关的运算“*”和“&”
6.2.4 指针的赋值
6.2.5 指针运算
6.2.6 用指针处理数组元素
6.2.7 指针数组
6.2.8 用指针作为函数参数
6.2.9 指针型函数
6.2.10 指向函数的指针
……
第7章 继承与派生
第8章 多态性
第9章 流类库与输入输出
第10章 异常处理
在面向对象的方法出现以前,我们都是采用面向过程的程序设计方法。早期的计算机是用于数学计算的工具,例如,用于计算炮弹的飞行轨迹。为了完成计算,就必须设计出一个计算方法或解决问题的过程。因此,软件设计的主要工作就是设计求解问题的过程。
随着计算机硬件系统的高速发展,计算机的性能越来越强,用途也更加广泛,不再仅限于数学计算。由于所处理的问题日益复杂,程序也就越来越复杂和庞大。20世纪60年代产生的结构化程序设计思想,为使用面向过程的方法解决复杂问题提供了有力的手段。因而,在20世纪70年代到80年代,结构化程序设计方法成为所有软件开发设计领域及每个程序员都采用的方法。结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环3种基本结构组成;其模块化实现的具体方法是使用子程序。结构化程序设计由于采用了模块分解与功能抽象以及自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。
虽然结构化程序设计方法具有很多优点,但它仍是一种面向过程的程序设计方法。它把数据和处理数据的过程分离为相互独立的实体,当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。另外,由于图形用户界面的应用,使得软件使用起来越来越方便,但开发起来却越来越困难。一个好的软件,应该随时响应用户的任何操作,而不是请用户按照既定的步骤循规蹈矩地使用。例如,我们都熟悉文字处理程序的使用,一个好的文字处理程序使用起来非常方便,几乎可以随心所欲,软件说明书中绝不会规定任何固定的操作顺序,因此对这种软件的功能很难用过程来描述和实现,如果仍使用面向过程的方法,开发和维护都将很困难。