图书前言

1 本书的编写背景C++语言是从C语言发展演变而来的一种面向对象的程序设计语言。C++语言的主要特点表现在两个方面,一是全面兼容C,二是支持面向对象的方法。

面向对象的程序设计(OOP)方法将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体——对象。对同类型对象抽象出其共性,形成类。类中的大多数数据只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。这样,程序模块间的关系简单,程序模块的独立性、数据的安全性具有良好的保障。同时通过继承与多态性,使程序具有很高的可重用性,使软件的开发和维护都更为方便。

由于面向对象方法的突出优点,目前它已经成为开发大型软件时所采用的主要方法,而C++语言是面向对象的程序设计语言中应用最广泛的一种。

长期以来,C++语言被认为是较难使用的专业开发语言,非计算机专业人员常常不敢问津,在大学的非计算机专业中也很少被列为必修课讲授。那么C++语言与面向对象的程序设计方法是否真的是比较高深、难以掌握的技术呢?答案是否定的。

其实,C语言在它产生的初期,也只被少数专业开发人员使用。但随着计算机科学的发展,计算机技术已渗透到各学科的研究和应用之中, C语言已经被各专业的工程技术人员广泛应用于本专业的科研开发。C++全面兼容了 C,同时提供了比C更严格更安全的语法,从这个意义上讲,C++首先是一个更好的C。

C++语言是一种面向对象的编程语言,而面向对象的程序设计(OOP)一度被看作是一门比较高深的技术,这是因为在面向对象的系统分析(OOA)和面向对象的系统设计(OOD)理论出现之前,程序员要写一个好的面向对象程序,首先要学会运用面向对象的方法来认识问题和描述问题。现在,OOP的工作比较简单了,认识问题域与设计系统成分的工作已经在系统分析和设计阶段完成,OOP的工作就是用一种面向对象的编程语言把OOD模型中的每个成分书写出来。

面向对象方法的出现,实际上是程序设计方法发展的一个返朴归真的过程。从本质上讲,软件开发就是对软件所要处理的问题域进行正确的认识,并把这种认识正确地描述出来。面向对象方法所强调的基本原则就是直接面对客观存在的事物来进行软件开发,将人们在日常生活中习惯的思维方式和表达方式应用在软件开发中,使软件开发从过分专业化的方法、规则和技巧中回到客观世界,回到人们通常的思维。

那么,学习C++语言是否应该首先学习C语言呢?不是的。虽然C++语言是从C语言发展而来的,但是C++本身也是一个完整的程序设计语言,而且它与C语言的程序设计思想是完全不同的。我们学习的进程不必严格遵循科学技术的发展进程,只有尽快地掌握最新的理论和技术,才能站到巨人的肩膀上。

我们认为,C++语言是可以作为程序设计的入门语言来学习的。

2 本书的特色

本书的作者多年来在清华大学从事计算机基础课教学,在教学工作中,感到计算机基础课具有以下特点:

(1) 程序设计课程的课时有限,因此如果先学C再学C++课时不够。

(2) 要学好程序设计,学生不仅需要掌握编程语言,也需要掌握基本的数据结构和程序设计方法,具有分析问题和解决问题的能力。

(3) 在有限的课堂学时中,应着重讲解基本理论和基础知识;在此基础上,学生再进一步通过实验熟练掌握开发环境的使用以及程序设计的技巧和方法。

针对上述特点,本书将C++语言作为大学生学习程序设计的入门语言,不仅详细介绍了语言本身,而且介绍了常用的数据结构和算法。全书以面向对象的程序设计方法贯穿始终,每一章都是首先阐述面向对象的程序设计思想和方法,然后引出必要的语法知识,在讲解语法时着重从程序设计方法学的角度讲述其意义和用途。本书的宗旨是: 不仅要使读者掌握C++语言本身,而且能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述。当然,要达到能够描述较复杂问题域的水平,还需要学习面向对象的软件工程课。

针对初学者和自学读者的特点,本书力求做到深入浅出,将复杂的概念用简洁浅显的语言来讲述。书中以结合实例讲解基本概念和方法为主,读者可以进一步通过配套的《C++语言程序设计习题与实验指导》中的习题与实验,在实践中达到对本书中内容的深入理解和熟练掌握。这样,读者使用本套教材,可以轻松地入门,循序渐进地提高。

3 内容摘要

第1章概述: 从发展的角度概要介绍了面向对象程序设计语言的产生和特点、面向对象方法的由来及其基本概念,并简单介绍了什么是面向对象的软件工程。最后,介绍了信息在计算机中的表示和存储方法以及程序的开发过程。

第2章C++简单程序设计: 讲述C++程序设计的基础知识。首先简要介绍C++语言的发展历史及其特点,接着讲述构成C++语句的基本部分——字符集、关键字、标识符、操作符等。此外还介绍了C++的基本数据类型和自定义数据类型以及算法的三种主要控制结构——顺序、选择和循环结构。

第3章函数: 讲述C++语言的函数。在面向对象的程序设计中,函数是模块划分的基本单位,是对处理问题过程的基本抽象单元,是对功能的抽象。同时,使用函数也为代码的重用提供了技术上的支持。本章主要从应用的角度讲述各种函数的定义和使用方法,特别是系统函数的使用方法。

第4章类与对象: 首先介绍面向对象程序设计的基本思想及其主要特点——抽象、封装、继承和多态。接着围绕数据封装这一特点,着重讲解面向对象设计方法的核心概念——类,包括类的定义、实现以及如何利用类来解决具体问题。

第5章C++程序的结构: 讲述标识符的作用域和可见性及变量、对象的生存期;使用局部变量、全局变量、类的数据成员、类的静态成员和友元来实现数据共享;共享数据的保护;以及使用多文档结构来组织和编写程序。

第6章数组、指针与字符串: 讨论数组、指针、字符串以及动态存储分配问题。数组和指针是C++语言中最常用的复合(构造)类型数据,是数据和对象组织、表示的最主要手段,也是组织运算的有力工具。本章围绕数据和对象的组织这一问题,着重讲解如何通过使用数组和指针解决数据、函数以及对象之间的联系和协调。对于字符串及其处理,本章介绍了两种方法——使用字符数组和使用string类。

第7章继承与派生: 讲述类的继承特性。围绕派生过程,着重讨论不同继承方式下的基类成员的访问控制问题以及如何添加构造函数和析构函数;接着讨论在较为复杂的继承关系中类成员的唯一标识和访问问题;最后给出类的继承的应用实例——“用高斯消去法解线性方程组”和“一个小型公司的人员信息管理系统”。

第8章多态性: 讲述类的另一个重要特性——多态性。多态是指同样的消息被不同类型的对象接收时导致完全不同的行为,是对类的特定成员函数的再抽象。C++支持的多态有多种类型,重载(包括函数重载和运算符重载)和虚函数是其中主要的方式,也是我们学习的重点。本章最后给出类的多态的应用实例——“用变步长梯形积分算法求解函数的定积分”和“对一个小型公司的人员信息管理系统程序的改进”。

第9章群体类: 群体是指由多个数据元素组成的集合体。群体可以分为两个大类——线性群体和非线性群体。本章介绍几种常用的群体类模板的定义、实现和应用以及C++标准库中的容器类。

第10章群体数据的组织: 讲述群体的组织问题,介绍对数组元素的排序与查找方法;另外还简单介绍了C++标准库中的常用算法。

第11章流类库与输入/输出: 讲述流的概念,然后介绍流类库的结构和使用。就像C语言一样,C++语言中也没有输入/输出语句。但C++编译系统带有一个面向对象的I/O软件包,它就是I/O流类库。

第12章异常处理: 讲述异常处理问题。异常是一种程序定义的错误。C++中,异常处理是对所能预料的运行错误进行处理的一套实现机制。有了C++异常处理,程序可以向更高的执行上下文传递意想不到的事件,从而能更好地从这些异常事件中恢复过来。

第13章MFC库与Windows程序开发概述: 讲述Windows程序设计的基本思想和MFC库的基本组成。

4 第2版所做的改进

本书第1版于1999年12月出版,在清华大学及其他多所大学中使用,取得了良好的教学效果。在此基础上,作者听取了专家和读者的意见,并结合本人的教学实践,在如下几个方面对第1版进行了修改:

(1) 增加了一定数量的例题,强化了对基本编程能力的培养,更符合初学者的要求。

(2) 改进了讲解方式,力求从实例出发,循序渐进地引出概念。语言更加通俗易懂,对概念和例题的分析讲解更加细致、透彻,更有利于读者自学。

(3) 增加了对C++标准库的介绍以及如何利用C++标准库组织群体数据,从而使本书更具有实用性。

5 使用指南

本书全部内容需要的讲课学时数为32学时,实验学时数为32学时,课外上机学时数为32学时,课内外共96学时,每学时45分钟。建议讲课学时数分配如下:第1章1学时,第2章3学时,第3章2学时,第4章4学时,第5章2学时,第6章4学时,第7章2学时,第8章2学时,第9章4学时,第10章2学时,第11章2学时,第12章2学时,第13章2学时。课程学时数较少的学校,可以用28个讲课学时只讲第1章~第11章,或用20学时讲第1章~第8章。

与本书配套的教材有:《C++语言程序设计习题与试验指导》、《C++语言程序设计电子教案》。

《C++语言程序设计习题与试验指导》对本书中的习题进行了补充,并提供解答,还设计了与本书各章配套的实验,以帮助读者加深对书中内容的理解并熟练掌握。

《C++语言程序设计电子教案》是用PowerPoint制作的教案,可以在讲课时用联机大屏幕投影演示,也可以输出成投影胶片或幻灯片,部分或全部取代板书。教师不仅可以直接使用本教案,还可以方便地修改和重组其中的内容以适应自己的教学需要。使用本教案可以大大减少教师备课时编写教案的工作量以及书写板书所耗费的精力和时间,从而提高单位课时的知识含量,并以生动直观的形式达到板书所难以达到的效果。需要本电子教案的读者可直接与清华大学出版社联系购买(联系人:赵丽,电话:01062776969)。

本书第1章~第3章、第9章~第13章由郑莉编写,第4章~第8章由董渊、郑莉共同编写,傅仕星编写了本书全部习题并对例题进行了验证,田荣牌、孟鸿利参加了部分编写工作。另外特别感谢谭浩强教授和王行言教授审阅了全书并提出了许多宝贵意见。

感谢读者选择使用本书,欢迎您对本书内容提出批评和修改建议,我们将不胜感激。作者的联系地址如下:

电子邮件地址:zhli@cic.tsinghua.edu.cn

通信地址:北京清华大学计算机与信息管理中心(主楼217)郑莉

邮政编码:100084