《中国高等院校计算机基础教育课程体系规划教材:C++程序设计(第2版)》作者谭浩强深入调查了大学的程序设计课程的现状和发展趋势,参阅了国内外数十种有关C++的教材,认真分析了读者在学习中的困难和认识规律,设计了读者易于学习的教材体系,于2004年出版了《C++程序设计》一书。该书降低入门起点,不需要C语言的基础,从零起点介绍程序设计和C++。广大师生用后反映非常好,认为该书定位准确,概念清晰,深入浅出,取舍合理,以通俗易懂的语言对C++的许多难懂的概念作了透彻而通俗的说明,大大降低了初学者学习的困难,是一本初学者学习C++的好教材。 根据教学实践的需要,作者对该书进行了修订,出版了本书,与第1版相比,内容更加丰富,讲解更加清晰,学习更加容易,依据ANSIC++标准进行介绍,引导读者从一开始就按C++的要求编程,而不是过多地迁就C语言的习惯。
本书把入门起点降低,读者不需要具备C语言的基础。本书包括14章,分为4篇:基本知识;面向过程的程序设计;基于对象的程序设计;面向对象的程序设计。本书内容全面,例题丰富,概念清晰,循序渐进,易于学习。
《C++程序设计》是依据ANSI C++标准进行介绍的,引导读者从一开始就按标准C++的规定编程。本书配有两本辅导教材,即《C++程序设计题解与上机指导》和《C++编程实践指导》,全书分为4篇:基本知识;基于过程的程序设计;基于对象的程序设计;面向对象的程序设计。 本书内容全面,例题丰富,概念清晰,循序渐进,易于学习,即使没有教师讲授,读者也能看懂本书的大部分内容。本书是学习C++的入门教材,可供各类专业学生使用,也可作为计算机培训班的教材以及读者自学参考。
目录
- 第1篇基本知识
- 第1章C++的初步知识 [3]
- 1.1从C到C++
- 1.2最简单的C++程序
- 1.3C++程序的构成和书写形式
- 1.4C++程序的编写和实现
- 1.5关于C++上机实践
- 习题
- 第2章数据类型和表达式
- 2.1C++的数据类型
- 2.2常量
- 2.2.1什么是常量
- 2.2.2数值常量
- 2.2.3字符常量
- 2.2.4符号常量
- 2.3变量
- 2.3.1什么是变量
- 2.3.2变量名规则
- 2.3.3定义变量
- 2.3.4对变量赋初值
- 2.3.5常变量
- 2.4C++的运算符
- 2.5算术运算符与算术表达式
- 2.5.1基本的算术运算符
- 2.5.2算术表达式和运算符的优先级与结合性
- 2.5.3表达式中各类数值型数据间的混合运算
- 2.5.4自增(++)和自减(——)运算符
- 2.5.5强制类型转换运算符
- 2.6赋值运算符和赋值表达式
- 2.6.1赋值运算符
- 2.6.2赋值过程中的类型转换
- 2.6.3复合赋值运算符
- 2.6.4赋值表达式
- 2.7逗号运算符和逗号表达式
- 习题
- 第2篇基于过程的程序设计
- 第3章程序设计初步
- 3.1基于过程的程序设计和算法
- 3.1.1算法的概念+
- 3.1.2算法的表示
- 3.2C++的程序结构和C++语句
- 3.3赋值操作
- 3.4C++的输入与输出
- 3.4.1输入流与输出流的基本操作
- 3.4.2在标准输入流与输出流中使用控制符
- 3.4.3用getchar和putchar函数进行字符的输入和输出
- 3.4.4用scanf和printf函数进行输入和输出
- 3.5编写顺序结构的程序
- 3.6关系运算和逻辑运算
- 3.6.1关系运算和关系表达式
- 3.6.2逻辑常量和逻辑变量
- 3.6.3逻辑运算和逻辑表达式
- 3.7选择结构和if语句
- 3.7.1if语句的形式
- 3.7.2if语句的嵌套
- 3.7.3条件运算符和条件表达式
- 3.7.4多分支选择结构与switch语句
- 3.7.5 编写选择结构的程序
- 3.8循环结构和循环语句
- 3.8.1用while语句构成循环
- 3.8.2用do-while语句构成循环
- 3.8.3用for语句构成循环
- 3.8.4几种循环的比较
- 3.12循环的嵌套79
- 3.13break语句和continue语句79
- 3.14编写循环结构的程序80
- 习题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对被调用函数的声明和函数原型95
- *4.5内置函数97
- *4.6函数的重载99
- *4.7函数模板102
- *4.8有默认参数的函数103
- 4.9函数的嵌套调用105
- 4.10函数的递归调用109
- 4.11局部变量和全局变量112
- 4.11.1局部变量112
- 4.11.2全局变量113
- 4.12变量的存储类别115
- 4.12.1动态存储方式与静态存储方式115
- 4.12.2自动变量116
- 4.12.3用static声明静态局部变量116
- 4.12.4用register声明寄存器变量119
- 4.12.5用extern声明外部变量119
- 4.12.6用static声明静态外部变量121
- 4.13变量属性小结122
- 4.14关于变量的声明和定义124
- 4.15内部函数和外部函数125
- 4.15.1内部函数125
- 4.15.2外部函数125
- 4.16预处理命令127
- 4.16.1宏定义127
- 4.16.2“文件包含”处理128
- 4.16.3条件编译131
- 习题132
- 第5章数组134
- 5.1数组的概念134
- 5.2一维数组的定义和引用135
- 5.2.1定义一维数组135
- 5.2.2引用一维数组的元素135
- 5.2.3一维数组的初始化136
- 5.2.4一维数组程序举例137
- 5.3二维数组的定义和引用139
- 5.3.1定义二维数组139
- 5.3.2二维数组的引用140
- 5.3.3二维数组的初始化140
- 5.3.4二维数组程序举例142
- 5.4用数组名作函数参数144
- 5.5字符数组148
- 5.5.1字符数组的定义和初始化148
- 5.5.2字符数组的赋值与引用149
- 5.5.3字符串和字符串结束标志150 [4]
- 5.5.4字符数组的输入输出151
- 5.5.5字符串处理函数152
- 5.5.6字符数组应用举例155
- *5.6C++处理字符串的方法——字符串类与字符串变量156
- 5.6.1字符串变量的定义和引用156
- 5.6.2字符串变量的运算157
- 5.6.3字符串数组158
- 5.6.4字符串运算举例159
- 习题162
- 第6章指针164
- 6.1指针的概念164
- 6.2变量与指针166
- 6.2.1定义指针变量166
- 6.2.2引用指针变量167
- 6.2.3指针作为函数参数170
- 6.3数组与指针174
- 6.3.1指向数组元素的指针174
- 6.3.2用指针变量作函数参数接收数组地址178
- 6.3.3多维数组与指针180
- 6.4字符串与指针184
- 6.5函数与指针186
- 6.5.1用函数指针变量调用函数186
- 6.5.2用指向函数的指针作函数参数187
- 6.6返回指针值的函数188
- 6.7指针数组和指向指针的指针188
- 6.7.1指针数组的概念188
- 6.7.2指向指针的指针190
- 6.8有关指针的数据类型和指针运算的小结192
- 6.8.1有关指针的数据类型的小结192
- 6.8.2指针运算小结193
- *6.9引用194
- 6.9.1什么是变量的引用194
- 6.9.2引用的简单使用195
- 6.9.3引用作为函数参数195
- 习题199
- 第7章自定义数据类型201
- 7.1结构体类型201
- 7.1.1结构体概述201
- 7.1.2结构体类型变量的定义方法及其初始化202
- 7.1.3结构体变量的引用205
- 7.1.4结构体数组207
- 7.1.5指向结构体变量的指针211
- 7.1.6结构体类型数据作为函数参数214
- *7.1.7动态分配和撤销内存的运算符new和delete217
- 7.2共用体219
- 7.2.1共用体的概念219
- 7.2.2对共用体变量的访问方式220
- 7.2.3共用体类型数据的特点220
- 7.3枚举类型222
- 7.4用typedef声明类型225
- 习题227第3篇基于对象的程序设计第8章类和对象231
- 8.1面向对象程序设计方法概述231
- 8.1.1什么是面向对象的程序设计231
- 8.1.2面向对象程序设计的特点234
- 8.1.3类和对象的作用235
- 8.1.4面向对象的软件开发236
- 8.2类的声明和对象的定义238
- 8.2.1类和对象的关系238
- 8.2.2声明类类型238
- 8.2.3定义对象的方法240
- 8.2.4类和结构体类型的异同242
- 8.3类的成员函数243
- 8.3.1成员函数的性质243
- 8.3.2在类外定义成员函数244
- 8.3.3inline成员函数245
- 8.3.4成员函数的存储方式246
- 8.4对象成员的引用248
- 8.4.1通过对象名和成员运算符访问对象中的成员248
- 8.4.2通过指向对象的指针访问对象中的成员249
- 8.4.3通过对象的引用变量来访问对象中的成员249
- 8.5类的封装性和信息隐蔽249
- 8.5.1公用接口与私有实现的分离249
- 8.5.2类声明和成员函数定义的分离251
- 8.5.3面向对象程序设计中的几个名词254
- 8.6类和对象的简单应用举例254
- 习题261
- 第9章关于类和对象的进一步讨论263 [4]
- 9.1构造函数263
- 9.1.1对象的初始化263
- 9.1.2构造函数的作用264
- 9.1.3带参数的构造函数266
- 9.1.4用参数初始化表对数据成员初始化267
- 9.1.5构造函数的重载267
- 9.1.6使用默认参数的构造函数269
- 9.2析构函数272
- 9.3调用构造函数和析构函数的顺序274
- 9.4对象数组275
- 9.5对象指针277
- 9.5.1指向对象的指针277
- 9.5.2指向对象成员的指针278
- 9.5.3this指针281
- 9.6共用数据的保护282
- 9.6.1常对象283
- 9.6.2常对象成员284
- 9.6.3指向对象的常指针285
- 9.6.4指向常对象的指针变量285
- 9.6.5对象的常引用289
- 9.6.6const型数据的小结290
- 9.7对象的动态建立和释放290
- 9.8对象的赋值和复制291
- 9.8.1对象的赋值291
- 9.8.2对象的复制293
- 9.9静态成员295
- 9.9.1静态数据成员296
- 9.9.2静态成员函数298
- 9.10友元301
- 9.10.1友元函数301
- 9.10.2友元类305
- 9.11类模板306
- 习题310
- 第10章运算符重载314
- 10.1什么是运算符重载314
- 10.2运算符重载的方法316
- 10.3重载运算符的规则318
- 10.4运算符重载函数作为类成员函数和友元函数320
- 10.5重载双目运算符323
- 10.6重载单目运算符328
- 10.7重载流插入运算符和流提取运算符331
- 10.7.1重载流插入运算符“<<”331
- 10.7.2重载流提取运算符“>>”333
- 10.8不同类型数据间的转换335
- 10.8.1标准类型数据间的转换335
- 10.8.2转换构造函数336
- 10.8.3类型转换函数338
- 习题343第4篇面向对象的程序设计第11章继承与派生347
- 11.1继承与派生的概念347
- 11.2派生类的声明方式350
- 11.3派生类的构成351
- 11.4派生类成员的访问属性352
- 11.4.1公用继承353
- 11.4.2私有继承355
- 11.4.3保护成员和保护继承358
- 11.4.4多级派生时的访问属性361
- 11.5派生类的构造函数和析构函数363
- 11.5.1简单的派生类的构造函数363
- 11.5.2有子对象的派生类的构造函数366
- 11.5.3多层派生时的构造函数369
- 11.5.4派生类构造函数的特殊形式372
- 11.5.5派生类的析构函数372
- 11.6多重继承373
- 11.6.1声明多重继承的方法373
- 11.6.2多重继承派生类的构造函数373
- 11.6.3多重继承引起的二义性问题376
- 11.6.4虚基类379
- 11.7基类与派生类的转换384
- 11.8继承与组合388
- 11.9继承在软件开发中的重要意义389
- 习题390
- 第12章多态性与虚函数395
- 12.1多态性的概念395
- 12.2一个典型的例子396
- 12.3虚函数401
- 12.3.1虚函数的作用401
- 12.3.2静态关联与动态关联405
- 12.3.3在什么情况下应当声明虚函数406
- 12.3.4虚析构函数407
- 12.4纯虚函数与抽象类408
- 12.4.1纯虚函数408
- 12.4.2抽象类409
- 12.4.3应用实例410
- 习题416
- 第13章输入输出流417
- 13.1C++的输入和输出417
- 13.1.1输入输出的含义417
- 13.1.2C++的I/O对C的发展——类型安全和
- 可扩展性417
- 13.1.3C++的输入输出流418
- 13.2标准输出流422
- 13.2.1cout,cerr和clog流422
- 13.2.2格式输出425
- 13.2.3用流成员函数put输出字符429
- 13.3标准输入流430
- 13.3.1cin流430
- 13.3.2用于字符输入的流成员函数432
- 13.3.3istream类的其他成员函数436
- 13.4文件操作与文件流439
- 13.4.1文件的概念439
- 13.4.2文件流类与文件流对象440
- 13.4.3文件的打开与关闭441
- 13.4.4对ASCII文件的操作443
- 13.4.5对二进制文件的操作448
- 13.5字符串流453
- 习题458
- 第14章C++工具459
- 14.1异常处理459
- 14.1.1异常处理的任务459
- 14.1.2异常处理的方法460
- 14.1.3在函数声明中进行异常情况指定467
- 14.1.4在异常处理中处理析构函数467
- 14.2命名空间469
- 14.2.1为什么需要命名空间469
- 14.2.2什么是命名空间473
- 14.2.3使用命名空间解决名字冲突475
- 14.2.4使用命名空间成员的方法477
- 14.2.5无名的命名空间479
- 14.2.6标准命名空间std479
- 14.3使用早期的函数库480
- 习题481
- 附录A常用字符与ASCII代码对照表483
- 附录B运算符与结合性484