第一部分 程序设计基础知识 3
第1章 C++语言提要 3
1.1概述 3
1.2类与对象 4
1.2.1类的构造函数 4
1.2.2拷贝构造函数被调用的场合 6
1.2.3带有指针变量的类 6
1.2.4关于类的继承问题 7
1.3变量与函数 9
1.3.1指针与引用 9
1.3.2静态变量 10
1.3.3函数参数 12
1.3.4 const的用法 13
1.4运算符重载 15
1.4.1将运算符理解为函数 15
1.4.2不同类之间的运算 18
1.4.3用友元定义的运算符 19
1.4.4其他运算符的定义 22
1.5多态性 25
1.5.1一个多态性的例子 25
1.5.2动态绑定原理 29
1.5.3关于虚函数的进一步探讨 30
1.6模板 31
1.6.1用模板定义的函数 31
1.6.2用模板定义的类 32
1.6.3非类型模板参数 34
思考题 36
习题 36
第2章 数据结构提要 38
2.1概述 38
2.2顺序存储方式:数组 39
2.2.1二维数组的物理结构 39
2.2.2关于数组的类 40
2.3链式存储方式:链表 42
2.3.1链表的物理结构 42
2.3.2尾部添加新结点 43
2.3.3删除结点 44
2.3.4插入新结点 46
2.4线性表特例:栈 48
2.4.1栈的基本概念 48
2.4.2用链表方式实现栈的操作 49
2.5线性表特例:循环队列 51
2.5.1队列的基本概念 51
2.5.2循环队列的实现 52
思考题 56
习题 56
第二部分 MFC编程技术 59
第3章 VC++简介 59
3.1概述 59
3.2 MFC基本知识 60
3.2.1 MFC的数据类型的表示 60
3.2.2匈牙利变量命名法 61
3.2.3几种常用的工具类 62
3.3 MFC应用程序框架 68
3.3.1与应用程序有关的层次结构 68
3.3.2层次结构中的主要类介绍 68
3.3.3简单应用程序举例 70
3.4程序调试的方法 72
3.4.1代码跟踪与断言 72
3.4.2 Assert Valid与Dump 74
思考题 76
习题 76
第4章 MFC程序的工作原理 77
4.1消息处理机制 77
4.1.1 MFC程序入口 77
4.1.2消息与消息循环 79
4.1.3消息的传递 81
4.1.4消息映射 83
4.2运行期识别 86
4.2.1运行期——RUNTIME_CLASS 86
4.2.2动态创建——DYNCREATE 89
4.2.3类型识别——IsKindOf 90
4.3串行化 91
4.3.1文件的数据读取方式 91
4.3.2 CArchive的数据读取与写入方式 92
4.3.3串行化函数 94
思考题 95
习题 96
第5章 MFC程序的开发技术 97
5.1动态链接库与工程管理 97
5.1.1动态链接库的基本概念 97
5.1.2一个简单的DLL 98
5.1.3 DLL的调用方式 99
5.1.4建立有动态库的工程 101
5.2消息发送与接收 102
5.2.1消息的发送与接收 102
5.2.2自定义消息块 104
5.2.3与其他应用程序通信 105
5.3串行化文件的保存与读取 107
5.3.1让类支持串行化 107
5.3.2 DOC中的串行化 108
5.3.3串行化到文件 109
5.4注册表 112
5.4.1注册表的基本操作 113
5.4.2设置文件关联 115
5.5异常处理 118
5.5.1异常处理 118
5.5.2自己设计的异常处理 122
思考题 126
习题 126
第三部分 软件开发实例 129
第6章 图像法绘图 129
6.1 CDC类与绘图 129
6.1.1绘图类 129
6.1.2绘图设备类 130
6.1.3用CDC绘制简单图形 131
6.2简单的图像法绘图 139
6.2.1加入一个绘图菜单 140
6.2.2简单的图像法绘图实现 142
6.2.3彩色绘图 143
6.3图形绘制的橡皮条算法 148
6.3.1“橡皮条”的基本原理 148
6.3.2如何在程序中实现橡皮条 148
6.4 OnDraw()与图像保持 149
6.4.1视图类的OnDraw函数 149
6.4.2图像保持 150
6.5图像法的撤销与重复(UNDO/REDO) 151
6.6类似MSPAINT的界面设计 152
6.6.1状态栏 152
6.6.2绘图工具栏 153
6.6.3颜色工具栏 158
思考题 160
习题 160
第7章 简单的矢量法绘图软件设计 161
7.1图形元素类 161
7.1.1图形元素基类 161
7.1.2直线类 162
7.1.3 矩形类 162
7.1.4椭圆类 163
7.2实现矢量绘图 163
7.2.1 LBUTTONDOWN的消息响应函数 164
7.2.2 MOUSEMOVE的消息响应函数 165
7.2.3 LBUTTONUP的消息响应函数 165
7.3矢量绘图系统的管理 166
7.3.1利用MFC链表管理图形元素对象 166
7.3.2系统的管理类 167
7.4矢量法的撤销与重复(UNDO/REDO) 168
7.4.1设计Redo链表 168
7.4.2菜单中响应撤销与重复的消息 169
7.5动态库与程序的模块化 169
7.5.1建立动态库工程ShapeDll 169
7.5.2在MyDraw中使用动态库 170
思考题 172
习题 172
第8章 较完善的矢量法绘图软件设计 173
8.1串行化与文件读写 173
8.1.1如何使类可串行化 173
8.1.2在DOC中实现串行化 175
8.2图元拾取技术 175
8.2.1选中图元 175
8.2.2移动图元 178
8.2.3修改界面程序,实现选中和移动效果 180
8.2.4拉伸图元 184
8.3图元编组技术 189
8.3.1子图类的组织 189
8.3.2图形元素管理类编组功能 190
8.3.3弹出式菜单 191
8.4操作链表 193
8.4.1操作基类的组织 193
8.4.2移动、拉伸等操作类的组织 194
8.4.3修改图元管理类的Undo/Redo 198
8.5总结 200
思考题 201
习题 201
第四部分 软件工程与软件设计 205
第9章 软件工程的基本知识 205
9.1概述 205
9.1.1软件工程的诞生 205
9.1.2软件的开发过程与建模 206
9.2可行性研究与需求分析 207
9.2.1可行性研究 207
9.2.2需求分析 208
9.3概要设计 214
9.3.1概要设计概述 214
9.3.2概要设计方法 214
9.3.3概要设计过程 215
9.4详细设计与编码 216
9.4.1详细设计 216
9.4.2编码实现 216
9.5软件测试 218
9.5.1软件测试原则 219
9.5.2软件测试的基本方法 220
9.5.3软件测试的复杂性与经济性 223
9.6模块的耦合与内聚 224
9.6.1耦合 224
9.6.2内聚 225
9.6.3划分模块的准则 225
9.7程序的正确性与健壮性 226
9.7.1软件的正确性 228
9.7.2软件的健壮性 228
思考题 229
习题 229
第10章 统一建模语言UML 231
10.1概述 231
10.1.1 UML的主要特点 231
10.1.2 UML在现代软件工程中的重要作用 232
10.2 UML的主要内容 233
10.2.1用例图 236
10.2.2类图 238
10.2.3对象图 240
10.2.4状态图 240
10.2.5顺序图 242
10.2.6协作图 243
10.2.7活动图 244
10.2.8构件图 246
10.2.9部署图 248
思考题 248
习题 248
第11章 画笔程序设计 250
11.1开发背景 250
11.2理解需求 250
11.2.1绘制功能 251
11.2.2图形编辑功能 251
11.2.3保存功能 252
11.3分析与设计 252
11.3.1用例分析 253
11.3.2领域分析 253
11.3.3业务过程分析(活动图) 254
11.3.4交互分析 254
11.3.5概要设计 254
11.3.6详细设计 257
11.3.7用户界面设计 259
11.4编码与实现 259
11.5测试与部署 260
11.6小结 260
参考文献 261