第一部分 Microsoft C/C++基本特征 1
第1章 Microsoft C/C++起步 1
1.1 Microsoft C/C++磁盘 1
目录 1
1.1.1 安装Microsoft C/C++ 2
1.1.2 运行SETUP 2
1.1.3 DOS模式下SETUP的使用 3
1.1.4 基于Windows的SETUP的使用 4
1.1.5 附加库安装 5
1.1.6 选择内存模式 7
1.2 程序员工作台(PWB) 7
1.2.1 PWB初步 7
1.2.2 PWB菜单和窗口的使用 8
1.2.2.1 菜单系统 9
1.3 Microsoft C/C++配置 11
1.2.2.2 窗口系统 11
1.3.1 键设置 12
1.3.2 编辑器设定 13
1.3.3 颜色 14
1.3.4 建立选项 14
1.3.5 设置项目模板 14
1.3.6 语言选项 14
1.3.7 连接选项 16
1.3.8 NMAKE选项 16
1.4 在PWB内编译并执行程序 16
1.5 在PWB外编译和连接 16
1.5.1 /Yc,/Yd,/Yu 18
1.6 书写第一个C程序 19
1.6.1 C程序结构 19
1.6.1.1 预处理器命令 21
1.6.1.2 全局说明 22
1.6.1.3 main()函数 23
1.6.1.4 用户定义函数 24
1.6.2 利用编辑器编写程序 24
1.7 库函数介绍 28
1.7.1 基本输入函数的使用 28
1.7.1.1 get...()函数 29
1.7.1.2 scanf()函数 30
1.7.2 基本输出函数的使用 31
1.7.2.1 put...()函数 31
1.7.2.2 printf()函数 32
1.7.3 格式转换函数的使用 33
1.7.3.1 atoi()函数 33
1.7.3.2 toupper()函数 34
1.9 小结 35
1.8 练习 35
第2章 C语言基础 37
2.1 基本知识介绍 37
2.1.1 源模块、目标模块和装入模块 37
2.1.2 程序逻辑与执行流 39
2.1.2.1 条件语句 39
2.1.2.2 循环语句 42
2.2 基本的数据类型 45
2.2.1 C的基本数据类型 45
2.2.1.1 整数 45
2.2.1.2 浮点数 46
2.2.1.3 字符数据 47
2.2.2 在何处定义数据对象 47
2.3 编写C表达式和语句 50
2.3.1 表达式和语句 50
2.3.2 C运算符集介绍 52
2.4.1 隐含类型转换 54
2.4 类型转换控制 54
2.4.2 显式类型转换 55
2.5 C语言宏 56
2.5.1 定义类对象宏 57
2.5.2 定义类函数宏 60
2.6 练习 63
2.7 小结 63
第3章 C函数的使用 65
3.1 main()函数和库函数 65
3.1.1 编写main函数 65
3.1.2 库函数 67
3.1.2.1 有哪些库函数 67
3.1.2.2 在程序中嵌入库函数 68
3.2.1 书写函数原型 70
3.2 编写自己的函数 70
3.2.2 向函数传递参数 72
3.3 从函数返回值 75
3.3.1 定义和使用函数类型 75
3.3.2 把函数当作对象使用 77
3.4 存储类 78
3.4.1 变量作用域 78
3.4.2 变量生存期 79
3.4.3 变量的连接性 80
3.5 高级程序控制逻辑 81
3.5.1 编写循环控制语句 81
3.5.1.1 goto语句 81
3.5.1.2 break语句 82
3.5.1.3 continue语句 82
3.5.2.1 exit()和abort()函数 83
3.5.2 改变程序运行流程 83
3.5.2.2 system(),exec…()和spawn…() 85
3.6 可变参数表 86
3.6.1 设计可变参数表 86
3.6.2 va...()函数 87
3.7 练习 90
3.8 小结 90
第4章 指针和派生类型 92
4.1 标准C的派生类型 92
4.1.1 C的类型分类 92
4.1.2 从老类型生成新类型 92
4.2 C指针 95
4.2.1 间接寻址 96
4.2.2 C的间接引用和地址运算符 101
4.3.1 声明和使用数组对象 104
4.3 数组和字符串的使用 104
4.3.2 C的字符串 106
4.4 结构和联合 110
4.4.1 用不同类型组成结构 110
4.4.2 用联合改变结构和对象的面貌 113
4.5 函数指针 115
4.5.1 声明和初始化函数指针 115
4.5.2 用指针引用调用函数 116
4.6 动态存储的指针 118
4.6.1 C程序和动态存储 119
4.6.2 动态内存 120
4.7 练习 125
4.8 小结 126
第5章 Microsoft C/C++程序的构造、编译和测试 127
5.1 在一个程序中使用多个源文件 127
5.1.1 一个源文件包括哪些函数 127
5.1.3 生成项目文件 144
5.1.2 建立Microsoft C/C++项目文件 144
5.2 外部引用 146
5.2.1 关键字extern的使用 146
5.2.2 外部函数的使用 147
5.3 为外部模块编写头文件 148
5.3.1 确定头文件的内容 148
5.3.2 嵌入用户提供的头文件 149
5.4 在头文件中使用条件编译指令 150
5.5 在PWB下编译和运行程序 152
5.5.1 编译和运行简单程序 152
5.5.2 编译和运行复杂程序 153
5.6 NMAKE实用程序 154
5.6.1 NMAKE使用举例 154
5.7.1 命令行 156
5.7 注意:列出所有文件 156
5.6.2 显式规则 156
5.7.2 推理规则 157
5.7.3 宏 157
5.7.4 条件指示 158
5.8 练习 159
5.9 小结 160
第6章 Microsoft C/C++I/O函数库 161
6.1 I/O概念 161
6.1.1 文件和设备 161
6.1.2 文件和流 162
6.1.3 文件和二进制流 164
6.2 用标准流进行I/O 164
6.2.1 格式化I/O函数 165
6.2.1.1 scanf()函数 168
6.2.1.2 printf()函数 170
6.2.2 字符I/O函数 173
6.3 文件控制函数 177
6.3.1 打开、关闭和控制文件 177
6.3.2 控制文件缓冲区 180
6.4 直接文件I/O函数 181
6.4.1 直接I/O的概念 182
6.4.2 直接读写文件 183
6.5 文件定位函数 188
6.5.1 获取当前文件位置 188
6.5.2 设置新的文件位置 190
6.6 处理文件I/O错误 191
6.6.1 检测文件I/O错误 191
6.6.2 显示和清除文件I/O错误 192
6.7 练习 192
6.8 小结 193
7.1.1 段、节和偏移量 195
7.1 80x86体系结构介绍 195
第7章 存储模式的使用 195
7.1.2 CPU地址寄存器 197
7.2 near、far和huge指针 199
7.2.1 选择需要的指针大小 199
7.2.2 near、far和huge说明符 200
7.3 Microsoft C/C++六种存储模式 203
7.3.1 确定使用何种存储模式 203
7.3.2 用混合模式编程 204
7.4 生成.COM可执行文件 206
7.4.1 .COM文件 206
7.5 Microsoft C/C++的覆盖虚拟环境 207
7.5.1 覆盖管理程序的功能 208
7.5.2 MOVE 208
7.6 设计并生成覆盖程序 209
7.6.1 确定覆盖哪些模块 209
7.6.2 编译和连接覆盖程序 210
7.7 虚拟内存 214
7.7.1 _vlock()的使用 217
7.7.2 释放虚拟存储块 217
7.7.3 结束虚拟存储管理 217
7.8 练习 218
7.9 小结 218
第8章 Microsoft C/C++视频函数 220
8.1 IBM/PC的文本模式 220
8.1.1 PC机视频适配器和屏幕简介 220
8.1.2 屏幕I/O的内存映像 221
8.2 对文本屏幕的控制 221
8.2.1 选择视频模式 221
8.2.2 选择文本颜色 222
8.2.3 显示文本颜色 224
8.3 窗口函数 225
8.3.1 在屏幕指定位置显示文本 226
8.3.2 判断当前文本模式的设置 227
8.3.3 判断当前文本颜色的设置 227
8.3.4 判断当前文本窗口的边界 227
8.3.5 判断当前文本输出的位置 227
8.3.6 判断其它屏幕属性 228
8.4 IBM/PC的图形模式 228
8.4.1 像素和调色板 228
8.4.2 调色板 229
8.4.3 CGA调色板 229
8.4.4 选择背景颜色 230
8.4.5 从当前调色板中选择颜色 230
8.4.6 CGA高分辨率模式 231
8.4.7 EGA/VGA视频模式下的颜色选择 231
8.4.8 设置VGA调色板 232
8.4.10 设置EGA调色板 233
8.4.9 设置MCGA调色板 233
8.5 图形绘制函数简介 234
8.5.1 _setvieworg() 234
85.2 _setviewport() 235
8.5.3 窗口坐标 236
8.6 绘图和填充函数 237
8.6.1 绘制填充图形函数 240
8.6.2 绘图控制函数 242
8.6.3 _getcurrentposition() 242
8.6.4 _setlinestyle() 243
8.6.5 _setfillmask() 243
8.6.6 清除图形显示屏幕 246
8.6.7 图形屏幕的控制 246
8.7 在图形模式下使用文本 246
8.7.1 字模 246
8.7.2 图形模式文本函数 247
8.7.3 Microsoft Windows的字模 249
8 7.4 其它字模函数 250
8.8 练习 251
8.9 小结 251
第9章 CodeView和Profiler 253
9.1 创建调试 253
9.1.1 找毛病与调试 253
9.1.2 准备从PWB中运行Code view 255
9.2 Code view调试器 256
9.2.1 用code view运行程序 256
9.2.2 混合源和汇编语言 259
9.2.3 命令窗口 259
9.2.4 观察数据 260
9.3 设置断点 262
9.4.2 剖视过程 263
9.4 Microsoft Profiler 263
9.4.1 什么叫剖视 263
9.4.3 启动Microsoft Profiler 264
9.4.4 基本的剖视信息 265
9.4.5 改进ptestl 269
9.4.6 选择一个剖视模式 271
9.4.7 其它剖视性能的展望 272
9.5 练习 272
9.6 小结 273
第10章 Microsoft C/C++的高级功能 274
10.1 内联的汇编语言 274
10.1.1 内联的汇编环境 274
10.1.2 _ _asm关键字 275
10.2.1 80x86中断结构 278
10.2.2 Microsoft中断接口 278
10.2 中断功能 278
10.3 中断处理程序 282
10.3.1 声明中断处理程序的函数 282
10.3.2 完成计时器计时中断处理程序 283
10.4 程序优化性能 287
10.5 p-代码 289
10.6 练习 290
10.7 小结 290
第二部分 Microsoft C/C++面向对象特征 291
第11章 C++类的使用 291
11.1 C++的重要特点 291
11.2 如何利用C++的特征 292
11.3 C和C++的派生类型 292
11.3.1 在C++中重新定义“派生” 292
11.3.2 C++的封装 294
11.3.3 用struct声明类 295
11.4 声明C++类 298
11.4.1 类声明 301
11.4.1.1 类声明语法 301
11.4.1.2 声明类成员 303
11.4.1.3 建立一个后进先出(LIFO)栈类 304
11.4.1.4 this指针 310
11.4.2 public、private、protected关键字 315
11.5 为类写成员函数 316
11.5.1 成员函数与类的联系 316
11.5.1.1 单独编译成员函数 316
11.5.1.2 声明内联成员函数 317
11.5.1.3 为成员函数指定缺省参数 318
11.5.2 提供构造和析构函数 319
11.6.1 在类中包含友元函数 323
11.6 友元函数 323
11.6.2 何时使用友元函数 324
11.7 练习 324
11.8 小结 325
第12章 创建C++对象 328
12.1 定义C++对象 328
12.1.1 给类对象指定存储类 328
12.1.2 定义任意生存期的类对象 330
12.1.3 定义局部(auto)类对象 344
12.1.4 定义全局(static)类对象 352
12.2 初始化类对象 359
12.2.1 使用构造函数初始化类对象 360
12.2.2 使用初始程序表 362
12.3 练习 363
12.4 小结 363
13.1.1 作用域限定符的一般使用 364
13.1 作用域限定符 364
第13章 访问C++对象 364
13.1.2 利用作用域限定符进行语法控制 366
13.1.3 利用作用域限定符避免二义性 367
13.2 C++的作用域规则 371
13.2.1 C与C++作用域的区别 371
13.2.2 考察C++的作用域规则 373
13.3 与C++对象通讯 375
13.3.1 向对象发送消息 376
13.3.2 *this 397
13.4 引用运算符 397
13.4.1 从地址运算符演变到引用运算符 397
13.4.2 引用运算符 398
13.5 将对象用作函数参数 399
13.5.1 通过值和引用传递对象 399
13.5.2 在成员函数中访问其它对象 400
13.6.1 什么时候需要用指针 402
13.6 对象指针 402
13.6.2 声明对象指针和数组 403
13.7 练习 404
13.8 小结 405
第14章 C++的重载函数和运算符 406
14.1 重载成员函数 406
14.1.1 C++的重载 406
14.1.2 声明重载的成员函数 409
14.2 重载友元和非成员函数 410
14.2.1 重载类的友元 410
14.2.2 重载非成员函数 415
14.3 类型的安全连接 416
14.3.1 函数规整 416
14.3.2 带有标准C中lnclude文件时的连接控制 417
14.4.1 运算符的重载 420
14.4 重载C++的运算符 420
14.4.2 声明重载运算符函数 424
14.4.2.1 为运算符函数作准备 424
14.4.2.2 重载运算符函数的语法 424
14.4.2.3 说明重载运算符函数的参数 426
14.4.2.4 说明运算符函数的返回类型 427
14.4.2.5 用友元函数重载运算符 428
14.4.2.6 定义类型转换运算符函数 431
14.4.3 重载双目和单目运算符 432
14.5 重载下标和函数调用运算符 434
14.5.1 重载的下标运算符 434
14.5.2 重载函数调用运算符 438
14.6 练习 441
14.7 小结 442
15.1 C++构造函数和析构函数的调用 443
第15章 C++的构造函数和析构函数 443
15.1.1 声明构造函数和析构函数 444
15.1.1.1 声明构造函数 444
15.1.1.2 声明析构函数 448
15.1.2 构造函数初始化表 450
15.1.3 什么时候调用构造函数 453
15.1.4 什么时候调用析构函数 459
15.2 重载构造函数 462
15.3 编写缺省构造函数 462
15.3.1 编写其它构造函数 465
15.3.2 决定何时需要使用拷贝构造函数 467
15.4 运算符new()和 delete() 467
15.4.1 new和delete的一般使用 468
15.4.2 动态生成和删除类对象 470
15.5 重载运算符new()和delete() 471
15.5.1 重载全局运算符 472
15.5.2 为类重载运算符 478
15.6 练习 480
15.7 小结 480
第16章 C++流的使用 482
16.1 C++流的介绍 482
16.1.1 C++流和标准流的比较 483
16.1.2 使用C++流来操作标准I/O 485
16.2 处理C++流错误 494
16.2.1 C++流错误状态的检测 494
16.2.2 流状态成员函数 496
16.3 C++流控制数据格式 498
16.3.1 使用插入符和提取符来操作内部类型 498
16.3.2 重载〈〈和〉〉运算符 502
16.4.1 熟悉C++操作符 505
16.4 C++流操作符 505
16.4.2 使用流操作符改变状态和属性 506
16.5 C++文件I/O流 513
16.5.1 读和写fstream文件 517
16.5.2 用C++流进行文件定位 518
16.6 练习 520
16.7 小结 521
第17章 C++派生类 523
17.1 非继承的代码复用 523
17.1.1 代码可复用性 523
17.1.2 通过组合复用代码 523
17.2 单基类 527
17.2.1 对继承的理解 527
17.2.2 声明基类和派生类 527
17.3 虚拟函数 534
17.3.1 延迟约束和虚拟函数 534
17.3.2 使用作用域限定控制成员函数的存取 538
17.4.1 从重基类中派生 539
17.4 重基类 539
17.4.2 声明和使用虚拟基类 542
17.5 从抽象类派生类 543
17.5.1 纯虚拟函数 544
17.5.2 实现纯虚拟函数 544
17.6 通过继承使用构造函数和析构函数 545
17.6.1 初始化代码不能继承 545
17.6.2 通过继承调用构造函数和析构函数的次序 546
17.6.3 虚拟析构函数 546
17.7 练习 548
17.8 小结 549
18.1 用户定义的类型转换 550
18.1.1 用构造函数进行类型转换 550
第18章 关于对象控制与执行的讨论 550
18.1.2 重载型强制运算符 552
18.2 类属类 555
18.2.1 抽象类和类属类的设计 555
18.2.2 生成类属类 558
18.3 对象行为与执行的控制 565
18.3.1 用友元函数获得高效率 565
18.3.2 用静态存储类避免反复的具体说明 566
18.3.3 引用和指针 568
18.3.4 用内联函数消除函数调用 571
18.4 源代码浏览器 571
18.4.1 找到未引用的标识符 574
18.4.2 调用树 574
18.5 练习 577
18.6 小结 577
19.1 Windows编程环境 578
第19章 Microsoft C/C++的Windows编程介绍 578
第三部分 使用Windows的Microsoft C/C++ 578
19.1.1 QuickWin库 579
19.1.2 编译order.c程序 579
19.1.3 运行QuickWin应用程序 582
19.1.4 QuickWln的特殊功能 582
19.1.5 增加多窗口 583
19.2 创建子窗口的另一方法 585
19.2.1 从窗口中退出 586
19.2.2 About框 586
19.2.3 控制窗口的大小和位置 586
19.2.4 在子窗口上加上滚动条 586
19.2.5 菜单栏函数 587
19.3 在Windows应用编程接口中编程 588
19.4 Windows多任务环境 588
19.5 Windows是一个面向对象的环境 589
19.6 编译和连接Windows应用程序 596
19.6.1 使用PWB编译和连接Windows应用程序 597
19.6.2 cl命令行编译器 597
19.6.3 资源编译器 598
19.7 准备资源文件 598
19.7.1 创建资源 598
19.7.2 fcwin.c样本程序所需要的资源 599
19.7.3 创建和编辑菜单 600
19.7.4 创建和编缉对话框 601
19.7.5 创建和编辑图标 607
19.7.6 用资源编译器编译资源 607
19.8 练习 609
19.9 小结 609
20.1 设置Windows应用程序环境 610
20.1.1 WINSTUB.EXE程序 610
第20章 设计Windows应用程序 610
20.1.2 Windwos目录的使用 612
20.1.3 边做边学习:设计fcwin.c 613
20.2 生成Windows应用程序的源文件 639
20.2.1 Windows 3.1编程环境 639
20.2.2 创建模块定义文件 640
20.2.3 设计程序的头文件 641
20.2.4 创建FCWIN的工程文件 643
20.3 练习 644
20.4 小结 644
第21章 用Microsoft C/C++编写Windows应用程序 645
21.1 Windows接口设计 645
21.1.1 登记窗口类 645
21.1.2 建立主消息循环 648
21.1.3 编写Wndproc()函数 649
21.1.4 为对话框建立回调函数 650
21.1.4.1 创建对话函数 651
21.1.4.2 控制对话 652
21.1.5 使用MessagcBox()生成弹出式帮助信息和错误信息 653
21.1.6 将硬拷贝以假脱机方式送给Windows打印管理程序 654
21.2 动态连接库 661
21.2.1 动态连接库的概念 662
21.2.2 书写DLL应用程序 663
21.3 练习 666
21.4 小结 667
附录 669
附录A ASCII字符图表 669
附录B printf()和scanf()的使用细节 671
附录C _exec...()和_spawn()的使用细节 676
附录D quad类的程序清单 679
附录E 完整的FCWIN资源清单 691