图书介绍

21天学通C++ 原书第7版PDF|Epub|txt|kindle电子书版本下载

21天学通C++ 原书第7版
  • (美)罗奥著;袁国忠译 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:9787115296245
  • 出版时间:2012
  • 标注页数:458页
  • 文件大小:57MB
  • 文件页数:474页
  • 主题词:C语言-程序设计

PDF下载


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

下载说明

21天学通C++ 原书第7版PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 绪论1

1.1 C++简史1

1.1.1与C语言的关系1

1.1.2 C++的优点1

1.1.3 C++标准的发展历程1

1.1.4哪些人使用C++程序2

1.2编写C++应用程序2

1.2.1生成可执行文件的步骤2

1.2.2分析并修复错误2

1.2.3集成开发环境2

1.2.4编写第一个C++应用程序3

1.2.5生成并执行第一个C++应用程序4

1.2.6理解编译错误4

1.3 C++11新增的功能5

1.4总结5

1.5问与答5

1.6作业6

1.6.1 测验6

1.6.2练习6

第2章C+程序的组成部分7

2.1 Hello World程序的组成部分7

2.1.1预处理器编译指令#include7

2.1.2程序的主体——main()8

2.1.3返回值8

2.2名称空间的概念9

2.3 C++代码中的注释10

2.4 C++函数10

2.5使用std::cin和std::cout执行基本输入输出操作12

2.6总结13

2.7问与答13

2.8作业13

2.8.1测验14

2.8.2练习14

第3章 使用变量和常量15

3.1什么是变量15

3.1.1内存和寻址概述15

3.1.2声明变量以访问和使用内存15

3.1.3声明并初始化多个类型相同的变量17

3.1.4理解变量的作用域17

3.1.5全局变量18

3.2编译器支持的常见C++变量类型19

3.2.1使用bool变量存储布尔值20

3.2.2使用char变量存储字符20

3.2.3有符号整数和无符号整数的概念20

3.2.4有符号整型short、 int、 long和long long21

3.2.5无符号整型unsigned short、unsigned int、 unsigned long和unsigned long long21

3.2.6浮点类型float和double21

3.3使用sizeof确定变量的长度22

3.4使用typedef替换变量类型24

3.5什么是常量24

3.5.1字面常量25

3.5.2使用const将变量声明为常量25

3.5.3使用constexpr声明常量26

3.5.4枚举常量26

3.5.5使用#define定义常量27

3.6给变量和常量命名28

3.7不能用作常量或变量名的关键字28

3.8总结29

3.9问与答29

3.10作业30

3.10.1测验30

3.10.2练习30

第4章 管理数组和字符串31

4.1什么是数组31

4.1.1为何需要数组31

4.1.2声明和初始化静态数组32

4.1.3数组中的数据是如何存储的32

4.1.4访问存储在数组中的数据33

4.1.5修改存储在数组中的数据34

4.2多维数组35

4.2.1声明和初始化多维数组36

4.2.2访问多维数组中的元素36

4.3动态数组37

4.4 C风格字符串38

4.5 C++字符串:使用std::string40

4.6总结41

4.7问与答41

4.8作业42

4.8.1测验42

4.8.2练习42

第5章 使用表达式、语句和运算符43

5.1语句43

5.2复合语句(语句块)44

5.3使用运算符44

5.3.1赋值运算符(=)44

5.3.2理解左值和右值44

5.3.3加法运算符(+)、减法运算符(-)、乘法运算符(*)、除法运算符(/)和求模运算符(%)44

5.3.4递增运算符(+++)和递减运算符(--)45

5.3.5前缀还是后缀45

5.3.6相等运算符(==)和不等运算符(!=)47

5.3.7关系运算符48

5.3.8逻辑运算NOT、AND、OR和XOR49

5.3.9使用C++逻辑运算NOT(!)、AND(&&)和OR(||)50

5.3.10按位运算符NOT(~)、AND(&)、OR(|)和XOR(∧)53

5.3.11按位右移运算符(>>)和左移运算符(<<)54

5.3.12复合赋值运算符55

5.3.13使用运算符sizeof确定变量占用的内存量56

5.3.14运算符优先级57

5.4总结58

5.5问与答59

5.6作业59

5.6.1测验59

5.6.2练习59

第6章 控制程序流程60

6.1使用if…else有条件地执行60

6.1.1使用if…else进行条件编程61

6.1.2有条件地执行多条语句62

6.1.3嵌套if语句63

6.1.4使用switchcase进行条件处理66

6.1.5使用运算符?:进行条件处理68

6.2在循环中执行代码69

6.2.1不成熟的goto循环69

6.2.2 while循环70

6.2.3 do…while循环72

6.2.4 for循环73

6.3使用continue和break修改循环的行为75

6.3.1不结束的循环——无限循环75

6.3.2控制无限循环76

6.4编写嵌套循环78

6.4.1使用嵌套循环遍历多维数组79

6.4.2使用嵌套循环计算斐波纳契数列80

6.5总结81

6.6问与答81

6.7作业82

6.7.1测验82

6.7.2练习82

第7章 使用函数组织代码83

7.1为何需要函数83

7.1.1函数原型是什么84

7.1.2函数定义是什么85

7.1.3函数调用和实参是什么85

7.1.4编写接受多个参数的函数85

7.1.5编写没有参数和返回值的函数86

7.1.6带默认值的函数参数87

7.1.7递归函数——调用自己的函数88

7.1.8包含多条return语句的函数89

7.2使用函数处理不同类型的数据90

7.2.1函数重载90

7.2.2将数组传递给函数92

7.2.3按引用传递参数93

7.3微处理器如何处理函数调用94

7.3.1内联函数94

7.3.2 lambda函数96

7.4总结97

7.5问与答97

7.6作业97

7.6.1测验97

7.6.2练习98

第8章 阐述指针和引用99

8.1什么是指针99

8.1.1声明指针99

8.1.2使用引用运算符(&)获取变量的地址100

8.1.3使用指针存储地址101

8.1.4使用解除引用运算符(*)访问指向的数据102

8.1.5将sizeof()用于指针的结果104

8.2动态内存分配105

8.2.1使用new和delete动态地分配和释放内存105

8.2.2将递增和递减运算符(+++和--)用于指针的结果107

8.2.3将关键字const用于指针109

8.2.4将指针传递给函数109

8.2.5数组和指针的类似之处110

8.3使用指针时常犯的编程错误112

8.3.1内存泄露112

8.3.2指针指向无效的内存单元112

8.3.3悬浮指针(也叫迷途或失控指针)113

8.4指针编程最佳实践114

8.4.1检查使用new发出的分配请求是否得到满足115

8.5引用是什么117

8.5.1是什么让引用很有用117

8.5.2将关键字const用于引用118

8.5.3按引用向函数传递参数119

8.6总结119

8.7问与答120

8.8作业121

8.8.1测验121

8.8.2练习121

第9章 类和对象122

9.1类和对象122

9.1.1声明类123

9.1.2实例化对象123

9.1.3使用句点运算符访问成员123

9.1.4使用指针运算符(-﹥)访问成员124

9.2关键字public和private125

9.2.1使用关键字private实现数据抽象126

9.3构造函数127

9.3.1声明和实现构造函数128

9.3.2何时及如何使用构造函数128

9.3.3重载构造函数130

9.3.4没有默认构造函数的类131

9.3.5带默认值的构造函数参数133

9.3.6包含初始化列表的构造函数133

9.4析构函数135

9.4.1声明和实现析构函数135

9.4.2何时及如何使用析构函数135

9.5复制构造函数137

9.5.1浅复制及其存在的问题137

9.5.2使用复制构造函数确保深复制139

9.5.3有助于改善性能的移动构造函数142

9.6构造函数和析构函数的其他用途143

9.6.1不允许复制的类143

9.6.2只能有一个实例的单例类144

9.6.3禁止在栈中实例化的类146

9.7 this指针147

9.8将sizeof()用于类148

9.9结构不同于类的地方150

9.10声明友元150

9.11总结152

9.12问与答152

9.13作业153

9.13.1测验153

9.13.2练习153

第10章 实现继承154

10.1继承基础154

10.1.1继承和派生154

10.1.2 C++派生语法155

10.1.3访问限定符protected157

10.1.4基类初始化——向基类传递参数159

10.1.5在派生类中覆盖基类的方法160

10.1.6调用基类中被覆盖的方法162

10.1.7在派生类中调用基类的方法162

10.1.8在派生类中隐藏基类的方法164

10.1.9构造顺序165

10.1.10析构顺序166

10.2私有继承167

10.3保护继承169

10.4切除问题171

10.5多继承171

10.6总结174

10.7问与答174

10.8 作业174

10.8.1测验174

10.8.2练习174

第11章 多态176

11.1多态基础176

11.1.1为何需要多态行为176

11.1.2使用虚函数实现多态行为177

11.1.3为何需要虚构造函数179

11.1.4虚函数的工作原理——理解虚函数表182

11.1.5抽象基类和纯虚函数184

11.2使用虚继承解决菱形问题186

11.3可将复制构造函数声明为虚函数吗189

11.4总结191

11.5问与答192

11.6作业192

11.6.1测验192

11.6.2练习193

第12章 运算符类型与运算符重载194

12.1 C++运算符194

12.2单目运算符195

12.2.1单目运算符的类型195

12.2.2单目递增与单目递减运算符195

12.2.3转换运算符198

12.2.4解除引用运算符(*)和成员选择运算符(-﹥)199

12.3双目运算符202

12.3.1双目运算符的类型202

12.3.2双目加法与双目减法运算符202

12.3.3实现运算符+=与-=204

12.3.4重载等于运算符(=)和不等运算符(!=)206

12.3.5重载运算符﹤、﹥、﹤=和﹥=207

12.3.6重载复制赋值运算符(=)209

12.3.7下标运算符211

12.4函数运算符operator()214

12.5不能重载的运算符219

12.6 总结219

12.7问与答220

12.8作业220

12.8.1测验220

12.8.2练习220

第13章 类型转换运算符221

13.1为何需要类型转换221

13.2为何有些C++程序员不喜欢C风格类型转换222

13.3 C++类型转换运算符222

13.3.1使用static cast222

13.3.2使用dynamic_ cast和运行阶段类型识别223

13.3.3使用reinterpret cast225

13.3.4使用const cast226

13.4 C++类型转换运算符存在的问题226

13.5总结227

13.6问与答227

13.7作业228

13.7.1测验228

13.7.2练习228

第14章 宏和模板简介229

14.1预处理器与编译器229

14.2使用#defiine定义常量229

14.3使用#define编写宏函数232

14.3.1为什么要使用括号233

14.3.2使用assert宏验证表达式234

14.3.3使用宏函数的优点和缺点235

14.4模板简介235

14.4.1模板声明语法235

14.4.2各种类型的模板声明236

14.4.3模板函数236

14.4.4模板与类型安全238

14.4.5模板类238

14.4.6模板的实例化和具体化239

14.4.7声明包含多个参数的模板239

14.4.8声明包含默认参数的模板240

14.4.9一个模板示例240

14.4.10模板类和静态成员241

14.4.11在实际C++编程中使用模板243

14.5总结243

14.6问与答244

14.7作业244

14.7.1测验244

14.7.2练习244

第15章 标准模板库简介245

15.1 STL容器245

15.1.1顺序容器245

15.1.2关联容器246

15.1.3选择正确的容器246

15.1.4容器适配器247

15.2 STL迭代器247

15.3 STL算法248

15.4使用迭代器在容器和算法之间交互248

15.5 STL字符串类250

15.6总结250

15.7问与答250

15.8作业251

第16章STL string类252

16.1为何需要字符串操作类252

16.2使用 STL string类253

16.2.1实例化和复制STL string253

16.2.2访问std::string的字符内容254

16.2.3拼接字符串256

16.2.4在string中查找字符或子字符串257

16.2.5截短STL string259

16.2.6字符串反转260

16.2.7字符串的大小写转换261

16.3基于模板的STL string实现262

16.4总结262

16.5问与答262

16.6作业263

16.6.1测验263

16.6.2练习263

第17章STL动态数组类264

17.1 std::vector的特点264

17.2典型的vector操作264

17.2.1实例化vector264

17.2.2使用push back()在末尾插入元素266

17.2.3使用insert()在指定位置插入元素267

17.2.4使用数组语法访问vector中的元素269

17.2.5使用指针语法访问vector中的元素270

17.2.6删除vector中的元素271

17.3理解大小和容量272

17.4 STL deque类273

17.5总结275

17.6问与答275

17.7作业276

17.7.1测验276

17.7.2练习276

第18章STL list和forward_list277

18.1 std::list的特点277

18.2基本的list操作277

18.2.1实例化std::list对象277

18.2.2在list开头或末尾插入元素279

18.2.3在list中间插入元素280

18.2.4删除list中的元素282

18.3对list中的元素进行反转和排序283

18.3.1使用list::reverse()反转元素的排列顺序283

18.3.2对元素进行排序284

18.3.3对包含对象的list进行排序以及删除其中的元素286

18.4总结290

18.5问与答290

18.6作业291

18.6.1测验291

18.6.2练习291

第19章STL集合类292

19.1简介292

19.2 STL set和multiset的基本操作293

19.2.1实例化std::set对象293

19.2.2在set或multiset中插入元素294

19.2.3在STL set或multiset中查找元素296

19.2.4删除STL set或multiset中的元素297

19.3使用STL set和multiset的优缺点300

19.4总结303

19.5问与答303

19.6作业304

19.6.1测验304

19.6.2练习304

第20章STL映射类305

20.1 STL映射类简介305

20.2 std::map和std::multimap的基本操作306

20.2.1实例化std::map和std::multimap306

20.2.2在STL map或multimap中307

插入元素307

20.2.3在STL map或multimap中309

查找元素309

20.2.4在STL multimap中查找元素311

20.2.5删除STL map或multimap中的元素312

20.3提供自定义的排序谓词313

20.3.1散列表的工作原理316

20.3.2使用C++11散列表unordered_map和unordered multimap316

20.4总结319

20.5问与答319

20.6作业320

20.6.1 测验320

20.6.2练习320

第21章 理解函数对象321

21.1函数对象与谓词的概念321

21.2函数对象的典型用途321

21.2.1一元函数321

21.2.2一元谓词325

21.2.3二元函数326

21.2.4二元谓词328

21.3总结330

21.4问与答330

21.5作业330

21.5.1测验330

21.5.2练习330

第22章C+ lambda表达式331

22.1 lambda表达式是什么331

22.2如何定义lambda表达式332

22.3一元函数对应的lambda表达式332

22.4一元谓词对应的lambda表达式333

22.5通过捕获列表接受状态变量的lambda表达式334

22.6 lambda表达式的通用语法335

22.7二元函数对应的lambda表达式336

22.8二元谓词对应的lambda表达式337

22.9总结339

22.10问与答340

22.11作业340

22.11.1测验340

22.11.2练习340

第23章STL算法341

23.1什么是STL算法341

23.2 STL算法的分类341

23.2.1非变序算法341

23.2.2变序算法342

23.3使用STL算法343

23.3.1根据值或条件查找元素343

23.3.2计算包含给定值或满足给定条件的元素数345

23.3.3在集合中搜索元素或序列346

23.3.4将容器中的元素初始化为指定值348

23.3.5使用std::generate()将元素设置为运行阶段生成的值349

23.3.6使用for each()处理指定范围内的元素350

23.3.7使用std::transform()对范围进行变换352

23.3.8复制和删除操作354

23.3.9替换值以及替换满足给定条件的元素356

23.3.10排序、在有序集合中搜索以及删除重复元素357

23.3.11将范围分区359

23.3.12在有序集合中插入元素360

23.4总结362

23.5问与答362

23.6作业363

23.6.1测验363

23.6.2练习363

第24章 自适应容器:栈和队列364

24.1栈和队列的行为特征364

24.1.1栈364

24.1.2队列365

24.2使用STL stack类365

24.2.1实例化stack365

24.2.2 stack的成员函数366

24.2.3使用Push()和pop()在栈顶插入和删除元素366

24.3使用STL queue类367

24.3.1实例化queue368

24.3.2 queue的成员函数368

24.3.3使用push()在队尾插入以及使用PoP()从队首删除369

24.4使用STL优先级队列370

24.4.1实例化priority_queue类370

24.4.2 priority_queue的成员函数371

24.4.3使用push()在priority_queue末尾插入以及使用PoP()在 priority_queue开头删除372

24.5总结373

24.6问与答373

24.7作业374

24.7.1测验374

24.7.2练习374

第25章 使用STL位标志375

25.1 bitset类375

25.2使用std::bitset及其成员376

25.2.1 std:bitset的运算符376

25.2.2 std::bitset的成员方法377

25.3 vector〈bool〉378

25.3.1实例化vector〈bool〉378

25.3.2 vector〈bool〉的成员函数和运算符379

25.4总结380

25.5问与答380

25.6作业381

25.6.1测验381

25.6.2练习381

第26章 理解智能指针382

26.1什么是智能指针382

26.1.1常规(原始)指针存在的问题382

26.1.2智能指针有何帮助383

26.2智能指针是如何实现的383

26.3智能指针类型384

26.3.1深复制384

26.3.2写时复制机制385

26.3.3引用计数智能指针386

26.3.4引用链接智能指针386

26.3.5破坏性复制386

26.4深受欢迎的智能指针库389

26.5总结389

26.6问与答389

26.7作业390

26.7.1测试390

26.7.2练习390

第27章 使用流进行输入和输出391

27.1流的概述391

27.2重要的C++流类和流对象391

27.3使用std::cout将指定格式的数据写入控制台392

27.3.1使用std::cout修改数字的显示格式393

27.3.2使用std::cout对齐文本和设置字段宽度394

27.4使用std::cin进行输入395

27.4.1使用std::cin将输入读取到基本类型变量中395

27.4.2使用std::cin:get将输入读取到char数组中396

27.4.3使用std::cin将输入读取到std::string中397

27.5使用std::fstream处理文件398

27.5.1使用open()和close()打开和关闭文件398

27.5.2使用open()创建文本文件并使用运算符《写入文本399

27.5.3使用open()和运算符》读取文本文件399

27.5.4读写二进制文件400

27.6使用std::stringstream对字符串进行转换402

27.7总结403

27.8问与答403

27.9作业403

27.9.1测验403

27.9.2练习404

第28章 异常处理405

28.1什么是异常405

28.2导致异常的原因405

28.3使用try和catch捕获异常406

28.3.1使用catch(…)处理所有异常406

28.3.2捕获特定类型的异常407

28.3.3使用throw引发特定类型的异常408

28.4异常处理的工作原理409

28.4.1 std::exception类411

28.4.2从std::exception派生出自定义异常类411

28.5总结413

28.6问与答413

28.7作业413

28.7.1测验414

28.7.2练习414

第29章 继续前行415

29.1当今的处理器有何不同415

29.2如何更好地利用多个内核416

29.2.1线程是什么416

29.2.2为何要编写多线程应用程序417

29.2.3线程如何交换数据417

29.2.4使用互斥量和信号量同步线程418

29.2.5多线程技术带来的问题418

29.3编写杰出的C++代码418

29.4更深入地学习C++419

29.4.1在线文档419

29.4.2提供指南和帮助的社区420

29.5总结420

29.6问与答420

29.7作业420

附录A二进制和十六进制421

A.1十进制421

A.2二进制421

A.2.1计算机为何使用二进制422

A.2.2位和字节422

A.2.3 1 KB相当于多少字节422

A.3十六进制422

A.4不同进制之间的转换423

A.4.1通用转换步骤423

A.4.2从十进制转换为二进制423

A.4.3从十进制转换为十六进制424

附录BC++关键字425

附录C运算符优先级426

附录D答案427

附录E ASCII码456

热门推荐