《C++程序设计(第2版)》是谭浩强编著,2011年清华大学出版社出版中国高等院校计算机基础教育课程体系规划教材。该书是学习C++的入门教材,可供各类专业学生使用,也可作为计算机培训班的教材以及读者自学参考。
该书分为4部分: 第1部分介绍C++的基本知识和基本语法;第2部分介绍C++基于过程的程序设计;第3部分介绍C++基于对象的程序设计;第4部分介绍C++面向对象的程序设计.
目录
- 第1篇基本知识
- 第1章C++的初步知识3
- 1.1从C到C++3
- 1.2最简单的C++程序5
- 1.3C++程序的构成和书写形式12
- 1.4C++程序的编写和实现13
- 1.5关于C++上机实践15
- 习题15
- 第2章数据类型和表达式18
- 2.1C++的数据类型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.4C++的运算符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.2C++的程序结构和C++语句47
- 3.3赋值操作50
- 3.4C++的输入与输出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.1if语句的形式64
- 3.7.2if语句的嵌套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.6C++处理字符串的方法--字符串类与字符串变量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.8const指针181
- 6.9void指针类型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.3this指针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.6const型数据的小结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.1C++的输入和输出415
- 13.1.1输入输出的含义415
- 13.1.2C++的I/O对C的发展--类型安全和可扩展性415
- 13.1.3C++的输入输出流416
- 13.2标准输出流421
- 13.2.1cout,cerr和clog流421
- 13.2.2标准类型数据的格式输出423
- 13.2.3用流成员函数put输出字符426
- 13.3标准输入流427
- 13.3.1cin流427
- 13.3.2用于字符输入的流成员函数428
- 13.3.3istream类的其他成员函数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