《C/C++/C#程序员实用大全 C/C++/C#最佳编程指南 精华版》PDF下载

  • 购买积分:22 如何计算积分?
  • 作  者:(美)Kris Jamsa著;张春晖,刘大庆,李越等译
  • 出 版 社:北京:中国水利水电出版社
  • 出版年份:2005
  • ISBN:7508428927
  • 页数:846 页
图书介绍:本书通过对大量程序实例的分析,深入浅出地讲解了C/C++/C#语言基本知识、编译方法和程序设计技术,并给出了众多的编程技巧与应用。全书首先介绍了C语言的基本知识,对C语言编程的实际方法、技巧,以及常见的问题和难点进行了详细阐述和解答;然后逐步过渡到C++编程与Windows编程,用较大的篇幅对它们进行了深入地剖析;最后介绍了基于.NET环境的C#编程。无论是C/C++/C#的初学者还是资深程序员都能从中受益匪浅。本书适合广大程序员和编程自学者学习和掌握C/C++/ C#编程。

3 帮助编译器查找头文件 1

933 重温消息 55 1

目录 1

精华版序 1

译者序 1

第一章 C语言入门 1

1 典型的C程序结构 1

2 C语言区分大小写字母 1

4 注释程序 2

6 给变量赋值 3

5 变量 3

10 C关键字 4

7 变量类型 4

8 定义同一类型的多个变量 4

9 给变量赋初值 4

12 字符型变量 5

11 整型变量 5

15 给浮点型变量赋值 6

13 浮点型变量 6

14 双精度型变量 6

40 使用ANSI设备驱动器 1 7

16 类型标识符 7

17 联合使用无符号和长类型标识符 7

18 寄存器类型标识符 7

19 有符号类型标识符 8

20 创建用户自己的类型 8

42 用ANSI驱动器定位光标 1 8

21 赋给十六进制或八进制值 9

23 赋值为引号或其他字符 9

22 溢出 9

24 PRINTF入门 10

25 打印八进制或十六进制整数 10

26 用PRINTF显示无符号整型数值 11

27 用PRINTF显示长整型数值 11

28 用指数格式显示浮点数 12

30 在数值前添加正号和负号 12

29 显示浮点数 12

31 用PRINTF格式化整数值 13

32 0填充整数输出 13

33 在八进制和十六进制数前显示前缀 14

35 格式化指数输出 14

34 用PRINTF格式化浮点数 14

36 左对齐PRINTF的输出 15

37 显示NEAR和FAR字符 15

38 使用PRINTF的转义字符 16

39 使用PRINTF的返回值 16

41 用ANSI驱动器显示屏幕颜色 17

43 在C中作基本的数学运算 18

45 运算符的优先级和结合性 19

44 模运算(取余运算) 19

46 C的自增运算符 20

48 按位与运算 21

47 按位或运算 21

49 按位异或运算 22

51 C的条件运算符 23

50 “取反”运算 23

53 移位运算 24

52 C的长度(SIZEOF)运算符 24

54 位循环运算 25

57 判断是否相等 26

55 C如何表示真(TRUE)和假(FALSE) 26

56 用if判断条件 26

59 用逻辑与判断两个条件 27

58 关系判断 27

62 将条件结果赋值给变量 28

60 用逻辑或来判断两个条件 28

61 逻辑非运算 28

64 按规定次数执行语句 29

63 判断浮点数 29

66 在FOR循环中使用逗号运算符 30

65 无穷循环 30

67 用WHILE循环重复执行一条或多条语句 31

68 使用DO重复执行一条或多条语句 32

69 C的CONTINUE语句 33

71 GOTO语句分支 34

70 使用C的BREAK语句来结束循环 34

72 判断多个条件 35

73 在SWITCH中使用BREAK 36

74 使用SWITCH语句的DEFAULTCASE 37

76 使用_FILE_预处理器常量 39

第二章 宏与常量 39

75 在程序中定义常量 39

78 改变预处理器的行计数 40

77 使用_LINE_预处理器常量 40

81 判断是C++还是C 41

79 记录预处理器的日期和时间 41

80 判断是否进行ANSI C编译 41

85 使用#INCLUDE<FILENAME.H>与#INCLUDE“FILENAME.H” 42

82 取消宏或常量 42

83 比较宏与函数 42

84 编译器PRAGMAS 42

87 进行IF-ELSE预处理 43

86 判断符号是否被定义 43

89 实现IF-ELSE和ELSE-IF预处理 44

88 更强大的预处理器条件判断 44

91 创建自定义宏 45

90 定义需要多行的宏和常量 45

94 注意宏定义中的空格 46

92 创建MIN和MAX宏 46

93 创建SQUARE和CUBE宏 46

96 宏是没有类型的 47

95 如何使用括号 47

98 C是如何存储字符串的 49

第三章 字符串 49

97 C字符串的形象化 49

101 字符串的复制 50

99 在字符串常量内表示引号 50

100 使用STRLEN函数 50

104 判断两个字符串是否相同 51

102 字符串的连接 51

103 给字符串追加N个字符 51

105 比较字符串时忽略大小写 52

107 获取字符串中第一次出现的某个字符 53

106 将字符串转换成大写或小写 53

110 比较两个字符串 54

108 搜索字符在字符串中的末次出现 54

109 计算字符串中某个字符出现的次数 54

112 不考虑大小写比较字符串 55

111 比较两个字符串的前N个字符 55

114 复制字符串的内容 56

113 将字符串转换成数字 56

116 计算子字符串出现的次数 57

115 在字符串中查找子字符串 57

119 用另一个子字符串代替子字符串 58

117 获取子字符串的最右端出现 58

118 从字符串中删除子字符串 58

120 转换数值的ASCII码形式 59

124 判断字符是否为控制符 60

121 判断字符是否为字母或数字 60

122 判断字符是否为字母 60

123 判断字符是否包含ASCII值 60

128 判断字符是否可打印 61

125 判断字符是否为数字 61

126 判断字符是否为图形字符 61

127 判断字符是大写还是小写 61

132 将字符转换成大写形式 62

129 判断字符是否为标点符号 62

130 判断字符是否包含空白符(whitespace) 62

131 判断字符是否为十六进制值 62

134 将输出格式写进字符串变量 63

133 使用ASCII字符 63

137 初始化字符串 64

135 从字符串中读输入 64

136 标志字符串以节省空间 64

139 把MAIN当作函数 66

第四章 函数 66

138 函数 66

140 函数返回值 67

143 局部变量 68

141 形参和实参 68

142 解决名称冲突 68

146 声明全局变量 69

144 函数如何使用堆栈 69

145 C如何存储局部变量 69

147 传值调用 70

149 传址调用 71

148 使用传值调用防止参数值变化 71

151 使用变量的地址 72

150 获取地址 72

152 改变参数的值 73

154 使用堆栈进行传址调用 74

153 只改变指定参数 74

155 记住函数变量的值 75

158 PASCAL关键字的影响 76

156 C是如何初始化静态变量的 76

157 使用PASCAL调用顺序 76

160 CDECL关键字 77

159 混合编程示例 77

161 判断是否要使用递归 78

163 形式参数中的CONST 79

162 如何消除递归 79

165 无界字符串的声明 80

164 使用CONST不会阻止参数值的修改 80

167 外部变量 81

166 C是如何使用堆栈处理字符串参数的 81

168 外部静态变量 82

171 调用汇编语言函数 83

169 VOLATILE关键字 83

170 调用结构和基指针 83

172 从汇编语言函数中返回值 84

174 支持参数个数可变的函数 85

173 AUTO关键字 85

175 VA START、VA ARG和VA END是如何工作的 86

176 创建支持多参数多类型的函数 87

179 将键盘输入赋给字符串 89

第五章 键盘操作 89

177 从键盘读入字符 89

178 显示字符输出 89

181 不显示字符的直接键盘输入 90

180 使用直接I/O读入字符 90

182 直接输出 91

184 使用CPRINTF快速格式化输出 92

183 将按键放回键盘缓存 92

186 写字符串 93

185 快速格式化键盘输入 93

187 使用直接I/O实现更快的字符串输出 94

190 清除屏幕显示 95

188 从键盘读入字符串 95

189 以更快的速度从键盘输入字符串 95

193 定位光标进行屏幕输出 96

191 删除当前行到行尾的内容 96

192 删除屏幕上的当前行 96

196 将屏幕上的文本拷贝到缓冲区 97

194 判断行与列的位置 97

195 在屏幕上插入空行 97

197 将缓冲区中的文本拷贝到屏幕的指定位置 98

199 控制屏幕颜色 99

198 判断文本模式设置 99

200 指定背景色 100

201 使用TEXTCOLOR设置前景色 101

203 控制文本的明暗度 102

202 使用TEXTBACKGROUND设置背景色 102

205 在屏幕上移动文本 103

204 决定当前文本模式 103

206 定义文本窗口 104

209 使用ARCSINE(反正弦) 105

第六章 数学 105

207 使用整型表达式的绝对值 105

208 使用ARCCOSINE(反余弦) 105

211 求复数的绝对值 106

210 使用ARCTANGENT(反正切) 106

214 使用角的正弦 107

212 对浮点值进位舍入 107

213 使用角的余弦 107

216 使用角的正切 108

215 使用角的双曲正弦 108

219 使用指数 109

217 使用角的双曲正切 109

218 整数相除 109

222 使用浮点值的尾数和指数 110

220 使用浮点型表达式的绝对值 110

221 使用浮点余数 110

224 判断最大值与最小值 111

223 计算自然对数 111

226 计算xn的结果 112

225 把浮点值分解成整数和小数部分 112

228 将随机值映射到指定范围 113

227 生成随机数 113

230 计算数值的平方根 114

229 给随机数生成器赋初值 114

231 创建定制的数学错误处理程序 115

234 判断可用的盘空间 117

第七章 文件、目录和磁盘 117

232 判断当前盘驱动器 117

233 选择当前驱动器 117

235 读入文件分配表(FAT)信息 118

237 进行BIOS磁盘I/O 119

236 绝对扇区读写操作 119

239 应用FOPEN打开文件 121

238 测试软驱是否准备好 121

241 关闭一个打开的文件 122

240 FILE结构 122

243 文件指针的位置指针 123

242 每次读/写文件信息的一个字符 123

246 文件句柄(FILE HANDLES) 124

244 判断当前文件位置 124

245 文件翻译 124

248 重命名文件 125

247 从流指针中导出文件句柄 125

250 判断程序如何访问文件 126

249 删除文件 126

251 设置文件的访问模式 127

252 检测文件流错误 128

254 刷新I/O流 129

253 判断文件的长度 129

257 使用TMP或TEMP创建临时文件名 130

255 一次关闭所有被打开的文件 130

256 使用P TMPDIR创建临时文件名 130

260 为文件搜索命令路径 131

258 创建真正的临时文件 131

259 删除临时文件 131

262 打开TEMP目录中的文件 132

261 为文件搜索环境入口的子目录 132

263 最小化文件I/O操作 133

266 删除目录 134

264 改变当前目录 134

265 创建目录 134

269 分解目录路径 135

267 删除目录树 135

268 建立完全路径名 135

270 建立路径名 136

271 使用低级函数打开和关闭文件 137

272 创建文件 138

275 利用LSEEK定位文件指针 139

273 进行低级读写操作 139

274 为文件句柄翻译指定模式 139

276 使用DOS文件服务 140

277 获取文件的日期和时间标记 141

278 设置文件的日期与时间标记 142

280 每次读写一个字 143

279 把文件日期和时间设置成当前日期和时间 143

281 改变文件的长度 144

282 控制文件打开操作的读写模式 145

284 分配文件缓冲区 146

283 将缓冲区赋给文件 146

285 利用MKTEMP创建惟一文件名 147

286 读写结构 148

287 从文件流中读取结构数据 149

289 强制文件句柄设置 150

288 复制文件句柄 150

291 文件共享 151

290 把文件句柄和文件流联系起来 151

293 锁定文件内容 152

292 打开文件进行共享访问 152

294 获取更精细的文件锁定控制 154

297 递归读取磁盘文件 155

295 使用DOS目录 155

296 打开目录 155

298 判断当前文件位置 156

300 在指定目录中创建惟一文件 157

299 打开共享文件流 157

301 创建新文件 158

304 按行写文本 159

302 强制二进制或文本文件打开 159

303 按行读文本 159

307 判断文件结尾 160

305 应用FGETS和FPUTS 160

306 强制二进制文件翻译 160

309 读取格式化的文件数据 161

308 舍弃字符 161

311 获取文件句柄信息 162

310 根据当前位置定位文件指针 162

312 重新打开文件流 163

315 使用常量定义数组 164

第八章 数组、指针和结构 164

313 声明数组 164

314 初始化数组 164

316 为大数组使用HUGE内存模式 165

319 把多维数组当作一维数组 166

317 多维数组 166

318 给二维数组元素赋初值 166

320 联合 167

322 使用REGS——一种典型的联合 168

321 使用联合节省内存 168

323 应用REGS联合 169

324 位字段结构 170

325 在数组中查找指定的值 171

326 冒泡排序法 172

328 SHELL(希尔)排序法 173

327 选择排序法 173

329 快速排序法 175

330 利用LFIND搜索字符串 176

332 利用BSEARCH搜索已排序数组 177

331 利用LSEARCH搜索数值 177

333 利用QSORT对数组排序 178

335 判断变量的地址 179

334 判断数组元素的个数 179

337 间接访问指针 180

336 声明指针变量 180

340 指针的增值与减值 181

338 指针与函数参数的使用 181

339 指针运算 181

343 创建返回值为指针的函数 182

341 利用指针遍历数组 182

342 使用返回值为指针的函数 182

345 遍历字符串数组 183

344 指针数组 183

348 利用指针声明字符串常量 184

346 把字符串数组当成指针 184

347 使用指向一个指向字符串的指针的指针 184

351 使用指向函数的指针 185

349 VOID类型指针 185

350 创建指向函数的指针 185

353 结构 186

352 使用三级指针 186

356 形象表示结构 187

354 用不同的方式声明结构 187

355 结构成员 187

358 把结构传递给函数 188

357 应用结构 188

360 (*POINT).MEMBER间接引用 189

359 在函数内部改变结构 189

361 使用POINTER→MEMBER格式 190

364 包含数组的结构 191

362 初始化结构 191

363 使用嵌套结构 191

365 创建结构数组 192

367 BIOS服务 193

第九章 DOS和BIOS服务 193

366 DOS系统服务 193

368 寄存器 194

369 标志寄存器 195

371 利用BIOS访问指针 196

370 软件中断 196

373 可能的DOS副作用 198

372 CONTROL+BREAK信息 198

375 控制声音 199

374 暂时挂起程序 199

376 获取国家专用的信息 200

378 访问和控制磁盘传输区 201

377 磁盘传输地址 201

379 BIOS键盘服务 202

380 获取BIOS设备列表 203

381 控制串行口I/O 204

382 利用BDOS访问DOS服务 206

383 获取扩展DOS错误信息 207

385 创建远指针(FAR PRINTER) 208

384 判断BIOS常规内存数量 208

388 读段寄存器设置 209

386 把远端地址分解为段地址和偏移地址 209

387 判断自由核心内存 209

391 常规内存的分布 211

第十章 内存管理 211

389 内存的类型 211

390 常规内存 211

393 从段和偏移量中产生地址 212

392 为什么PC和DOS限制于1MB 212

395 使用扩充内存 213

394 扩充内存 213

397 访问扩展内存 214

396 实模式和保护模式 214

400 各种堆栈配置 215

398 高端内存区 215

399 堆栈 215

402 使用STKLEN控制堆栈空间 216

401 判断程序的当前堆栈大小 216

405 拷贝内存区域直到某指定字节 217

403 给内存区域赋值 217

404 拷贝内存区域 217

407 交换两个相邻字符串字节 218

406 比较两个无符号字符数组 218

408 分配动态内存 219

411 利用CALLOC函数分配内存 220

409 再谈类型转换 220

410 释放内存 220

412 堆 221

413 解决64Kb堆限制 222

414 从堆栈中分配内存 223

416 改变被分配内存区域的大小 224

415 分配巨型数据 224

418 快速堆检测 225

417 BRK函数 225

419 填充自由堆空间 226

421 遍历堆入口 227

420 检测特定的堆入口 227

422 访问指定内存单元 228

424 PC端口 229

423 向内存中置数 229

426 CMOS 230

425 访问端口值 230

428 微型内存模式 231

427 内存模式 231

430 中型内存模式 232

429 小型内存模式 232

431 压缩内存模式 233

432 大型内存模式 234

434 判断当前的内存模式 235

433 巨型内存模式 235

437 判断程序的耗时 236

第十一章 日期和时间 236

435 获取当前日期与时间 236

436 延迟若干毫秒 236

439 获取日期数据串 237

438 比较两个时间 237

441 读BIOS计时器 238

440 获取时间串 238

443 使用格林威治平时 239

442 使用当地时间 239

445 获取系统日期 240

444 获取DOS系统时间 240

448 把DOS日期转换为UNIX格式 241

446 设置DOS系统时间 241

447 设置DOS系统日期 241

451 利用TZSET设置时区区域 242

449 利用TIMEZONE计算时差 242

450 判断当前时区 242

454 获取时区信息 243

452 利用TZ环境入口 243

453 从用户程序中设置TZ环境入口 243

456 把日期转换成自1/1/1970以来的秒数 244

455 以秒钟的形式设置自1/1/1970午夜以来的系统时间 244

457 判断日期的儒略历日期 245

458 创建格式化日期和时间串 246

459 PC时钟类型 247

462 自己编写密码函数 248

第十二章 重定向I/O和进程命令行 248

460 等候按键 248

461 提醒用户输入密码 248

463 输出重定向 249

466 利用STDOUT和STDIN 250

464 输入重定向 250

465 联合使用INPUT和OUTPUT重定向 250

469 确保信息出现在屏幕上 251

467 管道(pipe)运算符 251

468 GETCHAR和PUTCHAR 251

470 自定义MORE命令 252

471 防止I/O重定向 253

473 把重定向输出分割到一个文件中 254

472 应用STDPRN文件句柄 254

475 命令行变元 255

474 应用STDAUX文件句柄 255

477 把ARGV当作指针 256

476 从命令行中显示文件内容 256

479 环境 257

478 C是如何知道命令行的 257

482 出口状态值 258

480 把ENV当作一个指针 258

481 使用命令行数字 258

483 为出口状态过程使用RETURN 259

485 DOS是如何对待环境的 260

484 在环境中搜索特定入口 260

486 应用ENVIRON全局变量 261

488 给DOS环境添加元素 262

487 给当前环境添加入口 262

490 定义在程序结束时执行的函数 263

489 退出当前程序 263

492 重复使用目标代码 264

第十三章 编程工具 264

491 库 264

496 库管理程序的其他功能 265

493 创建库文件 265

494 常用的库操作 265

495 列出库文件中的子例行程序 265

499 使用连接映像 266

497 连接器 266

498 连接器的功能 266

501 使用MAKE命令简化应用程序的创建 267

500 使用连接器响应文件 267

503 通过MAKE使用多依赖性文件 268

502 生成一个简单的MAKE文件 268

505 MAKE和命令行 269

504 说明用户的MAKE文件 269

508 使用MAKE宏 270

506 在MAKE文件中放置多个依赖性 270

507 显现的和隐含的MAKE法则 270

510 用MAKE执行条件进程 271

509 预定义MAKE宏 271

513 使用MAKE的宏修饰符 272

511 验证一个MAKE宏 272

512 再次包含一个MAKE文件 272

518 同时激活和改变一个宏 273

514 因错误结束MAKE文件 273

515 关闭命令显示 273

516 使用文件BUILTINS.MAK 273

517 在MAKE中执行出口状态进程 273

519 为多个依赖文件执行一个MAKE命令 274

521 理解CTYPE.H,ISTYPE宏 275

第十四章 高级C语言编程 275

520 判断是否有数学协处理器 275

522 检查系统和路径错误 276

525 执行一个非本地的GOTO 277

523 显示预定义的错误信息 277

524 决定操作系统版本 277

527 激活一个内部的DOS命令 278

526 获得进程ID(PID) 278

528 使用PSP全局变量 279

530 使用枚举类型 280

529 在变量声明中使用CONST修饰符 280

533 动态列表简介 281

531 分配一个特殊的值给枚举类型 281

532 保存和恢复寄存器 281

534 声明一个链接的列表结构 282

537 从一个列表中删除一个元素 283

535 增加一个列表入口 283

536 插入一个列表入口 283

538 使用一个双向链表 284

540 理解NODE->PREVIOUS->NEXT 285

539 创建一个简单的双向链表 285

541 从一个双向链表中移走一个元素 286

542 在一个双向链表中插入一个元素 287

544 派生一个子进程 288

543 理解子进程 288

545 使用其他的SPAWNLXX函数 289

546 使用SPAWNVXX函数 290

547 执行一个子进程 291

549 使用EXECVXX函数 292

548 使用其他的EXECLXX函数 292

551 理解中断 293

550 理解覆盖 293

552 PC机的中断 294

554 判断一个中断向量 295

553 使用中断关键字 295

557 生成简单的中断处理器 296

555 设置一个中断向量 296

556 使能与禁止中断 296

558 链接一个二次中断 297

560 捕获PC机时钟 298

559 生成一个中断 298

561 C语言中的致命错误处理 299

562 一个更完全的致命错误处理器 300

564 生成一个Ctrl+Break处理器 301

563 恢复改变过的中断 301

566 直接插入内联函数 302

565 在用户的致命错误处理器中使用DOS服务 302

568 理解快速函数调用 303

567 使能和禁止内联函数 303

571 理解初始化值 304

569 FASTCALL参数传递的法则 304

570 消除普通的子表达式 304

573 理解左值(LVALUE) 305

572 理解连接 305

576 谨慎使用远指针 306

574 理解右值(RVALUE) 306

575 使用段寄存器关键字 306

579 防止循环包含 307

577 数学协处理器语句 307

578 理解变量中的CDECL和PASCAL 307

582 使用COUT输出值和变量 308

第十五章 C++入门 308

580 C++介绍 308

581 理解COUT I/O流 308

586 使用CLOG实现输出 309

583 显示十六进制和八进制数值 309

584 输出到CERR 309

585 用CIN得到输入 309

590 分辨全局范围 310

587 CIN、COUT、CERR和CLOG是类的实例 310

588 使用FLUSH操纵符快速输出 310

589 C++增加的新关键字 310

593 使用SETW设置COUT宽度 311

591 提供缺省参数值 311

592 控制COUT的输出宽度 311

595 左对齐和右对齐COUT的输出 312

594 指定COUT的填充字符 312

596 控制COUT显示浮点数字的数目 313

599 设置输入输出基数 314

597  以小数或科学记数格式显示数值 314

598 恢复COUT至默认值 314

601 在函数原型中放置默认参数值 315

600 在需要的地方定义变量 315

605 使用FAR指针和NEW运算符 316

602 使用按位运算符及COUT 316

603 在C++中使用ENUM关键字 316

604 用NEW分配内存 316

607 理解C++中的引用 317

606 释放内存至自由空间 317

610 用三种方法传递参数 318

608 给函数传递引用 318

609 防止隐藏对象 318

612 函数可返回引用 319

611 使用引用的规则 319

613 使用INLINE关键字 320

616 用COUT写字符 321

614 使用C++的ASM关键字 321

615 用CIN读字符 321

619 理解连接规范 322

617 文件结束测试 322

618 用ENDL产生新行 322

621 重载函数 323

620 理解重载 323

623 避免不明确的重载 324

622 重载函数的第二个例子 324

625 改变NEW运算符的缺省处理器 325

624 使用CIN每次读一行 325

627 判断C++编译 326

626 用SET_NEW_HANDLER函数设置NEW处理器 326

629 结构中定义函数成员 327

628 理解C++中的结构 327

632 给成员函数传递参数 328

630 在结构内定义成员函数 328

631 在结构外定义成员函数 328

634 同名成员不同函数 329

633 不同结构具有同名函数成员 329

636 把程序分解成对象 331

第十六章 对象 331

635 对象 331

637 理解C++的类 333

641 类和结构的选择 334

638 理解封装 334

639 理解多态性 334

640 理解继承 334

643 实现简单类的程序 335

642 创建简单类模型 335

644 定义类构件 336

647 理解PUBLIC:标志 337

645 理解作用域分辨符 337

646 在声明中使用或省略类名 337

650 公有方法常称为接口函数 338

648 理解PRIVATE:标志 338

649 理解PROTECTED:标志 338

653 类初始化 339

651 对象实例共享代码 339

652 全局分辨符 339

655 理解静态类成员 340

654 另一种类初始化方法 340

656 静态数据成员 341

658 成员函数声明 342

657 静态成员函数 342

660 决定内联和非内联函数的使用 343

659 内联函数声明 343

662 匿名联合 344

661 类和联合 344

663 友元函数 345

665 使用构造函数 346

第十七章 常见的类函数 346

664 构造函数 346

666 构造函数的缺省参数 347

667 重载构造函数 348

669 析构函数 349

668 获得重载函数的地址 349

670 程序何时调用析构函数 350

671 使用复制构造函数 352

673 局部类 353

672 显式构造函数 353

675 运算符重载 354

674 构造函数和类数组 354

677 重载加运算符 355

676 创建运算符成员函数 355

678 重载前置和后置增量运算符 356

679 用友元函数重载运算符 357

680 用友元函数重载++或--运算符 358

681 用友元函数重载运算符的原因 359

683 重载DELETE运算符 360

682 重载NEW运算符 360

684 重载数组下标运算符[] 362

685 重载函数调用运算符() 363

687 重载逗号运算符 364

686 重载指针运算符-> 364

690 创建初始化的类数组 366

688 取消输入前的空格 366

689 在头文件中定义类 366

691 内联类代码允许改变 367

692 静态存储区 368

694 用IOS成员格式化输入和输出 369

第十八章 用C++输入输出 369

693 I/O流操作和STDIO同步 369

697 重载SETF函数 370

695 设置格式标志 370

696 清除格式标志 370

698 检测当前格式标志 371

700 使用FILL函数 372

699 使用PRECISION函数 372

702 用操纵算子格式化I/O 373

701 理解操纵算子 373

703 重载抽取运算符 374

705 打开文件流 375

704 重载COUT的插入运算符的另一种方法 375

707 把文件流操作放到一起 376

706 读和写文件流数据 376

708 执行二进制拷贝操作 377

710 用READ读二进制数据 378

709 流缓冲类 378

711 用WRITE写二进制数据 379

712 使用GCOUNT成员函数 380

714 使用GETLINE方法 381

713 使用重载的GET函数 381

715 文件结束的检测 382

716 使用IGNORE函数 383

720 控制文件流指针 384

717 使用PEEK函数 384

718 使用PUTBACK函数 384

719 获得文件流的当前位置 384

722 在文件内操纵文件指针位置 385

721 用SEEKG和SEEKP实现随机访问 385

723 判断I/O流的当前状态 386

725 用ISTRSTREAM写字符串 387

724 字符串流 387

727 用IOS成员函数操纵流数组 388

726 对输出数组使用PCOUNT 388

729 随机访问流数组 389

728 使用STRSTREAM 389

731 为字符串数组定制插入运算符 390

730 对流数组使用操纵符 390

732 I/O流中使用动态数组 392

734 对象调用另一对象 393

733 ENDS操纵符 393

736 声明READER类为友元 394

735 重温友元 394

738 限制友元访问 395

737 消除CLASS类名语句 395

739 名字冲突及友元 396

740  C++中的继承 397

第十九章 继承及多态性 397

743 基类及派生类的构造函数 398

741 基类和派生类 398

742 派生类 398

744 使用受保护的成员 399

745 公有的和私有的基类继承 400

746 受保护的基类继承 401

747 多重继承 402

748 构造函数的顺序和基类 403

749 声明私有基类 404

751 如何为基类构造函数传递参数 405

750 解决类及其基类名字的冲突 405

753 用虚拟基类避免混淆 407

752 派生类内的访问声明 407

754 虚拟基类 408

755 派生类使用保护成员 409

756 定义静态类数据 410

757 初始化静态数据成员 411

759 静态私有数据成员 412

758 直接访问静态数据成员 412

761 公有静态函数的直接访问 413

760 静态成员函数 413

762 嵌套类 414

764 类成员可递归 415

763 在方法函数中插入汇编语句 415

765 THIS指针 416

766 指向类的指针 417

768 使用指针时基类和派生类名字的冲突 418

767 对不同的类使用相同的指针 418

769 继承虚拟属性 419

770 虚拟函数是分层的 420

771 实现多态性 421

773 使用虚拟函数 422

772 纯虚函数 422

774 先期和迟后联编演示 424

776 对类使用SIZEOF 425

775 定义输出流操纵符 425

778 友元转换函数 426

777  PRIVATE、PUBLIC、PROTECTED也能用于结构 426

779 判断运算符提高还是降低可读性 427

781 使用简单模板 428

第二十章 通用函数及模板 428

780 模板 428

782 支持多种类型的模板 429

784 通用函数的限制 430

783 显式重载通用函数 430

785 使用通用函数 431

786 通用冒泡排序函数 432

787 用通用函数压缩数组 433

788 模板同样消除类复制 434

789 通用类 435

790 创建含两个通用数据类型的通用类 436

791 创建含有参数的操纵符 437

792 通用数组类 438

795 简单的异常处理器 440

第二十一章 异常处理及类型转换 440

793 异常处理 440

794 基本的异常处理形式 440

797 异常具有特定类型 441

796 THROW语句 441

799 函数内的局部TRY块 442

798 TRY块内的函数抛出异常 442

800 程序何时执行CATCH 443

801 对单个TRY块使用多个CATCH语句 444

803 捕获单个TRY块的所有异常 445

802 对异常使用省略符(…) 445

804 捕获单个TRY块的显式和通用异常 446

805 异常的限制 447

806 重新抛出异常 448

808 使用缺省的函数参数 449

807 异常处理的应用 449

810 缺省参数和函数重载 450

809 用缺省函数参数避免错误 450

811 创建转换函数 451

812 使用转换函数提高类型的可移植性 452

814 CONST CAST运算符 453

813 C++中新的强制转换运算符 453

815 DYNAMIC CAST运算符 454

816 REINTERPRET CAST运算符 455

818 名字空间 456

817 STATIC CAST运算符 456

822 为运行时类型标识使用TYPEID 457

819 使用名字空间 457

820 对名字空间用Using语句 457

821 运行时类型标识 457

823 TYPE INFO类 459

825 在类内使用MUTABLE关键字 460

824 MUTABLE关键字 460

826 布尔数据类型 461

828 创建STRINGS类 463

第二十二章 创建可重用的类 463

827 定义字符串类型的特性 463

829 编写STRINGS类的构造函数 464

831 编写STRINGS类的赋值函数 465

830 STRINGS类执行I/O操作 465

832 重载+运算符以连接字符串对象 466

835 把STRINGS对象转换成字符数组 468

833 重载关系运算符 468

834 判断STRINGS对象的大小 468

837 双向链表类成员 469

836 用C++的类创建双向链表 469

839 运算符重载函数 470

838 GETNEXT和GETPREVIOUS函数 470

841 LINKED LIST类 471

840 继承LIST OBJECT类 471

842 LINKED LIST的STORE函数 472

843 LINK LIST的REMOVE函数 473

846 以反向顺序显示LINKED LIST 474

844 GETSTART和GETEND函数 474

845 以前向的顺序显示LINKED LIST 474

848 实现LINKED LIST的简单程序 475

847 查找链表 475

850 通用LIST OBJECT类成员 477

849 创建通用的双向链表类 477

853 通用类用于结构 479

851 通用LINKED LIST类 479

852 通用类用作字符链表 479

854 重载?比较运算符 480

856 对象用于STORE函数 481

855 通用链表的其他实现 481

857 编写判断链表长度的函数 482

858 标准模板库介绍 483

第二十三章 标准模板库 483

860 容器 484

859 标准模板库头文件 484

861 使用容器的例子 485

862 标准模板库的容器介绍 486

863 前向和可逆容器 487

864 标准模板库的序列容器 488

866 标准模板库的关联容器 489

865 理解USING NAMESPACE STD语句 489

867 迭代器 491

868 迭代器演示 492

870 STL的其他迭代器 493

869 更好地理解STL的输入和输出迭代器 493

871 理解定则 494

873 STL包含的算法描述 495

872 理解模式 495

874 STL的FOR EACH算法 496

875 STL的GENERATE N算法 497

876 STL的RANDOM SHUFFLE算法 498

877 PARTIAL SORT COPY算法 500

878 MERGE算法 501

879 向量 503

881 简单BVECTOR演示 505

880 BIT VECTOR序列容器 505

882 LIST类型 506

883 构造LIST对象 507

886 REMOVE和EMPTY成员函数 508

884 往链表中插入对象 508

885 使用ASSIGN成员函数 508

887 遍历L0ST对象 509

890 DEQUE容器 510

888 SLIST类型 510

889 往SLIST序列容器中插入元素 510

891 使用DEQUE容器 511

893 对DEQUE用REVERSE迭代器 512

892 ERASE和CLEAR成员函数 512

894 管理DEQUE的大小 513

895 MAP对象 514

896 用成员函数管理MAP 515

897 控制MAP的大小及内容 516

898 理解SET(集合) 517

899 简单的SET演示 518

901 线程介绍 520

第二十四章 Windows编程入门 520

900 WIN32编程介绍 520

902 理解消息 521

903 父窗口和子窗口 522

904 创建一般的W0NDOWS程序 523

905 资源文件 525

906 WINDOWS句柄 527

908 GENERIC的头文件 528

907 定义WINDOWS的句柄类型 528

911 更精细地查看GENERIC.CPP程序 529

909 回调函数 529

910 WINDOWS应用程序编程接口 529

912 WINMAIN函数 530

913 窗口的创建 531

915 SHOWWINDOW函数 532

914 CREATEWINDOW函数 532

916 REGISTERCLASS函数 533

917 学习更多有关消息的知识 535

918 用TRANSLATEMESSAGE处理消息 536

920 LPCTSTR类型 537

919 用DISPATCHMESSAGE处理消息 537

922 WINDOWS预定义的类 538

921 DWORD类型 538

924 创建窗口时WINDOWS发送WM CREATE消息 540

923 用预定义的类创建简单的窗口 540

925 窗口及控件的格式 541

926 用扩展的格式创建窗口 543

928 REGISTERCLASSEX API函数 545

927 销毁窗口 545

929 用SETPROP为窗口附加信息 546

930 用ENUMPROPS列出窗口的属性 547

931 回调函数 548

932 MESSAGEBOX函数 549

934 消息的流动 551

第二十五章 消息及菜单 551

936 PEEKMESSAGE函数 553

935 MSG结构的构件 553

937 POSTMESSAGE函数 554

939 REPLYMESSAGE函数 555

938 SENDMESSAGE函数 555

941 SETWINDOWSHOOKEX函数 556

940 钩子消息 556

942 EXITWINDOWSEX函数 557

943 菜单的类型 558

944 菜单的结构 559

947 为应用程序的窗口增加菜单 560

946 POPUP和MENUITEM描述符 560

945 在资源文件中创建菜单 560

949 菜单产生的消息 561

948 在应用程序中改变菜单 561

950 LOADMENU函数 562

951 MODIFYMENU函数 563

952 用ENABLEMENUITEM控制菜单 564

953 用APPENDMENU扩充菜单 565

954 用DELETEMENU删除指定的菜单 567

955 在菜单项中使用加速键 568

956 简单的加速表 569

957 更好地理解资源文件的结构 570

959 定制的资源 571

958 字符串表 571

961 列出资源文件的内容 572

960 用LOADSTRING把字符串表装入程序 572

962 对资源文件用ENUMRESOURCETYPES 574

963 用FINDRESOURCE把资源装入程序 575

965 定义对话框类型 578

964 对话框 578

第二十六章 对话框 578

967 对话框模板的构件 579

966 对话框使用键盘 579

969 对话框定义的构件 580

968 创建特定的对话框模板 580

971 用DIALOGBOX宏显示对话框 581

970 定义对话框的控件 581

972 对话框的消息循环 583

974 CREATEDIALOG宏 584

973 深入控件的处理 584

975 CREATEDIALOGPARAM函数 585

976 对话框的缺省消息处理程序 586

977 用DLGDIRLIST函数创建对话列表框 587

978 响应用户在列表框中的选择 589

979 关闭对话框 590

981 响应鼠标事件 591

980 用户输入 591

982 WM MOUSEMOVE消息 592

984 响应键盘事件 593

983 读取鼠标按键 593

985 虚键 594

987 进一步使用WM KEYDOWN消息 596

986 使用虚键 596

988 设置和返回鼠标的双击时间 597

989 交换鼠标按键 598

991 滚动条介绍 599

990 判断用户是否按了一个键 599

992 SHOWSCROLLBAR函数 600

994 滚动条消息 601

993 滚动条的位置及范围 601

995 获取滚动条的当前设置 602

996 滚动窗口内容 603

997 WM SIZE消息 605

998 WM PAINT消息 606

999 程序必须捕获的其他滚动条消息 607

1000 使滚动条有效和无效 608

1001 使用SCROLLDC函数 609

1003 全局及局部内存 611

1002 WIN32的内存模型 611

第二十七章 WINDOWS的内存管理 611

1004 虚拟内存 612

1006 从全局堆中分配内存块 613

1005 重温堆 613

1007 用GLOBALREALLOC动态改变堆的大小 615

1008 丢弃已分配的内存块 616

1010 GLOBALLOCK和GLOBALHANDLE 617

1009 使用GLOBALFREE函数 617

1011 检查计算机的内存 618

1012 在进程中创建堆 619

1013 用堆函数管理进程指定的内存 621

1015 分配虚拟内存块 622

1014 检查从堆中分配的内存大小 622

1016 更好地理解虚拟内存块 625

1017 释放虚拟内存 626

1018 管理虚拟内存页 627

1019 更好地理解进程 628

第二十八章 进程及线程 628

1020 创建进程 629

1021 结束进程 634

1023 运行独立的子进程 635

1022 产生子进程 635

1025 创建简单线程的函数 636

1024 更好地理解线程 636

1026 确定线程堆栈的大小 638

1028 处理线程的执行时间 639

1027 获得当前线程或进程的句柄 639

1029 管理多个线程的处理时间 640

1030 处理无句柄的异常 641

1031 结束线程 642

1033 理解WINDOWS的优先级类 643

1032 确定线程或进程的ID 643

1034 改变进程的优先级类 644

1035 设置线程的相对优先级 645

1037 获取线程的上下文 646

1036 获取线程的当前优先级 646

1039 定义五个主要的同步对象 647

1038 线程的暂停及继续 647

1040 创建临界区 648

1042 用WAITFORSINGLEOBJECT同步两个线程 649

1041 使用简单的临界区 649

1043 用WAITFORMULTIPLEOBJECTS同步多个线程 651

1044 创建互斥体 652

1045 使用信号量 653

1046 简单的事件处理程序 655

1048 更好地理解设备描述表 657

1047 理解图形设备接口 657

第二十九章 图形设备接口 657

1049 获取窗口的设备描述表 658

1050 为打印机创建设备描述表 659

1051 用CREATECOMPATIBLEDC创建内存设备描述表 662

1052 使用CREATEFONT函数 663

1053 使用ENUMFONTFAMILIES函数 667

1054 用CREATEFONTINDIRECT显示多个字体 668

1055 获取设备的能力 669

1056 用GETSYSTEMMETRICS函数分析窗口 673

1057 获取整个窗口的设备描述符 676

1058 释放设备描述表 677

1060 创建位图 678

1059 由设备描述表获得窗口的句柄 678

第三十章 位图、图元文件及图标 678

1061 显示位图 679

1062 创建DIB位图 680

1063 用某种模式填充矩形 682

1064 使用SETDIBITS 683

1065 用SETDIBITSTODEVICE在指定的设备上输出位图 684

1066 创建并显示图元文件 685

1067 枚举增强型图元文件 686

1068 使用GETWINMETAFILEBITS函数 688

1069 创建图标 689

1070 从资源中创建图标 690

1072 使用LOADICON函数 691

1071 使用CREATEICONINDIRECT函数 691

1073 用LOADIMAGE装入多种图形类型 692

1075 用CREATEFILE函数打开文件 695

1074 管道、资源、设备及文件的介绍 695

第三十一章 WINDOWS的输入及输出 695

1076 用WRITEFILE写文件 699

1077 用READFILE读文件 701

1079 把文件映射成虚拟内存 702

1078 关闭文件 702

1080 把文件的视图映射到当前的进程中 705

1082 获取并改变文件的属性 706

1081 打开有名的文件映射对象 706

1083 获取文件的大小 707

1084 获取文件的时间标志 708

1086 获取并设置当前的目录 709

1085 创建目录 709

1087 获取WINDOWS及系统的目录 710

1089 拷贝文件 711

1088 删除目录 711

1091 删除文件 712

1090 移动及重命名文件 712

1093 创建临时文件 713

1092 获取临时路径 713

1094 CREATENAMEDPIPE函数 714

1095 连接命名管道 717

1096 调用命名管道 719

1097 断开与命名管道的连接 720

1099 OVERLAPPED结构 721

1098 使用异步输入及输出 721

1101 GETLASTERROR函数 722

1100 使用设备内核对象的异步I/O 722

1102 用FORMATMESSAGE格式化错误消息 723

1104 WAITFORMULTIPLEOBJECTS用于异步I/O 725

1103 使用事件内核对象的异步I/O 725

1105 I/O结束端口介绍 726

1107 警报I/O仅用于WINDOWS NT 727

1106 警报I/O用于异步处理 727

1108 READFILEEX及WRITEFILEEX 728

1110 .NET环境的其他优势 730

1109 .NET环境 730

第三十二章 .NET环境 730

1113 中间语言 731

1112 元数据 731

1111 公共语言运行时间 731

1115 集合 732

1114 .NET通用类型 732

1117 反射 733

1116 引用和变量类型 733

1118 交互管理数据 734

1119 .NET类架构 735

1120 创建和编译第一个C#程序 736

1122 在Console.WriteLine中使用转义序列 737

1121 使用Console.WriteLine函数 737

1123 使用Console.WriteLine显示数值 738

1124 使用占位符格式化输出 739

1125 在输出格式中指定精度 740

1126 使用###和000格式化输出 741

1128 访问命令行变量 742

1127 C#的Main函数 742

1129 C#关键字 743

1131 使用未赋值变量作为参数 744

1130 必须给变量赋值 744

1133 定义只读变量 745

1132 C#不支持#define和#include命令 745

1135 类型转换 746

1134 在C#中创建枚举 746

1137 在C#中进行判断 747

1136 转换函数 747

1138 在C#中判断变量的值 748

1140 使用foreach遍历数组元素 749

1139 C#程序中的循环语句 749

1141 使用Console.ReadLine读取键盘输入 750

1142 使用Console.Read函数每次读取一个字符 751

1143 使用内部和外部参数 752

1144 处理可变的参数数量 753

1145 在C#中使用数组 754

1147 在C#中使用字符串 755

1146 改变数组的长度 755

1149 插入和删除子字符串 757

1148 使用格式说明符来格式化字符串数据 757

1150 判断字符串的开始与结束 758

1152 在函数内改变字符串和数组 759

1151 分割定界字符串 759

1153 创建自己的名字空间 760

1154 名字空间的嵌套 761

1156 在C#中重载函数 763

1155 C#不需要在参数列表中使用void 763

1157 C#的结构与类不同 764

1158 定义C#类 765

1159 使用new创建类实例 766

1161 使用C#的private访问说明符 767

1160 使用C#公共访问说明符 767

1162 强调变量的取值范围 768

1163 使用public和internal控制类的访问 769

1164 使用internal访问控制说明符 770

1165 使用构造器函数初始化成员 770

1166 使用this关键字 771

1167 C#支持静态类成员 772

1168 创建私有构造器 773

1169 使用static构造器方法 773

1170 重载类构造器函数 774

1171 使用解构器函数清除对象 775

1172 Finalize方法 775

1173 判断在堆中分配的空间 776

1174 强制垃圾收集器进行收集 777

1175 垃圾收集代 778

1176 调用基类构造器函数 779

1177 与C++不同,C#不支持多重继承 780

1178 构造器和解构器的执行 780

1179 使用密封类防止继承 781

1180 使用虚拟函数 781

1181 在C#中使用抽象类 783

1182 C#不支持友类 783

1183 使用反射查询类 784

1184 利用反射接收类域 785

1185 C#的重载运算符 786

1186 包装C#变量 787

1187 解包C#变量 787

1188 使用Stack类 788

1189 创建名字空间别名 789

1190 C#预处理 789

1191 预处理器区域 790

1192 使用is运算符 790

1193 类转换和as运算符 791

1194 C#不支持缺省参数值 793

1195 fixed关键字 794

1196 授权 794

1197 合成授权 795

1198 处理多点授权的返回值 796

1199 类属性 797

1200 继承属性 799

1201 使用多重属性 801

1202 创建只读属性 803

1203 C#索引 804

1204 System.Exception对象 806

1205 派生定制异常 806

1206 使用System.Exception类StackTrace方法 807

1207 C#接口 808

1208 实现接口 809

1209 实现多接口 810

1210 重新实现接口 811

1211 使用反射和接口 813

1212 .NET环境定义的关键接口 815

1213 判断类是否实现接口 815

1214 C#事件 816

1215 定义事件和事件授权 817

1216 事件处理 817

1217 创建多线程C#程序 819

1218 创建简单的多线程例子 819

1219 让线程休眠 820

1220 挂起、重启、终止线程执行 822

1221 线程竞争环境 823

1222 使用C#的lock语句保护资源 825

1223 使用Monitor类同步化线程 827

1224 使用Monitor.TryEnter防止线程中断 828

1225 控制线程优先权 830

1226 C#属性 831

1227 创建属性 832

1228 查询类属性信息 832

1229 使用多个属性 833

1230 使用基于XML的注释 835

1231 使用XML标签扩展程序的注释 836

1232 创建简单的Windows程序 837

1233 定制通用控件 838

1234 使用通用控件 840

1235 使用通用对话框 842

1236 回顾C#反射 844