图书介绍
C++程序设计 原书第8版PDF|Epub|txt|kindle电子书版本网盘下载
![C++程序设计 原书第8版](https://www.shukui.net/cover/42/33469047.jpg)
- (美)萨维奇著 著
- 出版社: 北京:清华大学出版社
- ISBN:9787302278993
- 出版时间:2012
- 标注页数:691页
- 文件大小:159MB
- 文件页数:711页
- 主题词:C语言-程序设计
PDF下载
下载说明
C++程序设计 原书第8版PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 计算机和C++编程入门1
1.1 计算机系统2
1.1.1 硬件2
1.1.2 软件5
1.1.3 高级语言6
1.1.4 编译器7
1.1.5 历史回顾8
1.2 编程和问题求解9
1.2.1 算法9
1.2.2 程序设计10
1.2.3 面向对象编程12
1.2.4 软件生命周期12
1.3 C++入门13
1.3.1 C++语言的起源13
1.3.2 一个C++示范程序14
1.3.3 陷阱:在\n中错误地使用斜杠17
1.3.4 编程提示:输入和输出语法17
1.3.5 简单C++程序的布局17
1.3.6 陷阱:在include的文件名前错误地添加一个空格18
1.3.7 编译和运行C++程序19
1.3.8 编程提示:让程序运行起来19
1.4 测试和调试21
1.4.1 程序错误的分类22
1.4.2 陷阱:错误地假定程序正确22
小结23
自测题答案23
编程项目25
第2章 C++基础知识27
2.1 变量和赋值28
2.1.1 变量28
2.1.2 名称:标识符30
2.1.3 变量声明31
2.1.4 赋值语句32
2.1.5 陷阱:未初始化的变量33
2.1.6 编程提示:使用有意义的名称34
2.2 输入和输出35
2.2.1 使用cout进行输出35
2.2.2 include预编译指令和命名空间36
2.2.3 转义序列37
2.2.4 编程提示:用\n或endl终止每一个程序38
2.2.5 格式化带小数点的数字39
2.2.6 用cin进行输入40
2.2.7 设计输入和输出41
2.2.8 编程提示:I/O中的换行41
2.3 数据类型和表达式42
2.3.1 int类型和double类型42
2.3.2 其他数值类型43
2.3.3 char类型44
2.3.4 bool类型45
2.3.5 string类简介45
2.3.6 类型的兼容性47
2.3.7 算术操作符和表达式48
2.3.8 陷阱:除法中的整数50
2.3.9 更多赋值语句51
2.4 简单控制流程51
2.4.1 一个简单的分支机制52
2.4.2 陷阱:连续的不等式56
2.4.3 陷阱:在该用=的时候错用了=56
2.4.4 复合语句57
2.4.5 简单的循环机制58
2.4.6 递增操作符和递减操作符61
2.4.7 编程实例:信用卡余额61
2.4.8 陷阱:无限循环63
2.5 程序风格64
2.5.1 缩进64
2.5.2 注释65
2.5.3 为常量命名66
小结67
自测题答案68
编程项目71
第3章 更多的控制流程77
3.1 使用布尔表达式78
3.1.1 布尔表达式求值78
3.1.2 陷阱:将布尔表达式转换成int值81
3.1.3 枚举类型(选读)83
3.2 多路分支83
3.2.1 嵌套语句83
3.2.2 编程提示:在嵌套语句中使用花括号84
3.2.3 多路if-else语句86
3.2.4 编程实例:州收入税87
3.2.5 switch语句89
3.2.6 陷阱:忘记在switch语句中添加break92
3.2.7 为菜单使用switch语句92
3.2.8 语句块94
3.2.9 陷阱:疏忽局部变量95
3.3 C++循环语句详解97
3.3.1 while语句回顾97
3.3.2 再论递增操作符和递减操作符98
3.3.3 for语句100
3.3.4 陷阱:for语句中多余的分号103
3.3.5 应该使用哪种循环104
3.3.6 陷阱:未初始化的变量和无限循环105
3.3.7 break语句106
3.3.8 陷阱:嵌套循环中的break语句106
3.4 设计循环107
3.4.1 求和与求乘积的循环107
3.4.2 终止循环108
3.4.3 嵌套循环111
3.4.4 调试循环112
小结114
自测题答案115
编程项目118
第4章 过程抽象和返回值的函数123
4.1 自顶向下设计124
4.2 预定义函数124
4.2.1 使用预定义函数124
4.2.2 随机数生成128
4.2.3 强制类型转换129
4.2.4 强制类型转换的古老形式131
4.2.5 陷阱:整数除法丢弃了小数部分131
4.3 程序员自定义函数132
4.3.1 函数定义132
4.3.2 能返回布尔值的函数136
4.3.3 另一种形式的函数声明136
4.3.4 陷阱:实参顺序错误137
4.3.5 函数定义语法总结138
4.3.6 再论函数定义的位置139
4.3.7 编程提示:在分支语句中使用函数调用139
4.4 过程抽象140
4.4.1 黑盒的比喻140
4.4.2 编程提示:选择形参名称142
4.4.3 编程提示:嵌套循环142
4.4.4 案例分析:购买比萨144
4.4.5 编程提示:使用伪代码149
4.5 局部变量149
4.5.1 函数如同小程序149
4.5.2 编程实例:豌豆试验田151
4.5.3 全局常量和全局变量151
4.5.4 传值形参是局部变量153
4.5.5 块作用域155
4.5.6 再论命名空间156
4.5.7 编程实例:阶乘函数158
4.6 重载函数名称158
4.6.1 重载入门159
4.6.2 编程实例;购买比萨(修订版)161
4.6.3 自动类型转换163
小结164
自测题答案165
编程项目167
第5章 所有子任务的函数171
5.1 void函数172
5.1.1 void函数的定义172
5.1.2 编程实例:温度换算174
5.1.3 void函数中的return语句175
5.2 传引用形参176
5.2.1 初探传引用调用177
5.2.2 传引用调用详解178
5.2.3 编程实例:swap_values函数181
5.2.4 混合的参数列表183
5.2.5 编程提示:应该使用哪种参数183
5.2.6 陷阱:疏忽造成的局部变量184
5.3 使用过程抽象186
5.3.1 函数调用函数186
5.3.2 前条件和后条件188
5.3.3 案例分析:超市定价系统188
5.4 测试和调试函数192
存根和驱动程序192
5.5 常规调试技术196
5.5.1 不抱成见196
5.5.2 检查常见错误196
5.5.3 定位错误196
5.5.4 assert宏198
小结199
自测题答案200
编程项目202
第6章 I/O流——对象和类入门207
6.1 流和基本文件I/O208
6.1.1 文件之于I/O的重要性209
6.1.2 文件I/O209
6.1.3 类与对象入门212
6.1.4 编程提示:检查文件是否成功打开214
6.1.5 文件I/O技术216
6.1.6 追加到文件(选读)218
6.1.7 文件名作为输入(选读)219
6.2 流I/O工具221
6.2.1 用流函数格式化输出222
6.2.2 操纵元224
6.2.3 流作为函数实参226
6.2.4 编程提示:检查文件尾228
6.2.5 命名空间的问题229
6.2.6 编程实例:整理文件格式229
6.3 字符I/O230
6.3.1 get和put成员函数231
6.3.2 putback成员函数(选读)233
6.3.3 编程实例:检查输入234
6.3.4 陷阱:输入中不期而遇的'\n'235
6.3.5 编程实例:另一个new_line函数236
6.3.6 函数的默认实参(选读)237
6.3.7 eof成员函数240
6.3.8 编程实例:编辑文本文件242
6.3.9 预定义字符函数243
6.3.10 陷阱:toupper和tolower返回值245
小结245
自测题答案246
编程项目250
第7章 数组257
7.1 数组入门258
7.1.1 声明和引用数组258
7.1.2 编程提示:为数组使用for循环260
7.1.3 陷阱:数组索引总是从零开始260
7.1.4 编程提示:为数组长度使用一个已定义常量260
7.1.5 数组在内存中的表示261
7.1.6 陷阱:数组索引越界262
7.1.7 初始化数组263
7.2 函数中的数组264
7.2.1 索引变量作为函数参数264
7.2.2 整个数组作为函数参数266
7.2.3 const参数修饰符268
7.2.4 陷阱:使用const参数修饰符的使用不一致269
7.2.5 返回数组的函数270
7.2.6 案例分析:产量图270
7.3 数组编程280
7.3.1 部分填充数组280
7.3.2 编程提示:不要吝啬形参282
7.3.3 编程实例:搜索数组282
7.3.4 编程实例:数组排序284
7.4 多维数组287
7.4.1 多维数组基础287
7.4.2 多维数组参数288
7.4.3 编程实例:二维打分程序289
7.4.4 陷阱:在数组索引之间使用逗号292
小结292
自测题答案293
编程项目296
第8章 字符串和向量303
8.1 字符串的数组类型304
8.1.1 C字符串值和C字符串变量305
8.1.2 陷阱:为C字符串使用=和==307
8.1.3 <cstring>中的其他函数309
8.1.4 C字符串输入和输出312
8.1.5 C字符串到数值的转换和可靠输入314
8.2 标准string类317
8.2.1 标准类string简介317
8.2.2 string类的I/O319
8.2.3 编程提示:getline的其他版本322
8.2.4 陷阱:混合使用“cin>>变量;”和getline322
8.2.5 用string类进行字符串处理323
8.2.6 编程实例:回文测试326
8.2.7 string对象和C字符串之间的转换328
8.3 向量329
8.3.1 向量基础知识329
8.3.2 陷阱:使用方括号时超出向量长度332
8.3.3 编程提示:向量赋值具有良好行为332
8.3.4 效率问题332
小结333
自测题答案334
编程项目335
第9章 指针和动态数组341
9.1 指针342
9.1.1 指针变量343
9.1.2 基本内存管理348
9.1.3 陷阱:虚悬指针348
9.1.4 静态变量和自动变量348
9.1.5 编程提示:定义指针类型349
9.2 动态数组350
9.2.1 数组变量和指针变量351
9.2.2 创建和使用动态数组352
9.2.3 指针运算(选读)356
9.2.4 多维动态数组(选读)357
小结358
自测题答案359
编程项目359
第10章 定义类363
10.1 结构364
10.1.1 用于异种数据的结构364
10.1.2 陷阱:结构定义中忘记添加分号367
10.1.3 结构作为函数参数368
10.1.4 编程提示:使用层次化结构368
10.1.5 对结构进行初始化370
10.2 类372
10.2.1 定义类和成员函数372
10.2.2 公共成员和私有成员375
10.2.3 编程提示:将所有成员变量设为私有381
10.2.4 编程提示:定义取值函数和赋值函数381
10.2.5 编程提示:将赋值操作符用于对象382
10.2.6 编程实例:BankAccount类(版本1)382
10.2.7 总结类的一些特征386
10.2.8 用于初始化的构造函数387
10.2.9 编程提示:总是包括默认构造函数392
10.2.10 陷阱:无参数构造函数393
10.3 抽象数据类型395
10.3.1 用于生成抽象数据类型的类395
10.3.2 编程实例:类的另一种实现398
10.4 继承401
10.4.1 派生类401
10.4.2 定义派生类402
小结405
自测题答案405
编程项目409
第11章 类中的友元函数、重载操作符和数组413
11.1 友元函数414
11.1.1 编程实例:一个相等性函数414
11.1.2 友元函数416
11.1.3 编程提示:定义取值函数和友元函数418
11.1.4 编程提示:同时使用成员函数和非成员函数418
11.1.5 编程实例:Money类(版本1)419
11.1.6 实现digit_to_int(选读)423
11.1.7 陷阱:数字常量中的前置零424
11.1.8 const参数修饰符425
11.1.9 陷阱:修饰符const的用法不一致427
11.2 重载操作符429
11.2.1 重载操作符429
11.2.2 用于自动类型转换的构造函数432
11.2.3 重载一元操作符433
11.2.4 重载>>和<<434
11.3 数组和类440
11.3.1 类数组440
11.3.2 数组作为类成员443
11.3.3 编程实例:用于部分填充数组的类444
11.4 类和动态数组445
11.4.1 编程实例:字符串变量类446
11.4.2 析构函数448
11.4.3 陷阱:指针作为传值参数450
11.4.4 拷贝构造函数451
11.4.5 重载赋值操作符454
小结457
自测题答案457
编程项目463
第12章 独立编译和命名空间469
12.1 独立编译470
12.1.1 ADT回顾470
12.1.2 案例分析:独立编译的DigitalTime类471
12.1.3 使用#ifndef478
12.1.4 编程提示:定义其他库480
12.2 命名空间481
12.2.1 命名空间和using预编译指令481
12.2.2 创建命名空间482
12.2.3 限定名称484
12.2.4 命名空间的微妙之处(选读)485
12.2.5 无名命名空间486
12.2.6 编程提示:为命名空间选择名称489
12.2.7 陷阱:混淆全局命名空间和无名命名空间490
小结491
自测题答案491
编程项目492
第13章 指针和链表495
13.1 节点和链表496
13.1.1 节点497
13.1.2 链表500
13.1.3 在表头插入节点501
13.1.4 陷阱:丢失节点503
13.1.5 搜索链表504
13.1.6 指针作为迭代器506
13.1.7 在列表中插入和删除节点507
13.1.8 陷阱:为动态数据结构使用赋值操作符509
13.1.9 链表的变体510
13.1.10 类构成的链表512
13.2 栈和队列514
13.2.1 栈514
13.2.2 编程实例:栈类515
13.2.3 队列518
13.2.4 编程实例:队列类518
小结521
自测题答案522
编程项目523
第14章 递归529
14.1 面向任务的递归函数530
14.1.1 案例分析:垂直数字531
14.1.2 深入递归536
14.1.3 陷阱:无穷递归537
14.1.4 用于递归的栈538
14.1.5 陷阱:栈溢出539
14.1.6 递归与迭代539
14.2 面向值的递归函数540
14.2.1 要返回值的递归函数的常规形式540
14.2.2 编程实例:另一个求乘方函数540
14.3 递归思想544
14.3.1 递归设计技术544
14.3.2 案例分析:二叉搜索(递归思想示例)545
14.3.3 编程实例:递归成员函数550
小结553
自测题答案553
编程项目556
第15章 继承559
15.1 继承基础560
15.1.1 派生类560
15.1.2 派生类中的构造函数566
15.1.3 陷阱:使用来自基类的私有成员变量567
15.1.4 陷阱:私有成员函数不会继承569
15.1.5 protected限定符569
15.1.6 重定义成员函数571
15.1.7 重定义与重载的比较573
15.1.8 访问重定义的基函数574
15.2 继承细节575
15.2.1 不继承的函数575
15.2.2 派生类中的赋值操作符和拷贝构造函数575
15.2.3 派生类中的析构函数576
15.3 多态性577
15.3.1 晚期绑定577
15.3.2 C++虚函数578
15.3.3 虚函数和扩展类型兼容性582
15.3.4 陷阱:切割问题584
15.3.5 陷阱:不使用虚成员函数585
15.3.6 陷阱:试图对虚成员函数定义不齐全的类进行编译585
15.3.7 编程提示:使析构函数成为虚函数586
小结587
自测题答案587
编程项目590
第16章 异常处理597
16.1 异常处理基础598
16.1.1 异常处理的简单例子599
16.1.2 定义自己的异常类605
16.1.3 多个throw块和catch块606
16.1.4 陷阱:首先捕捉较具体的异常607
16.1.5 编程提示:异常类可能很简单608
16.1.6 在函数中抛出异常609
16.1.7 异常规范610
16.1.8 陷阱:派生类中的异常规范611
16.2 用于异常处理的编程技术612
16.2.1 抛出异常的时机612
16.2.2 陷阱:未捕捉的异常613
16.2.3 陷阱:嵌套try-catch块613
16.2.4 陷阱:滥用异常614
16.2.5 异常类层次结构614
16.2.6 测试可用内存614
16.2.7 重新抛出异常615
小结615
自测题答案615
编程项目616
第17章 模板619
17.1 用于算法抽象的模板620
17.1.1 函数模板621
17.1.2 陷阱:编译器的复杂性624
17.1.3 编程实例:泛化排序函数625
17.1.4 编程提示:如何定义模板628
17.1.5 陷阱:为不恰当的类型使用模板628
17.2 用于数据抽象的模板628
17.2.1 类模板的语法629
17.2.2 编程实例:数组类631
小结634
自测题答案634
编程项目636
第18章 标准模板库639
18.1 迭代器640
18.1.1 using声明641
18.1.2 迭代器的基础知识641
18.1.3 陷阱:编译器问题645
18.1.4 迭代器的种类646
18.1.5 常量和可变迭代器648
18.1.6 逆向迭代器649
18.1.7 其他种类的迭代器650
18.2 容器651
18.2.1 顺序容器651
18.2.2 陷阱:迭代器和删除元素654
18.2.3 编程提示:容器中的类型定义654
18.2.4 容器配接器stack和queue655
18.2.5 关联容器set和map657
18.2.6 效率问题662
18.3 泛型算法662
18.3.1 运行时间和大O表示法663
18.3.2 容器访问运行时间666
18.3.3 不修改容器的算法666
18.3.4 会修改容器的算法670
18.3.5 set算法670
18.3.6 排序算法671
小结672
自测题答案672
编程项目673
附录1 C++关键字679
附录2 操作符的优先级680
附录3 ASCII字符集681
附录4 部分库函数682
附录5 内联函数686
附录6 重载数组索引方括号687
附录7 this指针688
附录8 将操作符重载为成员操作符690