图书介绍

零基础学C++ 第2版PDF|Epub|txt|kindle电子书版本网盘下载

零基础学C++ 第2版
  • 杨彦强,刘袁红,王浩等编著 著
  • 出版社: 北京:机械工业出版社
  • ISBN:9787111373964
  • 出版时间:2012
  • 标注页数:544页
  • 文件大小:150MB
  • 文件页数:569页
  • 主题词:C语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

零基础学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

热门推荐