图书介绍
零基础学C++ 第2版PDF|Epub|txt|kindle电子书版本网盘下载
![零基础学C++ 第2版](https://www.shukui.net/cover/54/33879353.jpg)
- 杨彦强,刘袁红,王浩等编著 著
- 出版社: 北京:机械工业出版社
- ISBN:9787111373964
- 出版时间:2012
- 标注页数:544页
- 文件大小:150MB
- 文件页数:569页
- 主题词:C语言-程序设计
PDF下载
下载说明
零基础学C++ 第2版PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第一篇 C++基础1
第1章 C++概述1
1.1了解计算机1
1.1.1计算机硬件2
1.1.2计算机软件3
1.2程序设计语言3
1.2.1机器语言3
1.2.2汇编语言4
1.2.3高级语言5
1.2.4数据结构和算法6
1.2.5面向过程的程序设计(POP)6
1.2.6面向对象的程序设计(OOP)6
1.3 C++简介7
1.3.1 C++语言发展历程7
1.3.2 C++语言特点8
1.3.3 C++程序开发基本过程8
1.4 C++开发环境的搭建9
1.4.1 Visual C++ 6开发环境简介9
1.4.2开发步骤10
1.5第一个C++程序11
1.6小结12
1.7上机实践习题12
第2章 开始C++之旅13
2.1 C++程序的结构13
2.1.1注释14
2.1.2编译预处理与新旧标准14
2.1.3主函数14
2.1.4名称空间16
2.1.5 C++语素17
2.2变量与基本类型18
2.2.1变量18
2.2.2整型20
2.2.3浮点型21
2.2.4基本字符型21
2.2.5宽字符型22
2.2.6布尔型22
2.3常量22
2.3.1整型常量和浮点型常量23
2.3.2字符型常量23
2.3.3字符串常量25
2.3.4符号常量26
2.3.5枚举常量27
2.4运算符与表达式28
2.4.1算术运算28
2.4.2逻辑运算30
2.4.3短路表达式30
2.4.4关系运算31
2.4.5大有文章:变量是否为“0”31
2.4.6条件运算32
2.4.7位运算32
2.4.8赋值运算35
2.4.9++和--37
2.4.10逗号表达式38
2.4.11 sizeof运算符与sizeof表达式38
2.4.12运算符的优先级和结合性38
2.5类型转换40
2.5.1赋值转换40
2.5.2表达式中的转换43
2.5.3强制类型转换44
2.5.4函数调用和传递参数时的类型转换45
2.6流程控制语句45
2.6.1 if…else…选择结构45
2.6.2 switch结构47
2.6.3 if…else…结构和switch结构的比较51
2.6.4 for循环结构51
2.6.5 for循环结构嵌套53
2.6.6 while循环结构54
2.6.7 do…while循环结构54
2.6.8循环语句的效率55
2.6.9流程转向控制语句之break55
2.6.10流程转向控制语句之continue56
2.6.11自由转向语句goto56
2.6.12程序中止函数exit()57
2.7小结58
2.8上机实践习题58
第二篇 C++过程开发61
第3章 数组和C风格字符串61
3.1什么是数组61
3.2一维数组62
3.2.1一维数组的声明62
3.2.2初始化一维数组63
3.2.3一维数组应用举例64
3.2.4数组操作注意事项65
3.3 C风格字符串65
3.3.1 C风格字符串的声明65
3.3.2字符数组的cin和cout66
3.3.3 get()函数和getline()函数67
3.3.4 cin与get()/getline()函数的搭配问题68
3.3.5访问C风格字符串中的某个元素69
3.3.6 C风格字符串处理函数69
3.4多维数组71
3.4.1声明一个多维数组71
3.4.2初始化多维数组72
3.4.3多维数组应用举例72
3.4.4多维数组在内存中是如何排列元素的73
3.5小结74
3.6上机实践习题74
第4章 指针和引用76
4.1指针的定义与使用76
4.1.1声明一个指针变量76
4.1.2初始化指针变量79
4.1.3指向指针的指针80
4.1.4指针赋值80
4.2指针的运算81
4.2.1指针与整数的加减81
4.2.2同类型指针间的比较82
4.2.3同类型指针相减82
4.3动态内存分配83
4.3.1使用new动态分配内存83
4.3.2使用delete动态释放及动态申请的内存83
4.3.3使用new申请动态数组83
4.3.4不要使用或释放已经释放的内存块85
4.3.5使用malloc和free动态申请内存85
4.3.6动态内存申请并不一定能成功87
4.4指针和const87
4.4.1禁止改写指针(常量指针或常指针)87
4.4.2禁止改写间接引用88
4.4.3既禁止改写指针,又禁止改写间接引用88
4.5指针与数组88
4.5.1数组名指针88
4.5.2数组元素的指针形式90
4.5.3指向数组的指针90
4.5.4指针数组92
4.6引用95
4.6.1引用的声明95
4.6.2引用的特点95
4.6.3引用的使用限制96
4.6.4其他要说明的问题97
4.7小结97
4.8上机实践习题98
第5章 结构、共用体和链表99
5.1结构99
5.1.1如何定义一个结构99
5.1.2结构变量的声明和使用100
5.1.3结构变量的初始化102
5.1.4结构变量间是否可以相互赋值102
5.1.5结构体变量的sizeof103
5.2共用体105
5.2.1共用体的定义105
5.2.2共用体和结构的区别105
5.2.3共用体变量的声明和初始化107
5.2.4共用体使用举例107
5.2.5共用体的sizeof109
5.3结构数组和共用体数组109
5.3.1结构数组的声明和初始化109
5.3.2共用体数组的声明和初始化110
5.4指向结构的指针111
5.4.1声明一个结构指针111
5.4.2结构指针的初始化112
5.4.3使用指针访问结构成员114
5.5链表114
5.5.1链表的结构115
5.5.2创建链表115
5.5.3链表与数组的区别116
5.5.4链表的遍历和查找116
5.5.5链表的插入和删除118
5.6小结121
5.7上机实践习题122
第6章 用函数合理组织程序124
6.1模块化带来的好处124
6.1.1函数的调用过程124
6.1.2抽象和封装125
6.1.3实现一个函数126
6.2函数定义126
6.2.1函数头127
6.2.2函数体127
6.2.3函数定义补充说明128
6.3函数声明129
6.3.1为什么要进行函数声明129
6.3.2如何声明一个函数130
6.3.3分割程序文件131
6.4函数调用132
6.4.1形参和实参133
6.4.2参数类型转换133
6.4.3值传递134
6.4.4指针传递135
6.4.5引用传递136
6.4.6对3种传递的补充137
6.4.7默认参数调用138
6.4.8 inline函数140
6.5递归141
6.6函数的重载143
6.6.1何时使用函数重载144
6.6.2如何实现函数重载144
6.6.3陷阱:隐式转换导致重载函数出现二义性144
6.7 C++如何使用内存145
6.7.1自动存储(栈存储)145
6.7.2静态存储(编译器预分配)148
6.8作用域与可见域152
6.8.1作用域153
6.8.2可见域153
6.8.3函数的作用域和可见域156
6.9小结156
6.10上机实践习题157
第7章 关于函数的高级专题158
7.1内存使用错误剖析158
7.1.1内存泄露158
7.1.2野指针159
7.1.3试图修改常量160
7.1.4用错sizeof161
7.1.5内存越界访问161
7.1.6变量的初始化162
7.2重申:函数参数传递和返回机制162
7.2.1参数传递时的“副本”162
7.2.2函数返回时的“副本”164
7.3函数与指针165
7.3.1指向函数的指针165
7.3.2 typedef167
7.3.3通过函数指针将函数作为另一个函数的参数168
7.3.4函数指针数组169
7.3.5返回函数指针的函数171
7.3.6带参主函数171
7.4函数与数组172
7.4.1数组名作为函数参数172
7.4.2通过指针得到多于1个的回传值175
7.5函数与结构体、共用体及类对象176
7.5.1 3种参数调用176
7.5.2 3种返回机制177
7.6函数编写的建议177
7.6.1合理使用const177
7.6.2检查输入参数的有效性178
7.6.3函数返回类型的判断179
7.7小结179
7.8上机实践习题179
第三篇 面向对象的C++181
第8章 面向对象技术基础181
8.1面向对象基本概念181
8.1.1类的概念182
8.1.2类是分层的182
8.1.3类和对象的关系183
8.2 C++类的定义183
8.2.1类定义的基本形式183
8.2.2类定义示例184
8.2.3 class和struct185
8.3 C++类的实现185
8.3.1在类定义时定义成员函数185
8.3.2在类定义的外部定义成员函数186
8.4 C++类的使用187
8.4.1声明一个对象188
8.4.2对象的作用域、可见域和生存期189
8.5对象的创建和撤销189
8.5.1构造函数的作用189
8.5.2构造函数可以有参数190
8.5.3构造函数支持重载191
8.5.4构造函数允许按参数默认方式调用192
8.5.5初始化表达式192
8.5.6析构函数194
8.5.7显式调用析构函数195
8.6复制构造函数196
8.6.1复制构造函数调用机制196
8.6.2默认复制构造函数带来的问题198
8.6.3解决方案——显式定义复制构造函数199
8.6.4关于构造函数和复制构造函数201
8.7特殊数据成员202
8.7.1 const数据成员202
8.7.2引用成员204
8.7.3类对象成员206
8.7.4特别说明210
8.7.5 static数据成员210
8.8特殊函数成员212
8.8.1静态成员函数212
8.8.2 const与成员函数214
8.9对象的组织215
8.9.1 const对象215
8.9.2指向对象的指针217
8.9.3对象的大小218
8.9.4 this指针219
8.9.5对象数组220
8.9.6对象链表221
8.10为对象动态分配内存221
8.10.1使用new和delete为单个对象分配/释放动态内存221
8.10.2使用new和delete为对象数组分配/释放动态空间222
8.10.3 malloc和free能否为对象动态申请内存224
8.11小结224
8.12上机实践习题225
第9章 关于对象的高级专题227
9.1类的作用域227
9.2类定义的作用域与可见域229
9.3对象的生存期、作用域和可见域232
9.3.1先定义,后实例化232
9.3.2对象内存的释放与堆内存232
9.4友元232
9.4.1友元的非成员函数233
9.4.2友元的成员函数234
9.4.3友元函数的重载236
9.4.4友元类236
9.4.5友元是否破坏了封装性237
9.5运算符重载238
9.5.1运算符重载规则238
9.5.2以成员函数形式重载运算符239
9.5.3以友元函数形式重载运算符242
9.5.4友元函数形式和成员函数形式的比较245
9.5.5对运算符重载的补充说明246
9.6运算符重载范例247
9.6.1赋值运算符247
9.6.2函数调用运算符250
9.6.3下标运算符251
9.7类型转换253
9.7.1由其他类型向定义类的转换253
9.7.2由自定义类向其他类型的转换255
9.7.3隐式转换带来的二义性257
9.8重载函数选择规则257
9.8.1重载解析258
9.8.2什么是完全匹配258
9.9小结259
9.10上机实践习题259
第10章 继承262
10.1什么是继承262
10.1.1简单示例262
10.1.2继承的层次性264
10.2派生类264
10.2.1 public派生与private派生264
10.2.2 protected成员与protected派生265
10.3多基派生266
10.3.1多基派生的声明和定义266
10.3.2二义性问题267
10.3.3解决方案268
10.4虚基类268
10.4.1共同基类带来的二义性268
10.4.2解决方案270
10.4.3虚基派生二义性与多基派生二义性不同271
10.5派生类的构造函数和析构函数271
10.5.1派生类的构造函数271
10.5.2派生类的析构函数273
10.5.3多基派生类的构造函数和析构函数275
10.5.4虚基派生类的构造函数和析构函数275
10.6分清继承还是组合278
10.6.1继承不是万金油278
10.6.2组合278
10.7基类与派生类对象间的相互转换280
10.7.1类型适应280
10.7.2多基继承时的情况282
10.7.3公共基类282
10.7.4虚基类的情况284
10.8小结284
10.9上机实践习题285
第11章 多态287
11.1多态与虚函数287
11.1.1静态联编287
11.1.2动态联编287
11.1.3为什么需要虚函数287
11.1.4虚函数的声明和定义290
11.2虚函数的访问290
11.2.1对象名访问291
11.2.2指针访问292
11.2.3引用访问292
11.2.4类内访问293
11.2.5在构造函数或析构函数中进行访问294
11.3纯虚函数与抽象类295
11.3.1纯虚函数的声明和定义295
11.3.2抽象类296
11.3.3另一种抽象类:类中只定义了protected型的构造函数299
11.3.4延伸:构造函数能否为private型301
11.3.5虚析构函数302
11.4虚函数引入的二义性305
11.4.1多基派生305
11.4.2共同基类和虚继承307
11.5重载、覆盖与隐藏309
11.5.1重载309
11.5.2覆盖309
11.5.3隐藏310
11.6小结311
11.7上机实践习题312
第四篇 泛型编程315
第12章 模板315
12.1为什么要定义模板315
12.1.1类型参数化315
12.1.2模板的定义317
12.2函数模板318
12.2.1函数模板的使用318
12.2.2隐式实例化318
12.2.3显式实例化320
12.2.4特化321
12.2.5重载322
12.2.6优先级与执行顺序322
12.3类模板324
12.3.1定义类模板324
12.3.2隐式实例化326
12.3.3显式实例化326
12.3.4显式特化327
12.3.5部分特化328
12.3.6重载和优先级328
12.4模板的嵌套329
12.4.1函数成员模板329
12.4.2对象成员模板330
12.5模板参数331
12.6小结332
12.7上机实践习题333
第13章 标准模板库335
13.1理解STL335
13.1.1容器335
13.1.2适配器336
13.1.3迭代器336
13.1.4算法336
13.2使用序列式容器336
13.2.1序列式容器的创建和元素的访问336
13.2.2所有容器都支持的特征338
13.2.3序列式容器中元素的插入和删除339
13.2.4 vector容器344
13.2.5 deque容器344
13.2.6 list容器344
13.3使用关联式容器344
13.3.1 set容器345
13.3.2 multiset容器346
13.3.3 map容器346
13.3.4 multimap容器348
13.4关联式容器支持的成员函数操作349
13.4.1元素的插入349
13.4.2元素的删除352
13.4.3元素的查找与访问354
13.5迭代器355
13.5.1理解迭代器本质355
13.5.2迭代器类型355
13.5.3为什么要定义这么多迭代器357
13.5.4容器中定义的迭代器类型与5种类型的对应358
13.5.5流迭代器358
13.5.6迭代器失效360
13.6泛型算法360
13.6.1什么是函数对象360
13.6.2算法分类361
13.7适配器365
13.7.1容器适配器366
13.7.2迭代器适配器367
13.7.3函数适配器369
13.8小结371
13.9上机实践习题371
第五篇 输入输出处理和编程规范373
第14章 输入输出和文件373
14.1输入输出概述373
14.1.1什么是文件374
14.1.2流374
14.1.3缓冲区375
14.1.4重定向375
14.1.5 3种输入输出机制376
14.2高层I/O377
14.2.1标准输出函数printf377
14.2.2标准输入函数scanf381
14.2.3扫描集384
14.2.4 sprintf函数和sscanf函数385
14.2.5 fprintf函数和fscanf函数386
14.2.6文件访问机制386
14.3流类库390
14.3.1流类库更安全、更高效390
14.3.2流类库层次390
14.4输出流394
14.4.1操作符<<394
14.4.2其他ostream方法395
14.4.3格式状态字397
14.4.4格式控制值的默认值398
14.4.5 flag函数读取和设定格式状态字398
14.4.6使用setf函数和unsetf函数设定格式关键字400
14.4.7设置域宽402
14.4.8填充字符404
14.4.9浮点数输出和显示精度404
14.4.10控制符406
14.5输入流408
14.5.1 >>操作符408
14.5.2输入流与格式状态字408
14.5.3输入流与域宽410
14.5.4使用get函数读取单个字符411
14.5.5使用get函数和getline函数读取C风格字符串413
14.5.6其他istream方法415
14.6流状态417
14.6.1什么是流状态417
14.6.2读取流状态417
14.6.3管理流状态418
14.7重载>>和<<420
14.7.1插入符的重载420
14.7.2抽取符的重载422
14.8文件操作423
14.8.1文件操作基本过程423
14.8.2文件的打开423
14.8.3取消文件和流的关联425
14.8.4文件的读写426
14.8.5文本文件的读写427
14.8.6二进制文件的读写428
14.8.7文件定位指针和随机读取429
14.9字符串流431
14.9.1 strstream类族431
14.9.2 sstream类族434
14.10小结437
14.11上机实践习题437
第15章 名称空间439
15.1什么是名称空间439
15.1.1名称空间范例439
15.1.2定义名称空间440
15.2实体的作用域与可见域441
15.2.1实体可见域442
15.2.2可见域的扩展442
15.2.3 using声明机制443
15.2.4 using声明带来的多重声明问题(二义性)445
15.2.5空间内的屏蔽445
15.2.6先声明,后使用446
15.3名称空间的作用域与可见性447
15.3.1名称空间的定义策略447
15.3.2推荐用法450
15.3.3名称空间嵌套451
15.3.4 using编译指令452
15.3.5未命名的名称空间453
15.4对名称空间的思考454
15.5小结454
15.6上机实践习题454
第16章 异常和错误456
16.1编码时的防错456
16.1.1调用abort函数或exit函数456
16.1.2返回错误标志457
16.2异常机制458
16.2.1关键字throw460
16.2.2异常处理程序460
16.2.3自定义异常对象463
16.2.4有继承关系的类异常464
16.2.5 terminate函数和set_terminate函数466
16.2.6 unexpected函数与set_unexpected函数467
16.2.7标准异常468
16.2.8对unexpected函数的补充470
16.3异常发生时的内存管理471
16.3.1堆栈解退471
16.3.2异常处理机制与函数的不同472
16.3.3构造函数中抛出异常473
16.3.4内存泄露474
16.3.5析构函数中可否抛出异常475
16.4 auto_ptr类476
16.4.1使用auto_ptr类模板477
16.4.2关于auto_ptr的若干问题477
16.5小结478
16.6上机实践习题479
第17章 RTTI和类型转换操作符481
17.1 RTTI机制481
17.1.1 dynamic_cast操作符482
17.1.2 typeinfo类和typeid操作符483
17.1.3补充说明484
17.2类型转换操作符484
17.2.1 const_cast操作符484
17.2.2 static_cast操作符485
17.2.3 reinterpret_cast操作符486
17.3小结486
17.4上机实践习题487
第18章 string字符串类489
18.1为什么要使用string类489
18.2声明一个字符串489
18.3字符串的输入输出491
18.4 string类功能492
18.4.1 string字符串和C风格字符串的转换492
18.4.2赋值和清空492
18.4.3元素删除493
18.4.4元素追加与相加493
18.4.5元素插入494
18.4.6大小和容量494
18.4.7元素存取494
18.4.8字符串比较495
18.4.9提取子串495
18.4.10搜索与查找495
18.5小结496
18.6上机实践习题496
第19章 编码风格497
19.1程序的排版497
19.1.1注释497
19.1.2空行的用法498
19.1.3代码行498
19.1.4空格498
19.1.5缩进与对齐499
19.1.6 &和*的位置499
19.2命名规则499
19.2.1 Windows风格和Unix风格500
19.2.2如何对程序实体命名500
19.3项目文件的组织500
19.3.1模块划分500
19.3.2头文件500
19.3.3定义文件501
19.3.4目录结构501
19.4小结501
19.5上机实践习题502
第20章 程序编译503
20.1程序的编译流程503
20.2预处理504
20.2.1头文件包含505
20.2.2宏505
20.2.3条件编译506
20.2.4 #ifdef、#ifndef与重复包含507
20.2.5使用const代替#define定义常量508
20.2.6 inline与#define的比较509
20.3 VC6调试入门509
20.3.1断点的设置与去除509
20.3.2条件断点510
20.3.3数据断点510
20.3.4消息断点511
20.3.5观察视图511
20.3.6内存视图511
20.3.7变量视图511
20.3.8寄存器视图511
20.3.9调用堆栈视图512
20.3.10反汇编视图512
20.3.11进程控制512
20.4其他调试手段512
20.4.1 Debug模式和Release模式512
20.4.2 assert宏512
20.4.3输出字符串513
20.5小结513
20.6上机实践习题513
第六篇 面试题精选517
第21章 常见面试题517
21.1常见基本知识问答题517
面试题1:简述面向对象的3个基本特征517
面试题2:局部变量能否和全局变量重名517
面试题3:类成员函数的重载、覆盖和隐藏的区别是什么518
面试题4:用变量a给出下面的定义518
面试题5:在C++中,下面的结构是合法的吗?如果是,其作用是什么519
面试题6:在非C++中建类A和B,在哪几种情况下B能隐式转化为A519
面试题7:C++中的空类,默认产生哪些类成员函数519
面试题8:C++有哪些性质(面向对象特点)519
面试题9:子类析构时要调用父类的析构函数吗520
面试题10:什么是引用?声明和使用“引用”要注意哪些问题520
面试题11:将引用作为函数返回值类型的格式及优点有哪些520
面试题12:引用与指针的区别是什么520
面试题13:重载和重写(覆盖)的区别520
面试题14:多态的作用是什么520
面试题15:请指出const与#define相比有何优点521
面试题16:C语言中static关键字的具体作用有哪些521
面试题17:如何判断程序是由C编译程序还是由C++编译程序编译的521
面试题18:关键字const的含义是什么521
21.2世界500强公司的智力问答题522
面试题19:工人分金条522
面试题20:分蛋糕522
面试题21:过桥问题522
面试题22:黑白帽子523
面试题23:电梯与钻石523
面试题24:手电筒传递523
面试题25:烧绳问题524
面试题26:圆的下水道盖子524
面试题27:选建筑师524
面试题28:天平分盐524
面试题29:分不开的钱524
面试题30:小鸟追火车525
面试题31:给红色最大的机会525
面试题32:镜子中的影像525
面试题33:污染的药丸525
面试题34:称出不是标准重量的水525
面试题35:多彩的果冻526
面试题36:电子游戏机526
面试题37:监狱里的囚犯526
面试题38:灯的状态526
面试题39:时针和分针527
面试题40:3个奇数527
面试题41:屋内的灯527
面试题42:找出最重的球528
面试题43:盲人分袜子528
面试题44:烧香计时528
面试题45:平分蜂蜜528
面试题46:猜经理女儿的年龄528
面试题47:两个圆环529
面试题48:喝啤酒529
面试题49:算24点529
面试题50:聪明人529
面试题51:海盗分金币529
面试题52:到底是什么牌530
面试题53:聪明的老板娘531
面试题54:找出不同重量的球531
21.3分析题532
面试题55:分析下面的程序段,显示最后的结果532
面试题56:分析程序最后的输出结果532
面试题57:分析最后输出的结果533
面试题58:求下面函数的返回值533
面试题59:分析最后输出的结果534
面试题60:分析最后输出的结果535
21.4编程题536
面试题61:结果输出到文件536
面试题62:String类的具体实现537
面试题63:链表题,一个链表的节点结构538
面试题64:写一个函数并找出在一个整数数组中第二大的数540
面试题65:字符串的逆序输出541
面试题66:判断操作系统的位数541
面试题67:实现对数组的降序排序542
面试题68:斐波那契数列1、1、2、3、5等,编写程序求第10项543