第1篇 玄奘取真经 必先收顽徒 2
第1章 明确学习目的是Visual C++入门的前提 2
1.1 明确学习目的和学习内容 2
1.1.1 收有用之徒:学好C++ 2
1.1.2 掌握MFC就等于驯服了一匹千里马 3
1.1.3 熟练掌握数据库理论、DLL和网络编程将会更进一步 3
1.2 Visual C+++6.0集成开发环境是必备工具 4
1.2.1 Visual C++6.0的安装 4
1.2.2 Visual C+++6.0操作界面 7
1.2.3 Visual C++6.0的主要菜单项功能 9
1.3 打印“Hello,Visual C++”迈出编程第一步 10
1.3.1 实例—编写第一个C++++程序:Hello,C++++! 11
1.3.2 分析第一个程序的源代码 12
1.3.3 分析第一个程序都包含哪些必要文件 13
1.3.4 实例—创建第一个MFC程序:Hello,MFC! 13
1.4 小结 16
本章习题 16
第2章 C++++语法之数据类型 17
2.1 C++++发展历史和相关背景 17
2.2 常量和变量 18
2.2.1 常量的意义和使用 18
2.2.2 变量的意义和使用 18
2.3 简单变量的定义和使用 19
2.3.1 整型的定义和字长 20
2.3.2 浮点型的定义和字长 21
2.3.3 布尔类型的定义和运算 21
2.4 算术运算符的基本操作 22
2.5 枚举、指针和数组 23
2.5.1 用枚举来设定变量的取值 23
2.5.2 用指针表示变量的住址 24
2.5.3 数组:多车厢的火车 25
2.6 string类和C风格字符串 26
2.6.1 不好好学C++只能选择:C风格字符串 26
2.6.2 string如何解放C程序员的繁重劳动 27
2.7 数据类型是应用软件的细胞 28
2.8 结构体类型 29
2.9 “类”类型 31
2.9.1 “类”类型定义的语法形式 31
2.9.2 “类”类型的函数实现 32
2.10 小结 34
本章习题 35
第3章 随我心意选择性—条件语句 36
3.1 逻辑运算的种类 36
3.1.1 否定和否定联结词的含义 36
3.1.2 合取和合取联结词的含义 37
3.1.3 析取和析取联结词的含义 37
3.2 使用if语句分支处理 38
3.2.1 基本if语句的结构 39
3.2.2 if语句嵌套的配套规则 39
3.3 多分支语句:switch语句 40
3.4 实例—开关语句的使用 42
3.5 小结 43
本章习题 43
第4章 发挥计算机优势—循环语句 45
4.1 小学奥数题目难倒三藏师徒 45
4.1.1 “++”和“--”运算符 45
4.1.2 小学奥数题目:累加和累乘运算 46
4.1.3 使用for语句为小学生减负 46
4.1.4 用for语句搞定非连续的累加算法 47
4.2 另一道小学奥数题目分析 48
4.2.1 另一道小学奥数题目:累加次数计算 48
4.2.2 使用while语句再次解决小学生的苦恼 48
4.3 while的兄弟.do...while语句 49
4.4 中断循环语句的两件法宝..、 50
4.4.1 彻底出逃循环用break 50
4.4.2 跳入下一圈循环用continue 51
4.5 小结 52
本章习题 52
第5章 软件项目的功能模块—函数 53
5.1 定义函数和函数原型 53
5.1.1 想将功能集成怎么办:定义函数 53
5.1.2 告诉朋友我长什么样:函数原型 55
5.2 函数通过指针来调用数组 58
5.3 指向函数的指针 58
5.3.1 函数指针的由来 59
5.3.2 函数指针在项目中的应用 59
5.4 具有引用参数的函数 60
5.4.1 变量的引用 60
5.4.2 最经典的变量引用案例—两个数交换 61
5.4.3 指针也是别名 62
5.5 函数重载的使用 63
5.6 函数模板的定义和使用 64
5.7 实例—定义和调用函数 65
5.8 小结 67
本章习题 67
第6章 给世界具体事物概括一个概念—类 69
6.1 自然界中的生物的概念概括:类 69
6.1.1 自然界中的生物的概念有生命吗?没有! 69
6.1.2 应用程序中的类有内存分配吗?没有! 70
6.2 概念中每个具体存在的对象:类的对象 72
6.2.1 自然界中的某个生物有生命吗?有! 72
6.2.2 应用程序中的类的对象有内存分配吗?有! 73
6.3 实例化类对象并使用 74
6.4 类的构造函数和析构函数 76
6.4.1 为什么需要构造函数? 76
6.4.2 类的私有成员的赋值方式 76
6.4.3 通过构造函数来初始化私有数据成员 77
6.4.4 类的析构函数 78
6.5 运算符重载与this指针的使用 79
6.5.1 为什么要定义重载的运算符 79
6.5.2 this指针在我肚子里指向我自己 79
6.6 友元函数和友元类 81
6.7 实例—定义类和使用类对象 82
6.8 小结 84
本章习题 84
第7章 代码重用的机制—类继承 86
7.1 自然界中的生物分类 86
7.2 多态公有继承 87
7.2.1 is.a关系:A是B的一种 88
7.2.2 不同类型的元素组成的数组 89
7.2.3 虚函数与动态联编 90
7.3 protected用在何处 91
7.4 抽象基类 92
7.4.1 纯虚函数的语法形式 92
7.4.2 抽象基类的派生类怎么改变抽象性质 93
7.5 私有继承和保护继承 95
7.6 多继承及其规则 96
7.7 类模板的定义和使用 97
7.8 小结 98
本章习题 98
第8章 标准模板库(STL) 99
8.1 vector模板类的定义和使用 99
8.1.1 vector模板类的定义和初始化 100
8.1.2 vector模板类常用的方法详解 101
8.1.3 迭代器的定义和使用 101
8.2 通用算法简介 103
8.2.1 序列的种类 103
8.2.2 拷贝函数的使用 104
8.2.3 排序函数的使用 105
8.3 auto_ptr类的使用 106
8.4 小结 107
本章习题 107
第9章 进出之道I/O流和文件 108
9.1 C++++的输入和输出 108
9.1.1 输出流对象cout 108
9.1.2 使用输出流对象的格式化功能 110
9.1.3 使用cin进行输入 111
9.2 文件输入和输出 112
9.3 小结 113
本章习题 113
第2篇 快马加鞭的良驹MFC 116
第10章 Windows应用程序介绍 116
10.1 Windows应用程序和MS.DOS风格应用程序 116
10.2 应用程序的类型 117
10.2.1 应用程序的类型简介 118
10.2.2 什么样的程序Win32应用程序 118
10.3 认识打印“Hello,World!”字符串的Win32应用程序 119
10.3.1 创建打印“Hello,World!.字符串的程序 119
10.3.2 分析Win32应用程序的必要结构 120
10.3.3 分析Win32应用程序中函数的关系和互动 120
10.3.4 更改Win32程序的默认代码实现自己的功能 121
10.3.5 创建空项目和简单的Win32应用程序 123
10.4 创建Win32Console应用程序 124
10.4.1 创建Win32控制台应用程序 124
10.4.2 分析Win32控制台应用程序的代码和必要组成 126
10.5 对话框应用程序 127
10.5.1 创建对话框MFC应用程序 127
10.5.2 分析对话框MFC应用程序的代码 128
10.6 动态链接库 129
10.6.1 动态链接库的优点和缺点 129
10.6.2 创建具有两个数相乘的函数动态链接库 129
10.7 单文档应用程序(SDI) 132
10.8 多文档应用程序(MDI) 133
10.9 MFC应用程序向导的功能 134
10.10 小结 137
本章习题 137
第11章 MFC对话框 138
11.1 两种不同类型的对话框 138
11.2 实例—计算器软件的开发 138
11.2.1 计算器界面设计 139
11.2.2 编辑控件和变量绑定 141
11.2.3 按钮控件与消息处理函数绑定 143
11.2.4 测试计算器程序 145
11.3 实例—模式对话框的创建和使用 146
11.3.1 创建单文档应用程序 146
11.3.2 创建对话框并在单文档应用程序中调用 147
11.3.3 将对话框中的数据传入单文档应用程序 150
11.4 Windows通用对话框 151
11.4.1 CFileDialog类—文件打开对话框的使用 152
11.4.2 CColorDialog类—调色板对话框的使用 153
11.4.3 CFindReplaceDialog类—字词查找和替换对话框的使用 154
11.4.4 CPageSetupDialog类—页面设置对话框的使用 154
11.4.5 CFontDialog类—字体设置对话框的使用 155
11.5 无模式对话框 156
11.6 小结 157
本章习题 157
第12章 Visual C++6.0控件是软件界面的积木 158
12.1 Visual C++6.0资源和通用控件 158
12.2 Visual C++6.0的控件工具箱详解 158
12.3 实例—简单控件的使用 160
12.4 标准通用控件的使用 163
12.4.1 进度指示器控件的使用 163
12.4.2 滑块控件的使用 165
12.4.3 列表控件的使用 166
12.4.4 树状控件 167
12.5 小结 168
本章习题 168
第13章 Windows的基本输入 169
13.1 键盘消息及其处理 169
13.1.1 巧妇难为无米之炊:没有键盘怎么行? 169
13.1.2 键盘消息处理函数 170
13.1.3 实例—键盘消息处理 171
13.2 鼠标消息及其处理 173
13.2.1 没有鼠标将永远DOS 173
13.2.2 鼠标消息处理函数的种类 174
13.2.3 实例—鼠标消息处理 174
13.3 小结 176
本章习题 176
第14章 工具栏和状态栏是直观的操作面板 178
14.1 Windows应用程序的工具栏和状态栏 178
14.2 工具栏按钮及其处理函数 179
14.2.1 工具栏位图和按钮的状态 179
14.2.2 工具栏的命令消息和更新命令消息 179
14.3 工具栏按钮中的提示信息 180
14.4 实例—使用工具栏的应用程序 180
14.5 状态栏的使用 183
14.5.1 状态栏的定义 183
14.5.2 信息行的显示 184
14.5.3 状态指示器的使用 184
14.6 实例—使用状态栏的程序设计 185
14.7 小结 187
本章习题 187
第15章 真正的Window一切分窗口和多视图 189
15.1 动态切分窗口和静态切分窗口 189
15.2 基于视图的应用程序分类 189
15.3 实例—简单动态切分窗口应用程序 190
15.4 实例—多视图静态切分窗口的开发 192
15.5 实例—多视图切换的开发 194
15.6 小结 197
本章习题 197
第16章 文档和视图的分离 198
16.1 什么是文档和视图 198
16.2 文档和视图的相互作用 199
16.2.1 获取当前文档:CView::GetDocument()函数 199
16.2.2 更新所有视图:CDocument::UpdateAliViews()函数 200
16.2.3 视图自我更新:CViews::OnUpdate()函数 200
16.2.4 初始化更新界面:CView::OnlnitialUpdate()函数 200
16.2.5 创建新文档:CDocument::OnNewDocument()函数 201
16.3 CView类常用的派生类 201
16.4 实例—一个多视图的SDI应用程序 202
16.4.1 项目创建和界面设计 202
16.4.2 编写学生信息源代码 202
16.4.3 编写文档源代码 204
16.4.4 编写视图源代码 204
16.5 小结 206
本章习题 207
第17章 文档的读和写 208
17.1 序列化理论 208
17.1.1 外存文件和内存文件 208
17.1.2 编写Serialize()函数 209
17.2 实例—支持序列化的应用程序 210
17.2.1 使用应用程序向导创建支持序列化的程序 210
17.2.2 重写CObject基类的序列化函数 211
17.2.3 界面设计 211
17.2.4 开发序列化功能 212
17.2.5 开发反序列化功能 214
17.3 小结 214
本章习题 214
第18章 二进制码功能模块一一动态链接库(DLL) 215
18.1 DLL理论基础 215
18.1.1 DLL导入和导出的原理 216
18.1.2 隐式和显式连接 216
18.1.3 符号和序号连接 217
18.1.4 DIIMain()函数 217
18.2 DLL使用实例—定义DLL函数并使用 217
18.2.1 创建MFCDLL自动化项目 218
18.2.2 添加自动化类和成员函数 218
18.2.3 在Windows中注册自定义的DLL动态链接库 220
18.2.4 使用非Visual C++应用程序调用自定义DLL 221
18.2.5 开发小结 222
18.3 小结 222
本章习题 223
第3篇 数据库和网络编程 226
第19章 通向数据库的桥梁—ODBC、ADO和OLEDB 226
19.1 数据库开发技术简介 226
19.1.1 当今常用的几种数据库管理系统DBMS 226
19.1.2 关系代数与数据库SQL语言简介 227
19.1.3 数据库SQL语言分类 227
19.1.4 使用SQL查询语言运行器 228
19.1.5 使用SQL查询技巧:投影和选择 230
19.2 在Visual C++6.0中使用ODBC进行数据库链接 231
19.2.1 ODBC概述 231
19.2.2 实现ODBC数据库操作的案例 231
19.3 在Visual C++6.0中使用ADO进行数据库链接 234
19.3.1 ADO的优越性 234
19.3.2 ADO对象模型 235
19.4 ADO数据库操作 235
19.4.1 利用Connection对象的Execute()方法执行SQL命令 236
19.4.2 利用Command对象来执行SQL命令 236
19.4.3 直接用Recordset对象进行查询取得记录集 236
19.4.4 使用ADO进行数据库连接的案例 237
19.5 OLEDB数据库操作模型 239
19.5.1 什么是OLEDB 239
19.5.2 OLEDB的组件构成 239
19.5.3 OLEDB在Visual C++中的使用案例 239
19.6 小结 241
本章习题 242
第20章 通向世界的桥梁—网络编程 243
20.1 网络模型和通信简介 243
20.1.1 TCP/IP模型和OSI七层参考模型 243
20.1.2 网络数据的传输和封装过程 244
20.2 WindowsSockets基础 245
20.2.1 套接字概述 246
20.2.2 WinSockAPI常用函数详解 246
20.2.3 MFC对WinSockAPI的封装 247
20.3 B/S模式和C/S模式 247
20.3.1 B/S与C/S模式详解 248
20.3.2 C/S与B/S的区别 248
20.4 局域网编程技术 249
20.4.1 网卡地址 249
20.4.2 获取计算机名称和IP 250
20.5 实例—开发简单的文本通信系统 250
20.5.1 服务器程序的开发 251
20.5.2 客户端程序开发 254
20.5.3 测试文本信息通信系统 257
20.6 小结 258
本章习题 259
第4篇 体验修炼成果 262
第21章 五子棋游戏 262
21.1 棋牌游戏种类及简介 262
21.2 五子棋游戏开发的基础和概要设计 263
21.2.1 游戏规则和效果 263
21.2.2 技术难点的解决方案 264
21.3 游戏项目的开发过程 264
21.3.1 创建程序和棋盘设计 265
21.3.2 放置棋子的功能开发 266
21.3.3 下棋约束功能 268
21.3.4 游戏获胜决断的开发 271
21.4 小结 274
第22章 工作备忘录管理系统 275
22.1 提出问题:设计一个备忘录 275
22.1.1 实例—尝试连接一个数据库 275
22.1.2 概要功能简介 279
22.1.3 界面需求 279
22.2 数据库设计 280
22.3 信息系统开发前的知识准备 281
22.4 软件项目开发过程 282
22.4.1 备忘录管理系统项目的流程 282
22.4.2 根据E.R图创建数据库表 283
22.4.3 插入备忘事项 284
22.4.4 备忘数据的显示 285
22.4.5 备忘数据的删除 288
22.4.6 备忘数据的修改 290
22.5 小结 293
附录 295