第1章 使用Visual C+编程 1
1.1使用Visual C++学习 1
1.2编写C++应用程序 2
1.3学习桌面应用程序的编程 2
1.3.1学习C+++ 3
1.3.2控制台应用程序 3
1.3.3 Wiindows编程概念 3
1.4集成开发环境简介 5
1.4.1编辑器 5
1.4.2编译器 5
1.4.3链接器 5
1.4.4库 6
1.5使用IDE 6
1.5.1工具栏选项 7
1.5.2可停靠的工具栏 8
1.5.3文档 8
1.5.4项目和解决方案 8
1.5.5设置Visual C+++的选项 16
1.5.6创建和执行Wiindows应用程序 17
1.6小结 19
1.7本章主要内容 19
第2章 数据、变量和计算 21
2.1 C++程序结构 21
2.1.1 main()函数 28
2.1.2程序语句 28
2.1.3空白 30
2.1.4语句块 30
2.1.5自动生成的控制台程序 31
2.2定义变量 32
2.2.1命名变量 32
2.2.2声明变量 33
2.2.3变量的初始值 34
2.3基本数据类型 34
2.3.1整型变量 35
2.3.2字符数据类型 36
2.3.3整型修饰符 37
2.3.4布尔类型 38
2.3.5浮点类型 38
2.3.6 C+++中的基本类型 39
2.3.7字面值 39
2.3.8定义数据类型的同义词 40
2.4基本的输入\输出操作 41
2.4.1从键盘输入 41
2.4.2到命令行的输出 41
2.4.3格式化输出 42
2.4.4转义序列 43
2.5 C++中的计算 45
2.5.1赋值语句 45
2.5.2算术运算 45
2.5.3计算余数 50
2.5.4修改变量 50
2.5.5增量和减量运算符 51
2.5.6计算的顺序 53
2.6类型转换和类型强制转换 54
2.6.1赋值语句中的类型转换 55
2.6.2显式类型转换 56
2.6.3老式的类型强制转换 57
2.7 AUTO关键字 57
2.8类型的确定 58
2.9按位运算符 58
2.9.1按位AND运算符 58
2.9.2按位OR运算符 60
2.9.3按位EOR运算符 61
2.9.4按位NOT运算符 61
2.9.5移位运算符 61
2.10 lvalue和rvalue 63
2.11了解存储时间和作用域 64
2.11.1自动变量 64
2.11.2决定变量声明的位置 66
2.11.3全局变量 67
2.11.4静态变量 70
2.12具有特定值集的变量 70
2.12.1旧枚举 70
2.12.2类型安全的枚举 72
2.13名称空间 74
2.13.1声明名称空间 75
2.13.2多个名称空间 76
2.14小结 77
2.15 练习 77
2.16本章主要内容 78
第3章 判断和循环 79
3.1比较数据值 79
3.1.1 if语句 80
3.1.2嵌套的if语句 81
3.1.3嵌套的if-else语句 85
3.1.4逻辑运算符和表达式 87
3.1.5条件运算符 89
3.1.6 switch语句 91
3.1.7无条件转移 94
3.2重复执行语句块 95
3.2.1循环的概念 95
3.2.2 for循环的变体 97
3.2.3 while循环 104
3.2.4 do-while循环 106
3.2.5基于范围的循环 107
3.2.6嵌套的循环 107
3.3小结 110
3.4练习 110
3.5本章主要内容 111
第4章 数组、字符串和指针 113
4.1处理多个相同类型的数据值 113
4.1.1数组 113
4.1.2声明数组 114
4.1.3初始化数组 117
4.1.4使用基于范围的for循环 118
4.1.5字符数组和字符串处理 119
4.1.6多维数组 122
4.2间接数据访问 125
4.2.1指针的概念 125
4.2.2声明指针 125
4.2.3使用指针 126
4.2.4初始化指针 127
4.2.5 sizeof操作符 132
4.2.6常量指针和指向常量的指针 134
4.2.7指针和数组 136
4.3动态内存分配 142
4.3.1堆的别名——空闲存储器 142
4.3.2 new和delete操作符 142
4.3.3为数组动态分配内存 143
4.3.4多维数组的动态分配 146
4.4使用引用 146
4.4.1引用的概念 147
4.4.2声明并初始化Ivalue引用 147
4.4.3在基于范围的for循环中使用引用 148
4.4.4 rvalue引用 148
4.5字符串的库函数 149
4.5.1确定以空字符结尾的字符串的长度 149
4.5.2连接以空字符结尾的字符串 150
4.5.3复制以空字符结尾的字符串 151
4.5.4比较以空字符结尾的字符串 152
4.5.5搜索以空字符结尾的字符串 152
4.6小结 154
4.7练习 155
4.8本章主要内容 155
第5章 程序结构(1) 157
5.1理解函数 157
5.1.1需要函数的原因 158
5.1.2函数的结构 158
5.1.3替代的函数语法 161
5.1.4使用函数 161
5.2给函数传递实参 164
5.2.1按值传递机制 165
5.2.2给函数传递指针实参 166
5.2.3给函数传递数组 167
5.2.4给函数传递引用实参 171
5.2.5使用const修饰符 173
5.2.6 rvalue引用形参 174
5.2.7 main()函数的实参 176
5.2.8接受数量不定的函数实参 177
5.3从函数返回值 179
5.3.1返回指针 179
5.3.2返回引用 182
5.3.3函数中的静态变量 184
5.4递归函数调用 186
5.5小结 189
5.6练习 189
5.7本章主要内容 189
第6章 程序结构(2) 191
6.1函数指针 191
6.1.1声明函数指针 191
6.1.2函数指针作为实参 194
6.1.3函数指针的数组 196
6.2初始化函数形参 196
6.3异常 198
6.3.1抛出异常 199
6.3.2捕获异常 200
6.3.3重新抛出异常 201
6.3.4 MFC中的异常处理 202
6.4处理内存分配错误 203
6.5函数重载 204
6.5.1函数重载的概念 204
6.5.2引用类型和重载选择 207
6.5.3何时重载函数 207
6.6函数模板 208
6.7使用decltype操作符 210
6.8使用函数的示例 212
6.8.1实现计算器 212
6.8.2从字符串中删除空格 215
6.8.3计算表达式的值 216
6.8.4获得项值 218
6.8.5分析数 219
6.8.6整合程序 221
6.8.7扩展程序 223
6.8.8提取子字符串 224
6.8.9 运行修改过的程序 226
6.9小结 227
6.10练习 227
6.11本章主要内容 228
第7章 自定义数据类型 229
7.1 C++中的结构 229
7.1.1结构的概念 230
7.1.2定义结构 230
7.1.3初始化结构 230
7.1.4访问结构的成员 231
7.1.5伴随结构的智能感知帮助 234
7.1.6 RECT结构 235
7.1.7使用指针处理结构 236
7.2数据类型、对象、类和实例 237
7.2.1类的起源 239
7.2.2类的操作 239
7.2.3术语 240
7.3理解类 240
7.3.1定义类 240
7.3.2声明类的对象 241
7.3.3访问类的数据成员 241
7.3.4类的成员函数 243
7.3.5成员函数定义的位置 245
7.3.6 内联函数 245
7.4类构造函数 246
7.4.1构造函数的概念 247
7.4.2默认的构造函数 248
7.4.3默认的形参值 250
7.4.4在构造函数中使用初始化列表 252
7.4.5声明显式的构造函数 253
7.5类的私有成员 254
7.5.1访问私有类成员 256
7.5.2类的友元函数 257
7.5.3默认复制构造函数 259
7.6 this指针 260
7.7类的const对象 263
7.7.1类的const成员函数 263
7.7.2类外部的成员函数定义 264
7.8类对象的数组 265
7.9类的静态成员 267
7.9.1类的静态数据成员 267
7.9.2类的静态函数成员 270
7.10类对象的指针和引用 270
7.10.1类对象的指针 270
7.10.2类对象的引用 273
7.11小结 274
7.12练习 274
7.13本章主要内容 275
第8章 深入理解类 277
8.1类析构函数 277
8.1.1析构函数的概念 277
8.1.2默认的析构函数 278
8.1.3析构函数与动态内存分配 280
8.2实现复制构造函数 283
8.3在变量之间共享内存 284
8.3.1定义联合 285
8.3.2匿名联合 286
8.3.3类和结构中的联合 286
8.4运算符重载 287
8.4.1实现重载的运算符 287
8.4.2实现对比较运算符的完全支持 290
8.4.3重载赋值运算符 294
8.4.4重载加法运算符 299
8.4.5重载递增和递减运算符 303
8.4.6重载函数调用操作符 304
8.5对象复制问题 305
8.5.1避免不必要的复制操作 305
8.5.2应用rvalue引用形参 308
8.5.3命名的对象是lvalue 310
8.6默认的类成员 314
8.7类模板 315
8.7.1定义类模板 316
8.7.2根据类模板创建对象 318
8.7.3使用有多个形参的类模板 321
8.7.4函数对象模板 323
8.8完美转发 324
8.9使用类 327
8.9.1类接口的概念 327
8.9.2定义问题 327
8.9.3实现CBox类 328
8.10组织程序代码 343
8.11字符串的库类 345
8.11.1创建字符串对象 345
8.11.2连接字符串 346
8.11.3访问与修改字符串 350
8.11.4比较字符串 353
8.11.5搜索字符串 356
8.12小结 364
8.13练习 364
8.14本章主要内容 365
第9章 类继承和虚函数 367
9.1面向对象编程的基本思想 367
9.2类的继承 368
9.2.1基类的概念 369
9.2.2基类的派生类 369
9.3继承机制下的访问控制 372
9.3.1派生类中构造函数的操作 375
9.3.2声明类的保护成员 378
9.3.3继承类成员的访问级别 380
9.4派生类中的复制构造函数 382
9.5禁止派生类 384
9.6友元类成员 385
9.6.1友元类 387
9.6.2对类友元关系的限制 387
9.7虚函数 387
9.7.1虚函数的概念 389
9.7.2确保虚函数的正确执行 391
9.7.3禁止重写函数 391
9.7.4使用指向类对象的指针 392
9.7.5使用引用处理虚函数 393
9.7.6 纯虚函数 395
9.7.7抽象类 395
9.7.8间接基类 398
9.7.9虚析构函数 400
9.8类类型之间的强制转换 403
9.9嵌套类 403
9.10小结 407
9.11练习 407
9.12本章主要内容 409
第10章 标准模板库 411
10.1标准模板库的定义 411
10.1.1容器 412
10.1.2容器适配器 414
10.1.3迭代器 414
10.2智能指针 415
10.3算法 418
10.4 STL中的函数对象 418
10.5 STL容器范围 419
10.6序列容器 419
10.6.1创建矢量容器 420
10.6.2矢量容器的容量和大小 423
10.6.3访问矢量中的元素 428
10.6.4在矢量中插入和删除元素 428
10.6.5在矢量中存储类对象 431
10.6.6排序矢量元素 436
10.6.7排序矢量中的指针 437
10.6.8双端队列容器 442
10.6.9使用列表容器 445
10.6.10使用forward list容器 454
10.6.11使用其他序列容器 456
10.6.12 tuple< >类模板 466
10.7关联容器 469
10.7.1使用映射容器 469
10.7.2使用多重映射容器 480
10.8关于迭代器的更多内容 481
10.8.1使用输入流迭代器 481
10.8.2使用插入迭代器 484
10.8.3使用输出流迭代器 485
10.9关于函数对象的更多内容 487
10.10关于算法的更多内容 488
10.10.1 fill() 489
10.10.2 replace() 489
10.10.3 find() 489
10.10.4 transform() 490
10.11类型特质和静态断言 491
10.12 λ表达式 492
10.12.1 capture子句 493
10.12.2捕获特定的变量 494
10.12.3模板和λ表达式 494
10.12.4包装λ表达式 498
10.13小结 500
10.14练习 500
10.15 本章主要内容 501
第11章Windows编程的概念 503
11.1 Windows编程基础 503
11.1.1窗口的元素 504
11.1.2 Windows程序与操作系统 505
11.1.3事件驱动型程序 505
11.1.4 Wiindows消息 506
11.1.5 Wiindows API 506
11.1.6 Wiindows数据类型 506
11.1.7 Wiindows程序中的符号 507
11.2 Windows程序的结构 508
11.2.1 WiinMain()函数 509
11.2.2消息处理函数 519
11.3 MFC 524
11.3.1 MFC表示法 524
11.3.2 MFC程序的组织方式 525
11.4小结 528
11.5本章主要内容 528
第12章 使用MFC编写Wiindows程序 531
12.1 MFC的文档/视图概念 531
12.1.1文档的概念 531
12.1.2文档界面 532
12.1.3视图的概念 532
12.1.4链接文档和视图 533
12.1.5应用程序和MFC 534
12.2创建MFC应用程序 535
12.2.1创建SDI应用程序 536
12.2.2 MFC Application Wiizard的输出 539
12.2.3创建MDI应用程序 548
12.3小结 549
12.4练习 550
12.5本章主要内容0 550
第13章 处理菜单和工具栏 551
13.1与Windows进行通信 551
13.1.1了解消息映射 552
13.1.2消息类别 554
13.1.3处理程序中的消息 554
13.2扩展Sketcher程序 555
13.3菜单的元素 556
13.4为菜单消息添加处理程序 559
13.4.1选择处理菜单消息的类 560
13.4.2创建菜单消息函数 560
13.4.3编写菜单消息函数的代码 562
13.4.4添加更新菜单消息的处理程序 565
13.5添加工具栏按钮 568
13.5.1编辑工具栏按钮的属性 569
13.5.2练习使用工具栏按钮 570
13.5.3添加工具提示 571
13.6小结 571
13.7练习 571
13.8本章主要内容 571
第14章 在窗口中绘图 573
14.1窗口绘图的基础知识 573
14.1.1窗口工作区 573
14.1.2 Windows图形设备界面 574
14.2 MFC的绘图机制 576
14.2.1应用程序中的视图类 576
14.2.2 CDC类 577
14.3实际绘制图形 585
14.4对鼠标进行编程 587
14.4.1鼠标发出的消息 587
14.4.2鼠标消息处理程序 588
14.4.3使用鼠标绘图 590
14.5绘制草图 611
14.5.1运行示例 612
14.5.2捕获鼠标消息 612
14.6小结 613
14.7练习题 613
14.8本章主要内容 614
第15章 改进视图 615
15.1 Sketcher应用程序的缺陷 615
15.2改进视图 616
15.2.1更新多个视图 616
15.2.2滚动视图 617
15.2.3使用MM LOENGLISH映射模式 622
15.3删除和移动元素 622
15.4实现上下文菜单 623
15.4.1关联菜单和类 624
15.4.2选中上下文菜单项 625
15.5标识位于光标下的元素 626
15.5.1练习弹出菜单 627
15.5.2突出显示元素 627
15.5.3实现移动和删除功能 631
15.6处理屏蔽的元素 637
15.7小结 639
15.8练习 639
15.9本章主要内容 639
第16章 使用对话框和控件 641
16.1理解对话框 641
16.2理解控件 642
16.3创建对话框资源 642
16.3.1给对话框添加控件 643
16.3.2测试对话框 644
16.4对话框的编程 644
16.4.1添加对话框类 644
16.4.2模态和非模态对话框 645
16.4.3显示对话框 646
16.5支持对话框控件 648
16.5.1初始化对话框控件 648
16.5.2处理单选按钮消息 649
16.6完成对话框的操作 650
16.6.1给文档添加线宽 651
16.6.2给元素添加线宽 651
16.6.3在视图中创建元素 653
16.6.4练习使用对话框 654
16.7使用微调按钮控件 655
16.7.1添加Scale菜单项和工具栏按钮 655
16.7.2创建微调按钮 655
16.7.3生成比例对话框类 656
16.7.4显示微调按钮 659
16.8 使用缩放比例 660
16.8.1可缩放的映射模式 660
16.8.2设置文档的大小 661
16.8.3设置映射模式 662
16.8.4同时实现滚动与缩放 663
16.9使用状态栏 665
16.9.1给框架窗口添加状态栏 665
16.9.2 CString类 669
16.10使用编辑框控件 669
16.10.1创建编辑框资源 670
16.10.2创建对话框类 671
16.10.3添加Text菜单项 672
16.10.4定义文本元素 672
16.10.5实现CText类 673
16.11小结 677
16.12练习 678
16.13本章主要内容 678
第17章 存储和打印文档 679
17.1了解序列化 679
17.2序列化文档 680
17.2.1文档类定义中的序列化 680
17.2.2文档类实现中的序列化 681
17.2.3基于CObject的类的功能 683
17.2.4序列化的工作方式 684
17.2.5如何实现类的序列化 685
17.3应用序列化 685
17.3.1记录文档修改 686
17.3.2序列化文档 687
17.3.3序列化元素类 689
17.4练习序列化 693
17.5打印文档 694
17.6实现多页打印 697
17.6.1获取文档的总尺寸 698
17.6.2存储打印数据 698
17.6.3准备打印 699
17.6.4打印后的清除 700
17.6.5准备设备上下文 701
17.6.6打印文档 701
17.6.7获得文档的打印输出 705
17.7小结 705
17.8 练习 705
17.9本章主要内容 706
第18章 编写Windows 8应用程序 707
18.1理解Windows 8应用程序 707
18.2开发WINDOWS 8应用程序 708
18.3 Windows Runtime的概念 709
18.3.1 WinRT名称空间 709
18.3.2 WinRT对象 709
18.4 C++ COMPONENT EXTENSIONS(C++/CX) 710
18.4.1 C+++/CX名称空间 710
18.4.2定义WiinRT类类型 711
18.4.3 Ref类类型的变量 713
18.4.4访问ref类对象的成员 713
18.4.5事件处理函数 714
18.4.6转换ref类引用的类型 714
18.5 XAML 714
18.5.1 XAML元素 715
18.5.2 XAML中的UI元素 716
18.5.3附加属性 719
18.5.4父元素和子元素 719
18.5.5控件元素 719
18.5.6布局元素 720
18.5.7处理UI元素的事件 720
18.6创建Windows 8应用程序 721
18.6.1应用程序文件 721
18.6.2定义用户界面 722
18.6.3创建标题 724
18.6.4添加游戏控件 726
18.6.5创建包含纸牌的网格 727
18.6.6实现游戏的操作 732
18.6.7初始化Mainpage对象 735
18.6.8初始化一副纸牌 736
18.6.9建立cardGrid的子元素 736
18.6.10初始化游戏 738
18.6.11洗牌 740
18.6.12突出显示UI纸牌 741
18.6.13处理翻牌事件 741
18.6.14处理图形事件 743
18.6.15确认赢家 745
18.6.16处理游戏控件的按钮事件 746
18.7缩放UI元素 747
18.8平移 749
18.8.1应用程序的启动动画 749
18.8.2故事板动画 750
18.9小结 752
18.10本章主要内容 752