第1章 C++基础 1
1.1 C++简史 1
1.1.1 C语言:现代编程的开端 2
1.1.2 对C++的需求 2
1.1.3 C++的诞生 3
1.2 C++的演化 3
1.3 C++同Java与C#的关系 4
1.4 面向对象编程 5
1.4.1 封装性 6
1.4.2 多态性 6
1.4.3 继承性 7
1.5 第一个简单程序 8
1.5.1 键入程序 8
1.5.2 编译程序 8
1.5.3 运行程序 9
1.5.4 逐行讲解第一个示例程序 10
1.6 处理语法错误 11
1.7 另一个简单的程序 12
1.8 使用运算符 13
1.9 读取键盘输入 15
1.10 一些输出选项 16
1.11 另一种数据类型 18
1.12 两条控制语句 21
1.12.1 if语句 21
1.12.2 for循环 23
1.13 使用代码块 24
1.14 分号与定位 26
1.15 函数介绍 29
1.16 C++的库 30
1.17 C++的关键字 31
1.18 标识符 32
第2章 数据类型和运算符 34
2.1 数据类型的重要意义 34
2.2 C++的数据类型 34
2.2.1 整型数据 37
2.2.2 字符型数据 38
2.2.3 浮点型数据 39
2.2.4 布尔型数据 40
2.2.5 空型数据 41
2.3 字面值 43
2.3.1 十六进制和八进制的字面值 44
2.3.2 字符串字面值 45
2.3.3 字符转义序列 45
2.4 变量详解 46
2.4.1 初始化变量 47
2.4.2 动态初始化 47
2.5 运算符 48
2.6 算术运算符 48
2.7 关系运算符和逻辑运算符 50
2.8 赋值运算符 55
2.8.1 复合赋值运算符 55
2.8.2 赋值运算中的类型转换 56
2.9 表达式 57
2.10 表达式中的类型转换 57
2.10.1 布尔型的转换 57
2.10.2 类型强制转换 57
2.11 空格和圆括号 58
第3章 程序控制语句 63
3.1 if语句 63
3.1.1 条件表达式 65
3.1.2 嵌套的if语句 66
3.1.3 if-else-if阶梯语句 67
3.2 switch语句 68
3.3 for循环语句 75
3.3.1 for循环语句的一些变化 77
3.3.2 可以缺少的部分 78
3.3.3 无限for循环 79
3.3.4 无循环体的循环 79
3.3.5 在for语句循环体内声明循环控制变量 80
3.4 while循环语句 81
3.5 do-while循环 83
3.6 使用break语句从循环中退出 88
3.7 使用continue语句 90
3.8 嵌套的循环 95
3.9 使用goto语句 96
第4章 数组、字符串和指针 99
4.1 一维数组 99
4.2 二维数组 103
4.3 多维数组 105
4.4 字符串 107
4.4.1 字符串基本知识 107
4.4.2 从键盘中读取字符串 108
4.5 一些字符串库函数 110
4.5.1 strcpy函数 110
4.5.2 strcat函数 110
4.5.3 strcmp函数 110
4.5.4 strlen函数 111
4.5.5 字符串函数实例 111
4.5.6 使用空终结符 112
4.6 数组的初始化 113
4.7 字符串数组 117
4.8 指针 119
4.9 指针的概念 119
4.10 指针运算符 119
4.10.1 指针的基本类型很重要 121
4.10.2 通过指针赋值 122
4.11 指针表达式 123
4.11.1 指针运算 123
4.11.2 指针比较 124
4.12 指针和数组 125
4.13 字符串常量 129
4.14 指针数组 132
4.15 空指针的约定 134
4.16 多重间接访问 134
第5章 函数简介 137
5.1 函数的基础知识 137
5.1.1 函数的通式 137
5.1.2 创建函数 138
5.1.3 使用实际参数 139
5.1.4 使用return语句 141
5.1.5 返回值 143
5.1.6 在表达式中使用函数 145
5.2 作用域法则 146
5.2.1 局部作用域 146
5.2.2 全局作用域 151
5.3 将指针和数组传递给函数 153
5.3.1 传递指针 153
5.3.2 传递数组 155
5.3.3 传递字符串 157
5.4 返回指针 158
5.5 main()函数 160
5.5.1 argc和argv:main()函数的参数 160
5.5.2 传递数字命令行参数 161
5.6 函数原型 163
5.7 递归 165
第6章 函数详解 172
6.1 传递参数的方法 172
6.1.1 C++如何传递参数 172
6.1.2 使用指针创建引用调用 173
6.2 引用参数 175
6.2.1 返回引用 179
6.2.2 独立引用 181
6.2.3 使用引用时的几个限制 182
6.3 函数重载 183
6.4 默认的函数参数 195
6.4.1 默认参数与重载 196
6.4.2 正确使用默认参数 198
6.5 函数重载和多义性 199
第7章 更多数据类型和运算符 203
7.1 const和volatile限定符 203
7.1.1 const限定符 203
7.1.2 volatile限定符 205
7.2 存储类说明符 206
7.2.1 auto说明符 206
7.2.2 extern说明符 206
7.2.3 static变量 208
7.2.4 register变量 211
7.3 枚举 213
7.4 typedef关键字 216
7.5 按位运算符 216
7.5.1 AND、OR、XOR和NOT运算符 217
7.5.2 移位运算符 222
7.6 ?运算符 228
7.7 逗号运算符 230
7.8 多重赋值 231
7.9 复合赋值 231
7.10 使用sizeof运算符 232
7.11 关于优先级的小结 233
第8章 类和对象 235
8.1 类的基础知识 235
8.1.1 类的通式 235
8.1.2 定义类 236
8.1.3 向类中添加函数 240
8.2 构造函数和析构函数 248
8.2.1 带参数的构造函数 250
8.2.2 将一个构造函数添加到Vehicle类中 252
8.2.3 另一种可以选择的初始化方法 253
8.3 内联函数 255
8.4 对象数组 263
8.5 指向对象的指针 266
8.6 对象引用 268
第9章 类的详解 270
9.1 重载构造函数 270
9.2 对象赋值 271
9.3 将对象传递给函数 273
9.3.1 构造函数、析构函数和对象传递 274
9.3.2 通过引用传递对象 276
9.3.3 传递对象时的潜在问题 277
9.4 返回对象 278
9.5 创建和使用复制构造函数 280
9.6 友元函数 283
9.7 结构体和共用体 287
9.7.1 结构体 288
9.7.2 共用体 289
9.7.3 匿名共用体 291
9.8 This关键字 292
9.9 运算符重载 293
9.10 使用成员函数进行运算符重载 294
9.10.1 顺序的重要性 297
9.10.2 使用成员函数重载一元运算符 298
9.11 非成员运算符函数 302
9.11.1 使用友元重载一元运算符 306
9.11.2 运算符重载的技巧和限制 308
第10章 继承、虚函数和多态性 319
10.1 继承基础 319
10.2 基类访问控制 325
10.3 使用受保护的成员 327
10.4 构造函数和继承 329
10.5 创建多层层次结构 338
10.6 继承多个基类 342
10.7 构造函数和析构函数执行的顺序 343
10.8 指向派生类型的指针 344
10.9 虚函数和多态性 345
10.9.1 虚函数基础知识 345
10.9.2 继承虚函数 347
10.9.3 使用虚函数的原因 349
10.10 应用虚函数 349
10.11 纯虚函数和抽象类 353
第11章 C++ I/O系统 358
11.1 对早期和现代的C++ I/O进行比较 358
11.2 C++流 359
11.3 C++流类 360
11.4 重载I/O运算符 361
11.4.1 创建插入函数 361
11.4.2 使用友元函数重载插入函数 363
11.4.3 重载提取函数 364
11.5 格式化I/O 366
11.5.1 使用ios成员函数进行格式化 366
11.5.2 使用I/O操控符 371
11.5.3 创建自己的操控符函数 373
11.6 文件I/O 375
11.6.1 打开和关闭文件 375
11.6.2 读写文本文件 377
11.6.3 非格式化和二进制I/O 379
11.6.4 读写数据块 381
11.7 更多的I/O函数 383
11.7.1 更多的get()版本 383
11.7.2 getline() 384
11.7.3 检测EOF 384
11.7.4 peek()和putback() 384
11.7.5 flush() 384
11.8 随机存取 388
11.9 检查I/O状态 391
第12章 异常、模板和其他高级主题 393
12.1 异常处理 393
12.1.1 异常处理基础知识 393
12.1.2 使用多个catch语句 398
12.1.3 捕获所有异常 400
12.1.4 指定由函数抛出的异常 401
12.1.5 再次抛出异常 403
12.2 模板 404
12.2.1 通用函数 404
12.2.2 具有两个通用类型的函数 406
12.2.3 显式重载通用函数 407
12.2.4 通用类 409
12.2.5 显式的类特化 411
12.3 动态分配 416
12.3.1 初始化分配的内存 418
12.3.2 分配数组 419
12.3.3 分配对象 420
12.4 命名空间 423
12.4.1 命名空间基础知识 424
12.4.2 using语句 427
12.4.3 匿名命名空间 429
12.4.4 std命名空间 429
12.5 静态类成员 430
12.5.1 静态成员变量 430
12.5.2 静态成员函数 432
12.6 运行时类型标识(RTTI) 434
12.7 强制类型转换运算符 437
12.7.1 dynamic_cast 438
12.7.2 const_cast 438
12.7.3 static_cast 439
12.7.4 reinterpret_cast 439
12.8 接下来做什么 439
附录A 测验答案 441
第1章 C++基础 441
第2章 数据类型和运算符 443
第3章 程序控制语句 444
第4章 数组、字符串和指针 446
第5章 函数简介 449
第6章 函数详解 452
第7章 更多数据类型和运算符 457
第8章 类和对象 460
第9章 类的详解 464
第10章 继承、虚函数和多态性 466
第11章 C++ I/O系统 466
第12章 异常、模板及其他高级主题 469
附录B 预处理器 478
B.1 #define 478
B.2 类函数宏 479
B.3 #error 481
B.4 #include 481
B.5 条件编译指令 482
B.5.1 #if、#else、#elif和#endif 482
B.5.2 #ifdef和#ifndef 484
B.5.3 #undef 485
B.5.4 使用defined 485
B.6 #line 485
B.7 #pragma 486
B.8 #和##预处理器运算符 486
B.9 预定义的宏名 487
附录C 使用旧版本C++编译器 488