第一部分 C++基础 1
第1章 初识C++ 1
创建一个C++程序 1
编写源代码 2
编译和连接源文件 3
测试你的代码 4
大小写的敏感性 4
函数简介 5
函数的声明 6
制作三明治:学习如何解决问题 7
创建和使用代码块 7
main()函数简介 8
使用C风格和C++风格的注释 10
C风格的注释 10
C++风格的注释 11
重要的C++关键字 12
使用基本的输入/输出流 13
了解输入/输出流是C++的对象 13
使用#include指令 14
标准输出流 15
标准输入流 18
标准错误流 20
第2章 探究C++数据类型、变量和常量 21
掌握C++数据类型 21
探究基本数据类型 21
派生数据类型简介 28
标准串简介 30
使用变量 30
声明和定义变量 31
初始化变量 32
使用命名常量 33
声明和初始化命名常量 34
常量的类型 34
在源代码中使用命名常量 35
决定变量和常量的作用域 36
理解声明和定义 38
声明的描述符和声明符 39
指明连接 40
指明存储类 40
转换数据类型 41
隐式转换 41
显式转换 42
第3章 剖析表达式和语句 43
概述 43
掌握表达式 43
使用运算符和操作数 44
初级表达式 44
后缀运算符和后缀表达式 45
单目运算符表达式 46
双目运算符表达式 48
指针-成员运算符表达式 49
条件运算符表达式 49
显式转换表达式 49
使用语句 50
表达式语句 50
复合语句 51
选择语句 51
迭代语句 52
声明语句 53
跳转语句 53
标号语句 54
第4章 使用条件表达式和选择语句 56
使用布尔条件和表达式 56
掌握布尔表达式 56
使用逻辑运算符 58
用真值表求布尔条件的值 62
使用条件运算符 66
掌握运算符优先级 66
使用选择语句 67
使用if语句 67
使用switch语句 70
使用枚举 72
第5章 建立迭代循环 75
为什么使用循环? 75
循环执行的阶段 76
剖析迭代语句 76
使用for语句 76
使用while语句 82
使用do语句 85
设计循环 88
设计交互式程序控制流 89
使用break和continue用于较大的循环控制 90
使用嵌套循环 91
集成循环语句 92
第6章 使用数组 98
为什么使用数组? 98
掌握一维数组 99
定义一个数组 100
访问数组元素 100
通过迭代访问数组元素 101
在声明时初始化一维数组 103
使用并行数组 104
掌握二维数组 107
处理二维数组 108
按列工作 109
按行工作 111
实现一个乘法表 113
多维数组 117
第7章 创建和使用函数 122
为什么使用函数? 122
函数的各种类型 123
无值函数 123
返回值的函数 124
内嵌函数 127
函数的成员 129
函数返回类型和值 129
函数参数 130
缺省参数 131
创建自己的函数 132
声明一个函数 132
定义一个函数 132
使用局部变量 132
使用命令行变元 133
获取变元个数 134
获取并使用变元 134
使用变量-变元表 141
获得模块化函数 144
指定函数连接 147
第二部分 提高篇 149
第8章 函数重载 149
为什么使用函数重载 149
函数重载的类型 153
参数重载类型 153
通过运算符重载函数 155
检查重载函数的内部 159
为了安全的类型连接而进行函数名字碾压 159
函数调用和堆栈 160
第9章 使用结构和联合 163
用结构创建新的数据类型 163
增加结构数据类型的数据成员 164
创建结构数组 169
结构作为数据成员 170
介绍一个工资册处理程序 172
剖析一下工资处理程序 177
增加函数作为数据成员 179
使用联合以获得高效的存储 181
访问联合的数据成员 182
把结构定义为联合的成员 183
把联合定义为结构的成员 188
第10章 使用指针和引用 189
概述 189
理解指针 189
为什么使用指针 189
内存地址 190
声明一个指针 190
对指针反引用 193
使指针指向结构 194
使用指针指向成员符号 195
使用指针作为函数的参数 197
把数组用做指针 198
把数组传给函数 198
使用指针运算 203
理解引用 205
声明和初始化引用 205
使用引用作为函数的参数 206
引用作为函数的返回值 206
第11章 C++中的内存分配 210
静态内存分配 210
分配动态内存 211
堆栈 211
空闲存储区(堆) 211
使用new和delete操作符 212
使用new操作符 212
使用delete操作符 213
数组内存分配 217
创建动态结构数组 219
处理分配错误 221
检测内存分配失败 221
使用函数set_new_handler() 222
创建你自己的new和delete操作符 225
第12章 理解预处理 226
引入预处理器 226
理解预处理状态 227
理解预处理指令 227
文件包含 228
定义和删除标识符 230
条件编译 231
错误输出 236
理解编译指示 236
探索宏 237
宏定义 237
宏展开 239
使用预处理操作符 240
使用操作符# 240
使用操作符## 241
考虑国际通用问题 242
两字符序列 242
三字符序列 243
关键字序列 243
检查预定义宏 244
第13章 创建和使用函数指针 248
函数为什么会有指针? 248
声明指向函数的指针的一些原因 248
声明和使用函数指针 248
声明一个新的数据类型 251
使用函数指针类型 251
创建函数指针数组 253
使用指向重载函数的指针 258
使用指向成员函数的指针 260
第14章 重载运算符 263
为何需要重载运算符? 263
运算符就是函数调用 265
重载运算符 268
运算符重载的一些例子 271
重载赋值运算符 271
重载关系运算符 272
重载函数调用运算符 274
第15章 用调试声明和异常保护程序 277
设计错误处理策略 277
处理运行时错误 277
处理编程错误 277
使用调试声明 277
理解assert()宏 278
使用调试声明的一些原则 279
演示调试声明的使用方法 279
处理异常 285
try块 285
catch异常处理器 286
throw语句 287
使用异常处理 287
捕获意外的异常 290
清除已分配的资源 292
第16章 探索命名空间 294
什么是命名空间? 294
声明命名空间 295
无名的命名空间 298
显式访问命名空间 300
using声明 300
using指令 303
使用命名空间的别名 305
使用复合的命名空间 306
全局的命名空间 307
标准的命名空间 308
第17章 内存分析的数学基础 309
概述 309
剖析计数体系的基数 310
回顾十进制计数体系(以10为基数) 310
分析二进制计数体系(以2为基数) 311
将二进制转换为十进制 311
将十进制转换为二进制 312
分析八进制计数体系(以8为基数) 313
将八进制转换为十进制 313
将十进制转换为八进制 313
基数转换程序:CONVERT 314
分析CONVERT程序 317
分析十六进制计数体系(以16为基数) 319
将十六进制转换为十进制 320
将十进制转换为十六进制 320
将十六进制转换为二进制 321
将二进制转换为十六进制 321
第18章 位操作 322
使用位 322
理解位计数方式 322
理解位字段 323
声明位字段 323
使用位字段 324
使用位运算符 326
位与(AND)运算符 327
位或(OR)运算符 330
位异或(XOR)运算符 331
取反(NOT)运算符 334
对有符号数和无符号数中的位进行操作 337
移位运算 337
使用左移运算符 337
使用右移运算符 337
第19章 编译、连接和调试 343
分析编译器 343
理解编译器的工作原理 343
生成的目标代码 343
修正编译错误 344
分析连接器 345
修正连接错误 346
利用make文件使生成可执行程序的过程自动化 347
寻找并修复代码中的瑕疵 348
增加调试代码 348
使用预处理器进行调试 348
测试和调试的策略 352
第三部分 面向对象编程 359
第20章 面向对象编程简介 359
面向对象编程的基本概念 359
从面向过程编程到面向对象编程 359
关于对象的概念 360
继承 362
多态和虚拟访问方法简介 363
面向对象软件设计的策略 364
虚拟函数、继承的数据成员和代码膨胀 365
了解C++中的对象和类 365
代码重用的好处 366
充分利用可重用代码 367
使用代码库 368
第21章 了解C++类 369
创建C++类 369
考虑类设计 369
封装数据 370
声明类 370
指定访问控制 371
公有访问说明 372
私有访问说明 372
指定保护访问 373
定义数据成员 374
定义非静态数据成员 374
定义静态数据成员 375
使用构造函数与析构函数 375
构造函数 376
析构函数 377
了解this指针 377
创建复制构造函数 381
创建成员运算符 383
定义成员函数 384
定义静态成员函数 385
定义非静态成员函数 387
使用指针-成员运算符表达式 387
设计与实现一个矩形类 390
设计CRect的接口 390
实现CRect类 393
第22章 实现类继承 397
了解基类与派生类 397
创建类层次体系 398
在层次体系中设计构造函数与析构函数 398
重载基类函数 401
基类和派生类作用域限定 402
调用基类函数 402
实现类层次体系 404
使用友员函数和友员类 408
使用友员函数 409
使用友员类 414
创建类库 414
为你的类创建一个二进制库 415
使用库 415
第23章 了解多态性 417
什么是多态性? 417
获取Virtual 417
了解虚函数 418
创建抽象基类 419
定义纯虚函数 419
了解虚表格 420
在层次体系中使用类指针 421
指针多态性 422
创建一个多态类层次体系 426
解决类切割问题 430
使用虚析构函数 432
第24章 在C++中实现动态存储 436
容器类 436
创建动态数组 436
创建动态数组类 437
实现动态数组类 443
创建驱动程序 448
创建链表 451
创建链表类 453
实现结点类 454
加入一个新结点 455
遍历链表 457
查找链表中的一项 457
插入一个结点 458
从链表中删除所有的结点 458
删除一个结点 459
链表类的接口 460
实现链表类 461
创建驱动程序 466
第25章 设计与开发面向对象的程序 471
解决问题的技巧 471
开发过程概述 471
分析系统需求 471
承担一个项目 472
构建系统需要的类 473
设计接口 475
使用模块化源文件 475
创建接口(头)文件 475
创建实现文件 478
设计类访问方法 479
运行中的接口 480
访问类的问题 480
测试与集成模块 480
避免多重定义 480
测试功能性 481
集成模块 482
重用代码 482
第26章 使用模板 483
模板的概念 483
避免冗余代码 483
创建函数模板 484
使用多重通用类的类型 486
创建基类模板 487
模板框架设计 488
充实模板 488
创建更复杂的类模板 489
将现有的类转化为类模板 491
创建通用链表类 492
实现通用结点类 492
分离类接口与实现的问题 494
改变链表类的接口和实现 495
添加一个结点 497
遍历链表 498
查找某项 498
插入一个结点 499
删除链表中的所有结点 499
删除一个结点 500
创建驱动程序 506
第27章 使用动态类型转换与运行时类型标识 511
获取和使用运行时类型信息 511
传统的类型转换体系(C语言形式) 511
新型的类型转换体系(C++形式) 511
使用dynamic_cast操作符 516
使用const_cast操作符 518
使用reinterpret_cast操作符 519
使用static_cast操作符 519
第四部分 使用标准C++库 523
第28章 标准C++库介绍 523
标准C++库概述 523
使用标准的命名空间 523
标识标准C++头文件 524
介绍标准模板库 525
使用标准C库 525
标识标准C++库中的成员 525
诊断 526
输入/输出 526
语言支持 527
定位 528
数值 528
串 528
实用工具 529
标识STL部件 529
算法 530
容器 530
迭代器 531
函数对象 531
适配器 532
分配符 532
第29章 使用迭代器和容器 533
理解迭代器 533
创建一个迭代类 536
标准迭代器的类型 540
探索迭代器操作 541
迭代器类 542
理解容器 545
顺序容器 545
关联容器 557
第30章 使用串 564
字符和标准串 564
创建字符串 564
标识国际业务 564
创建其他的串类型 565
定义字符特性 565
研究basic_string类 566
使用串操作符 567
串迭代器 568
串构造函数 568
使用串函数 570
第31章 使用数值 587
标识数值头文件 587
使用标准数学函数 587
产生随机数 588
使用复数 591
介绍valarrays 592
探究数值算法 593
accumulate算法 594
inner_product算法 596
Partial_sum算法 598
adjacent_difference算法 599
第32章 使用文件和流 602
使用流 602
识别流类型 602
介绍ios_base类 603
介绍basic_ios类 607
介绍basic_istream类 609
介绍basic_ostream类 610
介绍basic_iostream类 610
介绍basic_fstream类 610
使用流操纵符 611
创建格式化流数据 611
使用文件流 614
读写文本文件 614
使用多文件 616
读写二进制流文件 621
第33章 剖析算法 626
通用算法 626
探索不可修改序列算法 627
计数算法 627
查找算法 628
for_each算法 629
搜索算法 629
序列比较算法 630
探索修改序列算法 631
复制算法 632
填充与生成算法 633
替换算法 633
删除算法 634
反转与轮转算法 635
交换算法 636
transform算法 637
唯一算法 637
探索排序序列算法 638
二分搜索算法 639
归并算法 640
分割算法 641
集合操作算法 641
排序算法 643
探索堆操作算法 645
make_heap算法 645
pop_heap算法 645
push_heap算法 646
sort_heap算法 646
探索比较算法 646
lexicographical_compare算法 646
max算法 647
max_element算法 647
min算法 647
min_element算法 647
探索排列算法 648
next_permutation算法 648
prev_permutation算法 648