第1章 面向对象程序设计 1
第一部分 深入理解 C++ 1
1.1 结构化程序设计 2
1.2 面向对象程序设计 3
1.3 C++版本 9
1.4 关于开发示例的平台 11
1.5 控制台程序(Console Application)与 DOS 程序的区别 12
1.6 控制台程序的生成 13
1.7.1 概述 19
1.7 汇编语言基础 19
1.7.2 例子 25
第2章 类与对象 32
2.1 类的定义 32
2.2 对象声明与使用 34
2.3 this 指针 35
2.4 汇编代码 37
2.5 对象初始化与清除 50
2.6 类型转换与拷贝构造函数 53
2.7 对象赋值 56
2.8 对象成员 58
2.9 汇编代码 62
2.10 静态成员 67
2.11 常量成员 68
2.12 汇编代码 68
2.13 指向类成员的指针 72
3.1 继承 75
第3章 类的继承和派生 75
3.2 派生类的初始化与清除 77
3.3 汇编代码 80
3.4 派生类的赋值和拷贝初始化构造函数 87
3.5 二义性和支配规则 90
3.6 赋值兼容性规则 92
3.7 虚基类 94
3.8 汇编代码 101
3.9 保护的构造函数 113
3.10 友员 114
4.1 C++多态性特征 117
第4章 虚函数与多态性 117
4.2 采用指针或引用来调用虚函数 122
4.3 汇编代码 124
4.4 虚函数的访问权限 132
4.5 在成员函数中调用虚函数 133
4.6 在构造函数中调用虚函数 136
4.7 在析构函数中调用虚函数 137
4.8 虚析构函数 138
4.9 包含虚函数的虚基类 140
4.10 汇编代码 142
4.11 抽象基类和纯虚函数 152
4.12 虚函数(Virtual)、重载(Overloading)与覆盖(Overriding) 155
第5章 运算符重载 158
5.1 一般概念 158
5.2 类运算符和友员运算符 160
5.3 注意的问题 163
5.4 详细讨论 164
5.4.1 转换构造函数 164
5.4.2 转换运算符 165
5.4.4 赋值运算符重载 166
5.4.3 算术运算符重载 166
5.4.5 逻辑运算符重载 168
5.4.6 下标运算符重载 169
5.4.7 函数调用运算符重载 172
5.4.8 成员选择运算符(->)、递引用运算符(*)和取地址运算符( )重载 173
5.4.9 递增和递减运算符重载 175
5.4.10 new 和 delete 重载 177
5.5 运算符重载于派生类 180
6.1 产生一个名字空间 181
第6章 名字空间 181
6.2 名字空间的使用 183
6.2.1 作用域限定 183
6.2.2 using 指令 184
6.2.3 using 声明 187
第7章 模板 190
7.1 类模板 190
7.2 函数模板 196
7.3 模板参数 199
7.4 特殊版本的模板 201
7.5 模板友员 203
7.6 模板静态成员 205
第8章 异常处理 208
8.1 C++的异常处理 208
8.2 多个异常的组织 217
8.2.1 多个异常 217
8.2.2 用枚举组织异常 220
8.2.3 用派生类组织异常 222
8.2.4 利用虚函数组织异常 225
8.2.5 用模板组织异常 227
8.3 异常接口说明 229
8.4 汇编代码 232
第9章 运行时类型信息(RTTI) 247
9.1 C++中的 RTTI 247
9.1.1 typeid 247
9.1.2 dynamic_cast 251
9.2 与 RTTI 相关的异常 256
9.3 新的类型映射语法 257
9.3.1 static_cast 258
9.3.2 const_cast 260
9.3.3 reinterpret_cast 261
9.4 汇编代码 262
第二部分 深入理解 Windows 操作系统 282
第10章 Windows 95体系结构 282
10.1 Windows 95体系结构组件 282
10.2 注册表 283
10.3 设备驱动程序 284
10.4 配置管理器(Configuration Manager) 285
10.5 虚拟机管理器(Virtual Machine Manager) 287
10.5.1 进程调度与多任务(Process Scheduling and Multitasking) 287
10.5.2 内存分页(Memory Paging) 288
10.5.3 支持 MS-DOS 方式 289
10.6 可安装的文件系统(Installable File Systems) 290
10.6.1 可安装文件系统管理器(Installable File System Manager) 291
10.6.2 文件系统驱动程序(File System Drivers) 291
10.6.3 块 I/O 子系统(Block I/O Subsystem) 292
10.7 核心系统组件(Core System Components) 294
10.7.2 Kernel 组件 296
10.7.1 User 组件 296
10.7.3 图形设备接口(Graphical Device Interface) 297
10.8 用户接口 299
10.9 应用程序支持 299
第11章 Windows 2000体系结构 301
11.1 Windows 2000产品包 301
11.2 Windows 2000与 Windows 95/98/Me 的对比 303
11.3 体系结构概览 304
11.4.1 环境子系统和子系统动态连接库 306
11.4 主要系统组件 306
11.4.2 NTDLL.DLL 313
11.4.3 执行体(Executive) 314
11.4.4 内核(Kernel) 315
11.4.5 硬件抽象层(Hardware Abstraction Layer(HAL)) 318
11.4.6 设备驱动程序 318
11.4.7 Windows 2000设备驱动程序增强 319
11.4.8 了解非文档化接口 320
11.4.9 系统启动的进程(System.Start-up Processes) 321
11.5 系统服务调度 325
11.6 Windows 2000对象管理器 327
11.6.1 执行体对象 328
11.6.2 对象结构 328
第12章 内存结构与管理 334
12.1 Win32平台寻址机制 334
12.2 进程地址空间划分 339
12.2.1 Windows 95进程地址空间划分 339
12.2.2 Windows 2000进程地址空间划分 341
12.3 Win32内存管理 343
12.4 Win32中的虚拟内存 345
12.4.1 保留、提交、释放虚拟内存 347
12.4.2 修改虚拟内存页的保护属性 353
12.4.3 查询进程的虚拟内存状态 354
12.4.4 查询进程的虚拟内存中确定地址空间的状态 355
12.4.5 重设物理存储的内容 356
12.5 Win32中内存映射文件(Memory-Mapped Files) 357
12.5.1 内存映射 EXE 和 DLL 358
12.5.2 内存映射数据文件 361
12.5.3 使用内存映射文件在进程间共享数据 366
12.6 Win32中的堆内存 369
12.6.2 创建和使用自己的堆 370
12.6.1 进程的缺省堆 370
12.6.3 其他堆函数 373
第13章 进程与线程 374
13.1 进程与线程的基本概念 374
13.2 进程内幕 375
13.3 进程的创建和终止 379
13.3.1 系统创建进程的过程 379
13.3.2 CreateProcess 函数详解 381
13.3.3 进程的终止 393
13.4 线程内幕 395
13.5 创建线程和终止 397
13.5.1 系统创建线程的过程 397
13.5.2 CreateThred 函数详解 398
13.5.3 线程的终止 400
13.6 线程同步 402
13.6.1 临界区 405
13.6.2 内核对象 409
14.1 Win32消息队列 417
第14章 消息循环 417
14.2 投递(PostMessage)消息 419
14.3 发送(SendMessage)消息 420
14.4 获得消息 425
14.5 虚拟输入队列与局部输入状态 428
14.5.1 键盘输入 430
14.5.2 鼠标输入 431
第15章 Unicode 433
15.1 简介 433
15.3 C 运行时库对 Unicode 的支持 435
15.2 操作系统对 Unicode 的支持 435
15.4 Win32API 对 Unicode 的支持 438
第16章 PE(Portable Executable)文件格式 440
16.1 PE 格式简介 440
16.2 PE 格式基本概念 441
16.3 PE 首部(PE Header) 442
16.3.1 MS-DOS Stub 442
16.3.2 IMAGE_NT_HEADERS 443
16.3.3 IMAGE_FILE_HEADER 444
16.3.4 IMAGE_OPTIONAL_HEADER 446
16.4 PE 节表(Section Table) 451
16.5 PE 常见节 456
16.6 PE 输入表(Import Table) 460
16.7 PE 输出表(Export Table) 464
16.8 PE 文件中的基地址重定位 468
16.9 PE 文件中的资源 470
第三部分 深入理解 SDK 程序设计 476
第17章 创建 MyApp 476
17.1 用 SDK 开发 Win32程序开发流程 476
17.2 生成一个简单的基于 SDK 的应用程序 477
18.1.1 MyApp.dsw 480
第18章 MyApp 相关文件 480
18.1 ..\MyApp 目录下的文件 480
18.1.2 MyApp.dsp 481
18.1.3 MyApp.cpp 485
18.1.4 MyApp.h 489
18.1.5 StdAfx.h 490
18.1.6 StdAfx.cpp 493
18.1.7 MyApp.rc 494
18.1.8 resource.h 511
18.1.11 ReadMe.txt 514
18.1.9 MyApp.ico 514
18.1.10 small.ico 514
18.1.12 MyApp.ncb 516
18.1.13 MyApp.plg 516
18.1.14 MyApp.opt 516
18.2 ..\MyApp\Debug 目录下的文件 516
18.2.1 MyApp.res 516
18.2.2 vc60.idb 516
18.2.4 MyApp.pch 517
18.2.3 vc60.pdb 517
18.2.5 StdAfx.obj 518
18.2.6 MyApp.obj 518
18.2.7 MyApp.ilk 518
18.2.8 MyApp.exe 518
18.3 ..\MyApp\目录下的文件 518
第19章 基本的 Win32程序剖析 520
19.1 应用程序加载与启动 520
19.2 注册窗口类 525
19.2.2 wcex.style 527
19.2.1 wcex.cbSize 527
19.2.3 wcex.lpfnWndProc 529
19.2.4 wcex.hIcon 529
19.2.5 wcex.hCursor 531
19.2.6 wcex.hbrBackground 531
19.2.7 wcex.lpszMenuName 532
19.2.8 wcex.lpszClassName 532
19.2.12 注册窗口类 534
19.2.11 wcex.cbWndExtra 534
19.2.10 wcex.cbClsExtra 534
19.2.9 wcex.hIconSm 534
19.2.13 窗口类的属性 536
19.2.14 窗口类的作用域 538
19.2.15 注销窗口类 540
19.3 创建应用程序窗口 541
19.3.1 窗口概述 541
19.3.2 Windows 窗口管理器 543
19.3.3 产生窗口 549
19.3.4 窗口的样式 554
19.3.5 扩展窗口样式 559
19.3.6 获取和设置窗口属性 561
19.3.7 窗口特性(Window Property) 564
19.4 主消息循环 565
19.4.1 消息循环 565
19.4.2 消息类型 571
19.5 应用程序窗口过程 573
19.5.1 WM_COMMAND 574
19.5.2 WM_PAINT 575
19.5.3 WM_DESTROY 575
19.6.1 对话框模板 577
19.6 对话框 577
19.6.2 产生父窗口和子窗口 582
19.6.3 对话框窗口过程 584
19.6.4 无模式(Modeless)对话框与模式(Model)对话框 585
19.6.5 对话框中 Tab 键与光标键的工作机制 588
19.6.6 MyApp 程序中的对话框窗口过程 592
第四部分 深入理解 MFC 594
第20章 Windows 应用程序框架与 MFC 594
20.1 应用程序框架 594
20.2 微软基本类 MFC 595
20.3 MFC 纵览 597
20.3.1 MFC 类体系 597
20.3.2 MFC 中的宏 598
20.3.3 MFC 中的注释 599
20.3.4 MFC 中的命名规则 600
第21章 用 MFC 开发 Windows 应用程序 602
21.1 MFC 支持文件 602
21.2 生成 MyApp 应用程序 604
21.3 MyApp 应用程序的组成 605
21.4 MFC 应用程序框架 638
21.4.1 MDI 应用程序框架外观 638
21.4.2 MDI 应用程序框架对象关系 640
21.4.3 SDI 应用程序框架 643
第22章 MFC 应用程序分析 648
22.1 WinMain() 648
22.1.1 Afx 内部初始化 653
22.1.2 应用程序初始化 655
22.1.3 实例初始化 655
22.1.4 创建应用程序主框架窗口 656
22.1.5 消息循环 658
22.2 WndProc() 659
第23章 MFC 关键技术 663
23.1 概述 663
23.1.1 CRuntimeClass 663
23.1.2 CObject 665
23.2 RTTI(运行时期类型识别) 668
23.3 Dynamic Creation(动态生成) 676
23.4 Serialization(序列化) 678
23.4.1 CArchive 类 679
23.4.2 DECLARE_SERIAL/IMPLEMENT_SERIAL 宏 682
23.4.3 序列化对象小结 691
23.4.4 RTTI、动态创建和序列化的关系 693
23.5 消息映射机制 694
23.5.1 概述 694
23.5.2 三种类型的消息 695
23.5.3 支持消息映射的宏 696
23.5.4 消息路由 701
参考文献 720