一、 版本说明
本书是《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月于清华大学