C++程序设计(第2版)

C++程序设计(第2版)"

作者:谭浩强
ISBN:9787302254881
定价:¥48
字数:千字
页数:
出版时间:2011.08.01
开本:
版次:2-12
装帧:
出版社:清华大学出版社
简介

C++是近年来国内外广泛使用的现代计算机语言,它既支持基于过程的程序设计,也支持面向对象的程序设计。国内许多高校陆续开设了C++程序设计课程。但是,由于C++涉及概念很多,语法比较复杂,内容十分广泛,使不少人感到学习难度较大,难以入门。

本书作者深入调查了大学的程序设计课程的现状和发展趋势,参阅了国内外数十种有关C++的教材,认真分析了读者在学习中的困难和认识规律,设计了读者易于学习的教材体系,于2004年出版了《C++程序设计》一书。该书降低入门起点,不需要C语言的基础,从零起点介绍程序设计和C++。广大师生用后反映非常好,认为该书定位准确,概念清晰,深入浅出,取舍合理,以通俗易懂的语言对C++的许多难懂的概念作了透彻而通俗的说明,大大降低了初学者学习的困难,是一本初学者学习C++的好教材。

根据教学实践的需要,作者对该书进行了修订,出版了《C++程序设计(第2版)》,与第1版相比,内容更加丰富,讲解更加清晰,学习更加容易,依据ANSI C++标准进行介绍,引导读者从一开始就按C++的要求编程,而不是过多地迁就C语言的习惯。全书分为4篇: 基本知识;基于过程的程序设计;基于对象的程序设计;面向对象的程序设计。

为了便于教学,本书有两本配套教材: 《C++程序设计题解和上机指导(第2版)》, 《C++程序设计实践指导》,帮助学生通过实践掌握C++的编程方法。

本书内容全面,例题丰富,概念清晰,循序渐进,易于学习,即使没有教师讲授,读者也能看懂本书的大部分内容。本书是学习C++的入门教材,可供各类专业学生使用,也可作为计算机培训班的教材以及读者自学参考。

前言

  20年前,我曾经写过一本《C程序设计》(清华大学出版社出版) ,当时只是为了教学的需要。由于许多人反映C语言难学,我力图编写出一本容易入门、容易学习的教材,以解决教学中的困难。该书出版后,反映很强烈,不少人说,C语言原来是比较难学的,自从《C程序设计》出版后,C语言变得不难学了。该书已先后重印160多次,累计发行1100万册,平均每年发行60万册。成为广大初学者学习C语言的主要用书。这使我深受鼓舞和鞭策,我感受到广大读者的殷切期望,看到了计算机教育工作者身上的重任。

近年来,支持面向对象程序设计的C++语言迅速地在国内推广,不少高校开设了C++课程,由于C++涉及概念很多,语法比较复杂、内容十分广泛,不少人(尤其是非计算机专业的初学者)感到学习难度较大,难以入门。许多热情的读者希望我能在《C程序设计》的基础上,再写一本易于入门的《C++程序设计》,以帮助更多的初学者更顺利地迈进C++的大门。我花了两年时间,其间数易其稿,于2004年写成了《C++程序设计》一书,由清华大学出版社正式出版。该书出版后,受到各高校的欢迎,许多师生认为该书定位准确,概念清晰,深入浅出,取舍合理,以通俗易懂的语言对C++的许多难懂的概念作了透彻而通俗的说明,大大降低了初学者学习的困难程度,是一本初学者学习C++的好教材。

根据教学实践的需要,作者最近对该书进行了修订,出版《C++程序设计(第2版)》。与第1版相比,内容更加丰富,讲解更加清晰,学习更加容易。

要写好和教好C++程序设计,决不是一个纯技术问题,需要综合考虑多方面因素,作出合理的决策和安排。我调查了我国大学的程序设计课程的现状和发展趋势,了解了国内外C++的教学和使用情况,认真分析了学习者在学习过程中遇到的困难,研究了初学者的认识规律,并且参阅了国内外数十种有关C++的教材,形成了以下几点看法,并体现在本教材中。

(1) 教材必须准确定位,合理取舍内容。写书首先要弄清楚本书是为什么人写的,他们学习C++的目的是什么,应当学到什么程度。应当声明:  本书的对象不是C++软件开发专业人员,而是高校各专业(尤其是非计算机专业)的大学生,他们并无从事程序设计的实际经验,将来也不一定是C++的专业开发人员。众所周知,研发C++的初衷是为了解决大型软件开发中遇到的问题,提高软件的开发效率。只有参加过研制大型软件的人才能真正体会到C++的优越性,并善于利用C++的独特机制去进行软件开发。

大学生在学校学习期间学习C++的目的是了解面向对象程序设计方法,能够利用C++编写相对简单的程序,为以后进一步学习和应用打下良好的基础。不可能设想,通过几十个小时的学习,能使一个没有程序设计基础的人变成一个熟练的C++开发人员。应当有一个实事求是的分析和估计。因此,本书着力于使读者对C++的全貌和作用有基本的认识,用容易理解的方法讲清楚有关的基本概念和基本方法,而不去罗列C++语法中各种烦琐的细节。否则将会使篇幅过大(常见国外的书厚达近千页),而且会使读者感到枯燥无味,冲淡重点,主次不分。

(2) 需要选好学习C++的切入点。对于怎样介绍C++,国内外的教材有多种模式。有的不介绍基于过程的程序设计,一开始就直接介绍类和对象,有的先介绍基于过程的程序设计,然后介绍面向对象的程序设计,各有特点。作者认为:  不应当把基于过程和面向对象的程序设计对立起来,任何程序设计都需要用到过程化的知识。作为一个程序设计人员,要掌握过程化的程序设计,也要掌握面向对象的程序设计。以前,人们通过C语言学习过程化程序设计,再通过C++学习面向对象的程序设计。其实,C++并不是纯粹的面向对象的语言,它是一种混合语言。学习C++既可以编写过程化的程序,也可以编写面向对象的程序。在参考和比较国内外多种教材的基础上,作者确定了本书的结构。全书分为4部分:  第1部分介绍C++的基本知识和基本语法;第2部分介绍C++基于过程的程序设计;第3部分介绍C++基于对象的程序设计;第4部分介绍C++面向对象的程序设计。

许多教师的实践表明,以基于过程的程序设计作为切入点,从编写简单的程序开始,循序渐进,由基于过程到面向对象,逐步深入,比较符合读者的认识规律,每一步的台阶都比较小,学习难度不大,读者容易理解。

这样,人们既可以通过C语言学习基于过程的程序设计,也可以直接通过C++语言学习基于过程和面向对象的程序设计。读者可以根据需要选择。

(3) 设计合适的教材体系。C++程序设计涉及面向对象程序设计的理论、C++语言的语法以及算法3个方面的内容,其中每一方面都包含十分丰富的内容,都可以分别单独成书。显然在一本教材中深入、详细地介绍以上3个方面的知识是不可能的,必须把它们有机地结合起来,综合应用。不同的书对此采取不同的写法,侧重点有所不同,各有道理,也各有优缺点,适合于不同的读者。需要在教学实践中检验,取长补短,不断完善。

作者认为:  要进行C++程序设计,当然需要了解面向对象程序设计的有关概念,但是本课程毕竟不是一门面向对象程序设计的理论课程,在本书中不是抽象地介绍面向对象程序设计的理论,而是在介绍C++语言的特点和应用过程中自然地引出面向对象程序设计的有关概念,通过C++的编程过程理解面向对象程序设计方法。在面向过程的程序设计中,介绍有关的算法,引导读者思考怎样构造一个算法。编写程序的过程就是设计算法的过程。

要用C++编程序,最基本的要求是正确掌握和运用C++,由于C++语法复杂,内容又多,如果对它缺乏系统了解,将难以真正应用,编出来的程序将会错误百出,编译出错,事倍功半。本书的做法是全面而系统地介绍C++的主要特点和功能,引导读者由简而繁地学会编写C++程序。有了C++编程的初步基础后,再进一步提高,掌握更多更深入的算法。这样的方法可能符合大多数学习者的情况,降低了学习难度。

(4) 重要的是要建立清晰的概念。由于人们习惯于过程化的编程方法,在开始学习时往往对面向对象的原理和实现机制理解不深,而C++的语法现象繁多,作者认为,决不能使读者陷于语法细节的汪洋大海之中。如果逐个孤立介绍,学起来将枯燥无味。本书把面向对象程序设计划分为两个有机联系的阶段--基于对象的程序设计和面向对象的程序设计。从类和对象开始逐步深入地引出面向对象程序设计的各个概念以及用C++实现的方法。凡引入一个新的概念,都作了通俗而透彻的讲解,把来龙去脉交代清楚,讲清楚“这是什么”, “为什么需要它”, “怎样使用它”,并举例说明。使读者建立起清晰的概念,知其然也知其所以然,而不是盲目地照葫芦画瓢。对于C++的众多功能和语法细节,在初学阶段没有必要全部细讲,必须有所选择,合理取舍,抓住主要矛盾,不应追求深而全。本书是入门性、基础性的教材,任务是帮助读者顺利入门,打好基础。有了好的基础,以后根据需要再深入学习和实践,是不困难的。

(5) C++教材应当体现C++标准。C++是从C语言发展而来的,为了与C兼容, C++保留了C的许多用法,有不少人在编写C++程序时常沿用C的某些传统用法,例如把主函数定为void类型,无返回值;头文件带后缀.h;使用系统库时不使用命名空间等。但是,ANSI C++标准在一些方面有新的规定,例如要求主函数为int类型,如果程序正常执行则返回0值;系统头文件不带后缀.h;使用系统库时使用命名空间std;增加了字符串类型string等。

虽然C++仍然允许使用从C继承来的传统用法,但作者认为作为教材应提倡C++的新方法。应当引导大学生和所有读者从一开始就按照C++标准编写程序,养成C++的编程风格,而不是过多地迁就C的习惯。本书各章都是依据C++标准介绍的,同时也说明允许使用的C的用法。

在本教材中,程序的形式如下:    #include <iostream>    //头文件不带后缀.h

#include <string>              //可以用字符串类型

using namespace std;           //使用系统库时使用标准命名空间std

int main()                     //主函数为int类型

{ 

 string str;                   //可以用string定义字符串变量str

 

 return 0;                     //程序正常执行则返回0

}要引导学生学习标准C++,而不是仅仅学习依赖于某一特定环境下的“方言化”的C++。本书介绍的是标准C++,读者在学习过程中可以在不同的环境下运行自己的C++程序,但它们只是被当作编译器来使用。不应喧宾夺主,把过多的精力放在学习某一编译系统的具体细节上,学习的重点应当是C++本身。读者应能在不同的平台上(例如Windows环境和非Windows环境) 编译和运行C++程序。

(6)  努力化解难点,把复杂的问题简单化,使学习C++更容易。在写作过程中作者花了很大的精力去考虑怎样使读者易于接受和理解。作者一贯认为,教材编著者应当与读者将心比心,换位思考,要站在读者的立场上思考问题,帮助他们排除学习中的困难,要善于把复杂的问题简单化,而不应把简单的问题复杂化,要善于化解难点,深入浅出。一定不要难倒读者,更不应吓跑读者。我们的任务是要使“难”变成“不难”,循序渐进地引导初学者进入C++的大门。

在学习过程中不应被一大堆高深莫测的名词术语吓唬住,有些问题看起来很深奥,其实换一个角度解释就很容易理解,甚至用一个通俗的例子就可以把问题说清楚了。本书尽量用通俗易懂的方法和语言叙述复杂的概念,力求减少初学者学习C++的困难. 

本书便于自学,即使没有老师讲解,读者也能看懂本书的大部分内容。这样,老师教学时就可以不必完全按照教材的内容和顺序详细讲解,而可以有选择地重点讲授,其余内容由学生自学。

(7)  按照教学的特点组织教材。不应当把教材写成手册,教材的任务是用读者容易理解的方法讲清基本的概念和方法,而手册的任务则是给出一个包罗万象的备查资料。

读者在学习时应重点掌握基本的概念和方法,以后若从事实际程序开发,遇到具体问题时,进一步学习或查阅一下手册即可。

本教材所举的程序,是从教学的角度考虑的,是为了帮助读者更好地理解和应用某一方面的教学内容而专门编写的,并不一定是实际应用的程序。一个实际的C++程序需要考虑许多因素,综合各部分知识,有许多注释行,而且一般是多文件的程序,篇幅较长,往往不适合作为教学程序。教学程序对问题作了简化,尽量压缩不必要的语句,减少注释行,篇幅一般不长,力求使读者能读懂程序。有些在专业人员看来很“幼稚”的程序,在学习者看来可能是一个很合适的教学程序。教材必须通俗易懂,使人能看懂。在初步掌握C++编程方法后,可以逐步使程序复杂些,长一些,更接近真实程序一些。在学完本课程后,最好完成一个实际的应用程序,以提高实际应用的能力。

(8)  学习本教材可以有两个入口:  未学过C语言的读者从第1章学起;已学过C语言的读者可以从第8章学起。由于C++是从C语言发展而来的,它保留了C语言的大部分内容。本书第1~7章介绍的内容主要是C++从C语言继承来的部分,因此,学过C语言的读者可以跳过这几章,而直接学习第8章。但最好在学习第8章之前,简单浏览一下前7章,以对C++与C的异同有所了解。尤其应看一下前7章中带星号()的部分,它们是C++对C语言的发展,是C语言中没有的。

由于《C程序设计》一书已比较成熟,读者反映很容易看懂,因此本书前7章主要是根据《C程序设计》一书进行改写的。这样,把C语言和C++很自然地衔接起来,无论学过C语言还是未学过C语言的读者都会感到本教材容易入门,易于学习。

(9)  教材要考虑配套,形成纵深。程序设计是一门实践性很强的课程,只靠听课和看书是学不好的。衡量学习好坏的标准不是“懂不懂”,而是“会不会干”。因此必须强调多编程,多上机实践。考虑到不同学校、不同专业、不同读者对学习C++有不同的要求,因此要提供配套用书,不同的读者可以根据要求选用。

本书有两本教学参考书,均由清华大学出版社出版。 

(1)《C++程序设计题解与上机指导(第2版)》。提供主教材各章中的全部习题解。由于教材的篇幅有限,有些很好的例子无法在教材中列出,我们把它们作为习题,希望读者自己完成,教师也可以从中选择一些习题作为例题讲授。学生除了完成教师指定的习题外,最好把习题解答中的程序全部看一遍,以更好地理解C++程序,扩大眼界,启迪思路,丰富知识,增长能力。在《C++程序设计题解与上机指导(第2版)》中,还介绍在两种典型的环境下运行C++程序的方法,一种是Windows环境下的Visual C++ 6.0,一种是GCC, GCC是自由软件,不必购买。GCC可以在Windows环境下使用,也可以在非Windows环境(如DOS, UNIX, Linux)下使用。此外,书中还给出上机实践任务,要求学生完成若干次上机实践。

 (2) 《C++程序设计实践指导》。这是为学习主教材后进一步深入学习的读者准备的,目的是提高编程能力。有的专业对学生使用C++编程有一定要求,可以在学完课程后,安排一段集中的时间进行一次编程实践,相当于课程设计。该书内容包括:  怎样编写C++应用程序;提供若干个不同规模的实际的C++应用程序供分析阅读;安排并指导学生完成1~2个C++应用程序。经过这样的训练,学生的实际能力将会有较大的提高。

本书由谭浩强著,谭亦峰和薛淑斌参加了教学研讨、收集材料、调试部分程序等工作。全国高等院校计算机基础教育研究会以及全国各高校老师几年来对本书的编写始终给予了热情的支持,清华大学出版社对本书的出版十分重视,使本书在短时间内得以出版。对一切曾经鼓励、支持和帮助过我的领导、组织、专家、朋友和读者,在此谨表示真挚的谢意。

本书肯定会有不妥甚至错误之处,诚盼专家和广大读者不吝指正。

2011年3月于清华园

目录

第1篇 基 本 知 识

第1章 C++的初步知识3

  1.1 从C到C++3

  1.2 最简单的C++程序5

1.3 C++程序的构成和书写形式12

1.4 C++程序的编写和实现13

1.5 关于C++上机实践15

习题15

第2章 数据类型和表达式18

2.1 C++的数据类型18

2.2 常量20

2.2.1 什么是常量20

2.2.2 数值常量20

2.2.3 字符常量22

2.2.4 符号常量25

2.3 变量26

2.3.1 什么是变量26

2.3.2 变量名规则26

2.3.3 定义变量27

2.3.4 对变量赋初值28

2.3.5 常变量29

2.4 C++的运算符30

2.5 算术运算符与算术表达式30

2.5.1 基本的算术运算符30

2.5.2 算术表达式和运算符的优先级与结合性31

2.5.3 表达式中各类数值型数据间的混合运算312.5.4 自增(++)和自减(--)运算符32

2.5.5 强制类型转换运算符33

2.6 赋值运算符和赋值表达式35

2.6.1 赋值运算符35

2.6.2 赋值过程中的类型转换35

2.6.3 复合赋值运算符36

2.6.4 赋值表达式37

2.7 逗号运算符和逗号表达式38

习题39

第2篇 基于过程的程序设计

第3章 程序设计初步45

3.1 基于过程的程序设计和算法45

3.1.1 算法的概念45

3.1.2 算法的表示46

3.2 C++的程序结构和C++语句47

3.3 赋值操作50

3.4 C++的输入与输出50

  3.4.1 输入流与输出流的基本操作51

  3.4.2 在标准输入流与输出流中使用控制符53

3.4.3 用getchar和putchar 函数进行字符的输入和输出56

3.4.4 用scanf和printf函数进行输入和输出57

3.5 编写顺序结构的程序58

3.6 关系运算和逻辑运算59

3.6.1 关系运算和关系表达式60

  3.6.2 逻辑常量和逻辑变量61

3.6.3 逻辑运算和逻辑表达式62

3.7 选择结构和if语句64

3.7.1 if语句的形式64

3.7.2 if语句的嵌套67

3.7.3 条件运算符和条件表达式68

3.7.4 多分支选择结构与switch 语句69

3.7.5 编写选择结构的程序71

3.8 循环结构和循环语句74

3.8.1 用while语句构成循环74

3.8.2 用do-while语句构成循环75

3.8.3 用for语句构成循环76

3.8.4 几种循环的比较79

3.8.5 循环的嵌套79

3.8.6 提前结束循环(break语句和continue语句)80

3.8.7 编写循环结构的程序81

习题85

第4章 利用函数实现指定的功能88

4.1 为什么需要函数88

4.2 定义函数的一般形式90

4.2.1 定义无参函数的一般形式90

4.2.2 定义有参函数的一般形式91

4.3 函数参数和函数的值91

4.3.1 形式参数和实际参数91

4.3.2 函数的返回值93

4.4 函数的调用94

4.4.1 函数调用的一般形式94

4.4.2 函数调用的方式94

4.4.3 对被调用函数的声明和函数原型94

4.5 函数的嵌套调用97

4.6 函数的递归调用99

  4.7 内置函数103

  4.8 函数的重载104

  4.9 函数模板107

  4.10 有默认参数的函数109

4.11 局部变量和全局变量111

4.11.1 局部变量111

4.11.2 全局变量112

4.12 变量的存储类别113

4.12.1 动态存储方式与静态存储方式113

4.12.2 自动变量114

4.12.3 用static声明静态局部变量115

4.12.4 用register声明寄存器变量117

4.12.5 用extern声明外部变量118

4.12.6 用static声明静态外部变量119

4.13 变量属性小结120

4.14 关于变量的声明和定义122

4.15 内部函数和外部函数123

4.15.1 内部函数123

4.15.2 外部函数123

4.16 头文件125

4.16.1 头文件的内容125

   4.16.2 关于C++标准库和头文件的形式126

习题126

第5章 利用数组处理批量数据128

5.1 为什么需要用数组128

5.2 定义和引用一维数组129

5.2.1 定义一维数组129

5.2.2 引用一维数组的元素129

5.2.3 一维数组的初始化130

5.2.4 一维数组程序举例130

5.3 定义和引用二维数组132

5.3.1 定义二维数组133

5.3.2 引用二维数组的元素134

5.3.3 二维数组的初始化134

5.3.4 二维数组程序举例136

5.4 用数组作函数参数137

5.5 字符数组141

5.5.1 定义和初始化字符数组141

5.5.2 字符数组的赋值与引用142

5.5.3 字符串和字符串结束标志143

5.5.4 字符数组的输入输出144

5.5.5 使用字符串处理函数对字符串进行操作146

5.5.6 字符数组应用举例148

  5.6 C++处理字符串的方法--字符串类与字符串变量149

5.6.1 字符串变量的定义和引用150

5.6.2 字符串变量的运算151

5.6.3 字符串数组151

5.6.4 字符串运算举例152

习题155

第6章 善于使用指针与引用157

6.1 什么是指针157

6.2 变量与指针159

6.2.1 定义指针变量159

6.2.2 引用指针变量161

6.2.3 用指针作函数参数163

6.3 数组与指针168

6.3.1 指向数组元素的指针168

6.3.2 用指针变量作函数形参接收数组地址170

6.4 字符串与指针173

6.5 函数与指针175

6.5.1 用函数指针调用函数175

6.5.2 用指向函数的指针作函数参数176

6.6 返回指针值的函数177

6.7 指针数组和指向指针的指针 177

6.7.1 指针数组177

6.7.2 指向指针的指针179

  6.8 const指针181

6.9 void指针类型183

6.10 有关指针的数据类型和指针运算的小结184

6.10.1 有关指针的数据类型的小结184

6.10.2 指针运算小结185

  6.11 引用186

6.11.1 什么是变量的引用186

6.11.2 引用的简单使用188

6.11.3 引用作为函数参数188

习题192

第7章 用户自定义数据类型194

7.1 结构体类型194

7.1.1 为什么需要用结构体类型194

7.1.2 结构体类型变量的定义方法及其初始化195

7.1.3 引用结构体变量198

7.1.4 结构体数组200

7.1.5 指向结构体变量的指针204

7.1.6 结构体类型数据作为函数参数207

  7.1.7 用new和delete运算符进行动态分配和撤销存储空间210

7.2 共用体类型212

7.3 枚举类型212

7.4 用typedef声明新的类型名216

习题218

第3篇 基于对象的程序设计

第8章 类和对象的特性223

8.1 面向对象程序设计方法概述223

8.1.1 什么是面向对象的程序设计223

8.1.2 面向对象程序设计的特点227

8.1.3 类和对象的作用228

8.1.4 面向对象的软件开发229

8.2 类的声明和对象的定义230

8.2.1 类和对象的关系230

8.2.2 声明类类型230

8.2.3 定义对象的方法233

8.2.4 类和结构体类型的异同234

8.3 类的成员函数236

8.3.1 成员函数的性质236

8.3.2 在类外定义成员函数236

8.3.3 内置成员函数237

8.3.4 成员函数的存储方式239

8.4 对象成员的引用241

8.4.1 通过对象名和成员运算符访问对象中的成员241

8.4.2 通过指向对象的指针访问对象中的成员241

8.4.3 通过对象的引用来访问对象中的成员242

8.5 类的封装性和信息隐蔽242

8.5.1 公用接口与私有实现的分离242

8.5.2 类声明和成员函数定义的分离244

8.5.3 面向对象程序设计中的几个名词245

8.6 类和对象的简单应用举例245

习题252

第9章 怎样使用类和对象255

9.1 利用构造函数对类对象进行初始化255

9.1.1 对象的初始化255

9.1.2 用构造函数实现数据成员的初始化256

9.1.3 带参数的构造函数258

9.1.4 用参数初始化表对数据成员初始化260

9.1.5 构造函数的重载261

9.1.6 使用默认参数的构造函数263

9.2 析构函数265

9.3 调用构造函数和析构函数的顺序267

9.4 对象数组269

9.5 对象指针271

9.5.1 指向对象的指针271

9.5.2 指向对象成员的指针272

9.5.3 this指针275

9.6 共用数据的保护276

9.6.1 常对象277

9.6.2 常对象成员278

9.6.3 指向对象的常指针279

9.6.4 指向常对象的指针变量280

9.6.5 对象的常引用283

9.6.6 const型数据的小结284

9.7 对象的动态建立和释放284

9.8 对象的赋值和复制286

9.8.1 对象的赋值286

9.8.2 对象的复制287

9.9 静态成员290

9.9.1 静态数据成员290

9.9.2 静态成员函数292

9.10 友元296

9.10.1 友元函数296

9.10.2 友元类300

9.11 类模板300

习题305

第10章 运算符重载308

10.1 什么是运算符重载308

10.2 运算符重载的方法310

10.3 重载运算符的规则313

10.4 运算符重载函数作为类成员函数和友元函数314

10.5 重载双目运算符318

10.6 重载单目运算符322

10.7 重载流插入运算符“<<”和流提取运算符“>>" 325

10.7.1 重载流插入运算符“<<" 325

10.7.2 重载流提取运算符“>>" 328

10.8 有关运算符重载的归纳 329

10.9 不同类型数据间的转换331

10.9.1 标准类型数据间的转换331

10.9.2 用转换构造函数进行不同类型数据的转换331

10.9.3 类型转换函数333

习题338

第4篇 面向对象的程序设计

第11章 继承与派生343

11.1 继承与派生的概念343

11.2 派生类的声明方式346

11.3 派生类的构成346

11.4 派生类成员的访问属性348

11.4.1 公用继承349

11.4.2 私有继承351

11.4.3 保护成员和保护继承354

11.4.4 多级派生时的访问属性358

11.5 派生类的构造函数和析构函数359

11.5.1 简单的派生类的构造函数359

11.5.2 有子对象的派生类的构造函数363

11.5.3 多层派生时的构造函数366

11.5.4 派生类构造函数的特殊形式368

11.5.5 派生类的析构函数369

11.6 多重继承369

11.6.1 声明多重继承的方法369

11.6.2 多重继承派生类的构造函数370

11.6.3 多重继承引起的二义性问题372

11.6.4 虚基类376

11.7 基类与派生类的转换380

11.8 继承与组合384

11.9 继承在软件开发中的重要意义385

习题387

第12章 多态性与虚函数392

12.1 多态性的概念392

12.2 一个典型的例子393

12.3 利用虚函数实现动态多态性398

12.3.1 虚函数的作用398

12.3.2 静态关联与动态关联402

12.3.3 在什么情况下应当声明虚函数403

12.3.4 虚析构函数404

12.4 纯虚函数与抽象类405

12.4.1 纯虚函数405

12.4.2 抽象类406

12.4.3 应用实例407

习题413

第13章 输入输出流415

13.1 C++的输入和输出415

13.1.1 输入输出的含义415

13.1.2 C++的I/O对C的发展--类型安全和可扩展性415

13.1.3 C++的输入输出流416

13.2 标准输出流421

13.2.1 cout,cerr和clog流421

13.2.2 标准类型数据的格式输出423

13.2.3 用流成员函数put输出字符426

13.3 标准输入流427

13.3.1 cin流427

13.3.2 用于字符输入的流成员函数428

13.3.3 istream类的其他成员函数429

13.4 对数据文件的操作与文件流433

13.4.1 文件的概念433

13.4.2 文件流类与文件流对象434

13.4.3 文件的打开与关闭435

13.4.4 对ASCII文件的操作437

13.4.5 对二进制文件的操作442

13.5 字符串流447

习题452

第14章 C++工具453

14.1 异常处理453

14.1.1 异常处理的任务453

14.1.2 异常处理的方法454

14.1.3 在函数声明中进行异常情况指定461

14.1.4 在异常处理中处理析构函数461

14.2 命名空间464

14.2.1 为什么需要命名空间464

14.2.2 什么是命名空间467

14.2.3 使用命名空间解决名字冲突469

14.2.4 使用命名空间成员的方法471

14.2.5 无名的命名空间473

14.2.6 标准命名空间std473

14.3 使用早期的函数库474

习题475

参考文献480

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个