第一部分 进入C++的世界
第1章 简介和环境搭建 3
1.1 什么是编程语言 3
1.2 C和C++之间的不同之处 3
1.3 学习C++之前,是否需要先了解C 3
1.4 成为程序员,是否需要懂数学 4
1.5 术语 4
1.5.1 编程 4
1.5.2 可执行文件 4
1.6 编辑和编译源文件 4
1.7 关于示例源代码 5
1.8 Windows 5
1.8.1 第1步:下载Code::Blocks 5
1.8.2 第2步:安装Code::Blocks 5
1.8.3 第3步:运行Code::Blocks 6
1.8.4 错误调试 9
1.8.5 使用Code::Blocks的原因 11
1.9 Macintosh 11
1.9.1 Xcode 12
1.9.2 安装Xcode 5 12
1.9.3 运行Xcode 12
1.9.4 用Xcode创建第一个C++
程序 12
1.9.5 安装Xcode 6 beta 16
1.9.6 运行Xcode 16
1.9.7 用Xcode创建第一个C++
程序 17
1.9.8 错误调试 20
1.10 Linux 21
1.10.1 步骤1:安装g++ 21
1.10.2 步骤2:运行g++ 22
1.10.3 步骤3:运行你的程序 22
1.10.4 步骤4:安装文本编辑器 23
1.10.5 配置nano 23
1.10.6 使用nano 23
第2章 C++基础 27
2.1 C++简介 27
2.1.1 最简单的C++程序 27
2.1.2 程序无法运行的原因 29
2.1.3 C++程序的基本结构 30
2.2 为程序添加注释 30
2.3 像程序员一样思考,创建可复用的
代码 31
2.4 痛并快乐着的练习 32
2.5 问答题 32
2.6 实践题 33
第3章 用户交互和变量 34
3.1 变量 34
3.1.1 C++中的变量声明 34
3.1.2 使用变量 34
3.1.3 程序闪退的处理方法 35
3.1.4 修改、使用和比较变量 36
3.1.5 加减1的简写 36
3.2 变量的使用和滥用 38
3.2.1 C++中声明变量的常见错误 38
3.2.2 区分大小写 39
3.2.3 变量命名 39
3.3 字符串存储 40
3.4 基本类型的存储解析 42
3.5 问答题 43
3.6 实践题 44
第4章 if语句 45
4.1 if的基础语法 45
4.2 表达式 46
4.2.1 truth 47
4.2.2 布尔型 48
4.3 else语句 48
4.4 else-if 49
4.5 字符串比较 49
4.6 逻辑运算符在条件语句上的有趣应用 50
4.6.1 逻辑非 50
4.6.2 逻辑与 51
4.6.3 逻辑或 51
4.6.4 综合表达式 52
4.6.5 逻辑表达式示例 53
4.7 问答题 54
4.8 实践题 54
第5章 循环 55
5.1 while循环 55
5.2 for循环 57
5.2.1 变量初始化 57
5.2.2 循环条件 57
5.2.3 变量更新 57
5.3 do-while循环 58
5.4 控制循环 59
5.5 嵌套循环 61
5.6 选择合适的循环 62
5.6.1 for循环 62
5.6.2 while循环 62
5.6.3 do-while循环 63
5.7 问答题 64
5.8 实践题 64
第6章 函数 66
6.1 函数语法 66
6.2 局部变量和全局变量 68
6.2.1 局部变量 68
6.2.2 全局变量 69
6.2.3 有关全局变量的警告 70
6.3 使函数对调用有效 71
6.3.1 函数定义和声明 71
6.3.2 函数原型的应用示例 72
6.4 把程序拆分成函数 73
6.4.1 当需要重复代码时 73
6.4.2 使代码更加易读 73
6.5 命名和重载函数 73
6.6 函数概述 74
6.7 问答题 74
6.8 实践题 75
第7章 如何解决问题 76
7.1 只需判断数被除时有无余数 78
7.2 效率和安全的简单说明 79
7.3 不知道算法的情况下的解决方案 80
7.4 实践题 82
第8章 switch-case和枚举 83
8.1 比较switch-case和if-else 85
8.2 使用枚举创建简单类型 86
8.3 问答题 87
8.4 实践题 88
第9章 随机 89
9.1 获得随机数 90
9.2 bug和随机数 92
9.3 问答题 92
9.4 实践题 93
第二部分 数据处理
第10章 数组 96
10.1 数组的基础语法 96
10.2 数组使用示例 97
10.2.1 使用数组存储排序 97
10.2.2 用多维数组表示网格 98
10.3 使用数组 98
10.3.1 数组和for循环 98
10.3.2 将数组传递给函数 99
10.3.3 注销数组的末尾 101
10.4 数组排序 101
10.5 问答题 105
10.6 实践题 106
第11章 结构体 107
11.1 关联多个值 107
11.1.1 语法 107
11.1.2 传递结构体变量 109
11.2 问答题 111
11.3 实践题 112
第12章 指针简介 113
12.1 忘记之前对指针的认知 113
12.2 指针的概念以及关注指针的原因 113
12.3 内存的概念 114
12.3.1 变量与地址 115
12.3.2 内存布局 116
12.4 指针的其他优点(和缺点) 117
12.5 问答题 118
12.6 实践题 119
第13章 使用指针 120
13.1 指针的语法 120
13.2 指针的指向:变量的地址 121
13.3 未初始化指针与空指针 125
13.4 指针和函数 125
13.5 引用 128
13.6 问答题 129
13.7 实践题 130
第14章 动态内存分配 131
14.1 获得更多的新内存 131
14.1.1 运行内存不足 132
14.1.2 引用和动态分配 132
14.2 指针和数组 132
14.3 多维数组 134
14.4 指针运算 135
14.4.1 理解二维数组 136
14.4.2 指向指针的指针 137
14.4.3 指向指针的指针与二维
数组 138
14.5 盘点指针 139
14.6 问答题 140
14.7 实践题 141
第15章 数据结构简介与链表 142
15.1 指针和结构体 144
15.2 创建一个链表 145
15.2.1 第一轮 146
15.2.2 第二轮 147
15.3 遍历链表 148
15.4 盘点链表 150
15.5 问答题 152
15.6 实践题 153
第16章 递归 155
16.1 如何看待递归 155
16.2 递归和数据结构 157
16.3 循环和递归 159
16.4 栈 161
16.4.1 栈的力量 163
16.4.2 递归的缺点 164
16.4.3 调试栈溢出 164
16.4.4 性能 166
16.5 盘点递归 166
16.6 问答题 167
16.7 实践题 167
第17章 二叉树 169
17.1 在现实世界中使用二叉树 184
17.2 问答题 186
17.3 实践题 187
第18章 标准模板库 188
18.1 vector,大小可变的数组 189
18.1.1 vector的方法调用 190
18.1.2 vector的其他功能 190
18.2 map 191
18.3 迭代器 192
18.4 盘点STL 195
18.5 进一步学习STL 196
18.6 问答题 196
18.7 实践题 197
第19章 更多关于字符串的内容 198
19.1 读入字符串 198
19.2 字符串长度和访问单个元素 200
19.3 字符串搜索与子字符串 200
19.4 通过引用传递 202
19.4.1 const传播 203
19.4.2 const和STL 204
19.5 问答题 206
19.6 实践题 206
第20章 使用Code::Blocks进行调试 208
20.1 踏上调试之旅 209
20.2 设置断点 211
20.2.1 调试崩溃问题 216
20.2.2 强行进入一个“悬停”
程序 219
20.2.3 修改变量 223
20.2.4 总结 223
20.3 实践题 223
20.3.1 问题1:指数问题 223
20.3.2 问题2:相加问题 224
20.3.3 问题3:斐波那契程序的
bug 225
20.3.4 问题4:列表的错误读取
和错误输出 225
第三部分 编写大规模程序
第21章 将程序分解 228
21.1 理解C++的构建过程 228
21.1.1 预处理 228
21.1.2 编译 230
21.1.3 链接 230
21.1.4 把编译和链接分开的原因 231
21.2 如何把程序分开到不同的文件中 231
21.2.1 第一步:将声明和定义分
开 231
21.2.2 第二步:找出哪些函数需
要共享出去 232
21.2.3 第三步:把共用的函数移
到新的文件中 232
21.2.4 看一个完整的例子 233
21.2.5 关于头文件其他要注意的
地方 237
21.2.6 在开发环境中处理多个源
文件 237
21.3 问答题 240
21.4 实践题 240
第22章 程序设计方法介绍 241
22.1 冗余代码 241
22.2 假定数据是如何存储的 242
22.3 设计和注释 244
22.4 问答题 245
第23章 隐藏结构化数据的表示 246
23.1 问答题 250
23.2 实践题 250
第24章 类 251
24.1 隐藏数据的存储方式 251
24.2 声明一个类的实例 253
24.3 类的职责 254
24.4 小结 255
24.5 问答题 255
24.6 实践题 256
第25章 类的生命周期 257
25.1 对象构造 257
25.1.1 没有新建构造函数的结果 260
25.1.2 初始化类的成员 260
25.1.3 用初始化列表初始化常量
字段 261
25.2 解构对象 262
25.2.1 delete时的解构 264
25.2.2 超出作用域时的解构 264
25.2.3 由其他析构函数导致的
解构 265
25.3 复制类 266
25.3.1 赋值操作符 267
25.3.2 复制构造函数 269
25.3.3 所有编译器生成的方法 270
25.3.4 彻底地阻止复制 271
25.4 问答题 272
25.5 实践题 273
第26章 继承和多态 274
26.1 C++中的继承 275
26.1.1 继承的别的作用以及误用
的情况 278
26.1.2 继承、对象构建和销毁 279
26.1.3 多态和对象销毁 281
26.1.4 对象切割的问题 283
26.1.5 与子类共享代码 284
26.1.6 protected的数据 285
26.1.7 属于类的数据 285
26.1.8 如何实现多态 286
26.2 问答题 288
26.3 实践题 290
第27章 命名空间 291
27.1 问答题 294
27.2 实践题 295
第28章 文件I/O 296
28.1 文件I/O基础 296
28.2 文件格式 298
28.3 写文件 301
28.4 文件位置 302
28.5 接受命令行参数 305
28.6 二进制文件 I/O 307
28.6.1 处理二进制文件 309
28.6.2 转换到char* 309
28.6.3 二进制I/O的一个例子 310
28.6.4 把类存储到文件中 311
28.6.5 读取二进制文件 312
28.7 问答题 315
28.8 实践题 315
第29章 C++中的模板 318
29.1 模板函数 318
29.1.1 类型推断 320
29.1.2 鸭子类型 320
29.2 模板类 321
29.3 使用模板的一些小技巧 322
29.4 模板小结 325
29.5 问答题 328
29.6 实践题 330
第四部分 其他
第30章 使用iomanip格式化输出 332
30.1 处理空间问题 332
30.1.1 使用setw设置字段宽度 332
30.1.2 改变填充字符 333
30.1.3 永久改变设置 333
30.2 把你的iomanip知识汇总到一起 334
30.2.1 输出数字 336
30.2.2 使用setprecision来设置数值输出的精度 336
30.2.3 如何处理货币 337
30.2.4 按不同的进制输出 337
第31章 异常和错误报告 338
第32章 最后的话 346
索引 368
· · · · · · (
收起)