图书介绍

C++编程思想 第1卷 标准C++导引PDF|Epub|txt|kindle电子书版本网盘下载

C++编程思想 第1卷 标准C++导引
  • (美)Bruce Eckel著;刘宗田等译 著
  • 出版社: 北京:机械工业出版社
  • ISBN:7111108078
  • 出版时间:2002
  • 标注页数:479页
  • 文件大小:24MB
  • 文件页数:509页
  • 主题词:

PDF下载


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

下载说明

C++编程思想 第1卷 标准C++导引PDF格式电子书版下载

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

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

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

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

图书目录

第1章 对象导言1

1.1 抽象的过程1

1.2 对象有一个接口2

1.3 实现的隐藏4

1.4 实现的重用5

1.5 继承:重用接口5

1.5.1 is-a关系和is-like-a关系8

1.6 具有多态性的可互换对象8

1.7 创建和销毁对象11

1.8 异常处理:应对错误12

1.9 分析和设计12

1.9.1 第0阶段:制定计划14

1.9.1.1 任务陈述14

1.9.2 第1阶段:我们在做什么14

1.9.3 第2阶段:我们将如何建立对象16

1.9.3.1 对象设计的五个阶段17

1.9.3.2 对象开发准则18

1.9.4 第3阶段:创建核心18

1.9.5 第4阶段:迭代用例19

1.9.6 第5阶段:进化19

1.9.7 计划的回报20

1.10 极限编程20

1.10.1 先写测试21

1.10.2 结对编程22

1.11 为什么C++会成功22

1.11.1 一个较好的C22

1.11.2 延续式的学习过程23

1.11.3 效率23

1.11.4 系统更容易表达和理解23

1.11.5 尽量使用库23

1.11.6 利用模板的源代码重用24

1.11.7 错误处理24

1.11.8 大型程序设计24

1.12 为向OOP转变而采取的策略24

1.12.1 指导方针25

1.12.1.1 训练25

1.12.1.2 低风险项目25

1.12.1.3 来自成功的模型25

1.12.1.4 使用已有的类库25

1.12.1.5 不要用C++重写已有的代码25

1.12.2 管理的障碍25

1.12.2.1 启动的代价26

1.12.2.2 性能问题26

1.12.2.3 常见的设计错误26

1.13 小结27

第2章 对象的创建与使用28

2.1 语言的翻译过程28

2.1.1 解释器28

2.1.2 编译器29

2.1.3 编译过程29

2.1.3.1 静态类型检查30

2.2 分段编译工具30

2.2.1 声明与定义30

2.2.1.1 函数声明的语法31

2.2.1.2 一点说明31

2.2.1.3 函数的定义31

2.2.1.4 变量声明的语法32

2.2.1.5 包含头文件33

2.2.1.6 标准C++include语句格式33

2.2.2 连接34

2.2.3 使用库文件34

2.2.3.1 连接器如何查找库34

2.2.3.2 秘密的附加模块35

2.2.3.3 使用简单的C语言库35

2.3 编写第一个C++程序35

2.3.1 使用iostream类35

2.3.2 名字空间36

2.3.3 程序的基本结构37

2.3.4 "Hello,World!"37

2.3.5 运行编译器38

2.4 关于输入输出流38

2.4.1 字符数组的拼接39

2.4.2 读取输入数据39

2.4.3 调用其他程序40

2.5 字符串简介40

2.6 文件的读写41

2.7 vector简介42

2.8 小结45

2.9 练习46

第3章 C++中的C47

3.1 创建函数47

3.1.1 函数的返回值48

3.1.2 使用C的函数库49

3.1.3 通过库管理器创建自己的库49

3.2 执行控制语句50

3.2.1 真和假50

3.2.2 if-else语句50

3.2.3 while语句51

3.2.4 do-while语句51

3.2.5 for语句52

3.2.6 关键字break和continue53

3.2.7 switch语句54

3.2.8 使用和滥用goto55

3.2.9 递归55

3.3 运算符简介56

3.3.1 优先级56

3.3.2 自增和自减57

3.4 数据类型简介57

3.4.1 基本内部类型57

3.4.2 bool类型与true和false58

3.4.3 说明符59

3.4.4 指针简介60

3.4.5 修改外部对象62

3.4.6 C++引用简介64

3.4.7 用指针和引用作为修饰符65

3.5 作用域66

3.5.1 实时定义变量67

3.6 指定存储空间分配68

3.6.1 全局变量68

3.6.2 局部变量69

3.6.2.1 寄存器变量69

3.6.3 静态变量70

3.6.4 外部变量71

3.6.4.1 连接71

3.6.5 常量72

3.6.5.1 常量值72

3.6.6 volatile变量73

3.7 运算符及其使用73

3.7.1 赋值73

3.7.2 数学运算符73

3.7.2.1 预处理宏介绍74

3.7.3 关系运算符75

3.7.4 逻辑运算符75

3.7.5 位运算符75

3.7.6 移位运算符76

3.7.7 一元运算符78

3.7.8 三元运算符78

3.7.9 逗号运算符79

3.7.10 使用运算符时的常见问题79

3.7.11 转换运算符80

3.7.12 C++的显式转换80

3.7.12.1 静态转换(static_cast)81

3.7.12.2 常量转换(const_cast)82

3.7.12.3 重解释转换(reinterpret_cast)82

3.7.13 sizeof——独立运算符83

3.7.14 asm关键字84

3.7.15 显式运算符84

3.8 创建复合类型84

3.8.1 用typedef命名别名85

3.8.2 用struct把变量结合在一起85

3.8.2.1 指针和struct87

3.8.3 用enum提高程度清晰度87

3.8.3.1 枚举类型检查88

3.8.4 用union节省内存88

3.8.5 数组89

3.8.5.1 指针和数组91

3.8.5.2 探究浮点格式93

3.8.5.3 指针算术94

3.9 调试技巧96

3.9.1 调试标记96

3.9.1.1 预处理器调试标记97

3.9.1.2 运行期调试标记97

3.9.2 把变量和表达式转换成字符串98

3.9.3 C语言assert()宏98

3.10 函数地址99

3.10.1 定义函数指针99

3.10.2 复杂的声明和定义99

3.10.3 使用函数指针100

3.10.4 指向函数的指针数组101

3.11 make:管理分段编译101

3.11.1 make的行为102

3.11.1.1 宏102

3.11.1.2 后缀规则103

3.11.1.3 默认目标103

3.11.2 本书中的makefile104

3.11.3 makefile的一个例子104

3.12 小结106

3.13 练习106

第4章 数据抽象109

4.1 一个袖珍C库109

4.1.1 动态存储分配112

4.1.2 有害的猜测114

4.2 哪儿出问题115

4.3 基本对象116

4.4 什么是对象120

4.5 抽象数据类型121

4.6 对象细节121

4.7 头文件形式122

4.7.1 头文件的重要性122

4.7.2 多次声明问题123

4.7.3 预处理器指示#define、#ifdef和#endif124

4.7.4 头文件的标准124

4.7.5 头文件中的名字空间125

4.7.6 在项目中使用头文件125

4.8 嵌套结构126

4.8.1 全局作用域解析128

4.9 小结129

4.10 练习129

第5章 隐藏实现132

5.1 设置限制132

5.2 C++的访问控制132

5.2.1 protected说明符134

5.3 友元134

5.3.1 嵌套友元136

5.3.2 它是纯面向对象的吗138

5.4 对象布局138

5.5 类139

5.5.1 用访问控制来修改Stash141

5.5.2 用访问控制来修改Stack141

5.6 句柄类142

5.6.1 隐藏实现142

5.6.2 减少重复编译142

5.7 小结144

5.8 练习144

第6章 初始化与清除146

6.1 用构造函数确保初始化146

6.2 用析构函数确保清除147

6.3 清除定义块149

6.3.1 for循环150

6.3.2 内存分配151

6.4 带有构造函数和析构函数的Stash152

6.5 带有构造函数和析构函数的Stack154

6.6 集合初始化156

6.7 默认构造函数158

6.8 小结159

6.9 练习159

第7章 函数重载与默认参数161

7.1 名字修饰162

7.1.1 用返回值重载162

7.1.2 类型安全连接162

7.2 重载的例子163

7.3 联合166

7.4 默认参数168

7.4.1 占位符参数169

7.5 选择重载还是默认参数170

7.6 小结173

7.7 练习173

第8章 常量175

8.1 值替代175

8.1.1 头文件里的const176

8.1.2 const的安全性176

8.1.3 集合177

8.1.4 与C语言的区别177

8.2 指针178

8.2.1 指向const的指针179

8.2.2 const指针179

8.2.2.1 格式180

8.2.3 赋值和类型检查180

8.2.3.1 字符数组的字面值180

8.3 函数参数和返回值181

8.3.1 传递const值181

8.3.2 返回const值181

8.3.2.1 临时量183

8.3.3 传递和返回地址183

8.3.3.1 标准参数传递185

8.4 类185

8.4.1 类里的const186

8.4.1.1 构造函数初始化列表186

8.4.1.2 内部类型的“构造函数”187

8.4.2 编译期间类里的常量188

8.4.2.1 旧代码中的“enum hack”189

8.4.3 const对象和成员函数190

8.4.3.1 可变的:按位const和按逻辑const192

8.4.3.2 只读存储能力193

8.5 volatile194

8.6 小结195

8.7 练习195

第9章 内联函数197

9.1 预处理器的缺陷197

9.1.1 宏和访问199

9.2 内联函数200

9.2.1 类内部的内联函数200

9.2.2 访问函数201

9.2.2.1 访问器和修改器202

9.3 带内联函数的Stash和Stack205

9.4 内联函数和编译器208

9.4.1 限制209

9.4.2 向前引用209

9.4.3 在构造函数和析构函数里隐藏行为210

9.5 减少混乱210

9.6 预处理器的更多特征211

9.6.1 标志粘贴212

9.7 改进的错误检查212

9.8 小结215

9.9 练习215

第10章 名字控制217

10.1 来自C语言中的静态元素217

10.1.1 函数内部的静态变量217

10.1.1.1 函数内部的静态对象218

10.1.1.2 静态对象的析构函数219

10.1.2 控制连接220

10.1.2.1 冲突问题221

10.1.3 其他存储类型说明符222

10.2 名字空间222

10.2.1 创建一个名字空间222

10.2.1.1 未命名的名字空间223

10.2.1.2 友元224

10.2.2 使用名字空间224

10.2.2.1 作用域解析224

10.2.2.2 使用指令225

10.2.2.3 使用声明226

10.2.3 名字空间的使用227

10.3 C++中的静态成员228

10.3.1 定义静态数据成员的存储228

10.3.1.1 静态数组的初始化229

10.3.2 嵌套类和局部类231

10.3.3 静态成员函数232

10.4 静态初始化的相依性234

10.4.1 怎么办235

10.4.1.1 技术一235

10.4.1.2 技术二237

10.5 替代连接说明240

10.6 小结240

10.7 练习241

第11章 引用和拷贝构造函数244

11.1 C++中的指针244

11.2 C++中的引用244

11.2.1 函数中的引用245

11.2.1.1 常量引用246

11.2.1.2 指针引用246

11.2.2 参数传递准则247

11.3 拷贝构造函数247

11.3.1 按值传递和返回247

11.3.1.1 传递和返回大对象248

11.3.1.2 函数调用栈框架248

11.3.1.3 重入249

11.3.1.4 位拷贝与初始化249

11.3.2 拷贝构造函数251

11.3.2.1 临时对象254

11.3.3 默认拷贝构造函数255

11.3.4 替代拷贝构造函数的方法256

11.3.4.1 防止按值传递257

11.3.4.2 改变外部对象的函数257

11.4 指向成员的指针257

11.4.1 函数259

11.4.1.1 一个例子259

11.5 小结261

11.6 练习261

第12章 运算符重载264

12.1 两个极端264

12.2 语法264

12.3 可重载的运算符265

12.3.1 一元运算符266

12.3.1.1 自增和自减269

12.3.2 二元运算符269

12.3.3 参数和返回值278

12.3.3.1 作为常量通过传值方式返回279

12.3.3.2 返回值优化279

12.3.4 不常用的运算符280

12.3.4.1 operator,280

12.3.4.2 operator->280

12.3.4.3 嵌入的迭代器282

12.3.4.4 operator->284

12.3.5 不能重载的运算符285

12.4 非成员运算符286

12.4.1 基本方针287

12.5 重载赋值符287

12.5.1 operator=的行为288

12.5.1.1 类中指针289

12.5.1.2 引用计数291

12.5.1.3 自动创建operator=295

12.6 自动类型转换296

12.6.1 构造函数转换296

12.6.1.1 阻止构造函数转换297

12.6.2 运算符转换297

12.6.2.1 反身性298

12.6.3 类型转换例子299

12.6.4 自动类型转换的缺陷300

12.6.4.1 隐藏的行为301

12.7 小结302

12.8 练习302

第13章 动态对象创建305

13.1 对象创建305

13.1.1 C从堆中获取存储单元的方法306

13.1.2 operator new307

13.1.3 operator delete307

13.1.4 一个简单的例子308

13.1.5 内存管理的开销308

13.2 重新设计前面的例子309

13.2.1 使用delete void可能会出错309

13.2.2 对指针的清除责任310

13.2.3 指针的Stash310

13.2.3.1 一个测试程序312

13.3 用于数组的new和delete314

13.3.1 使指针更像数组315

13.4 耗尽内存315

13.5 重载new和delete316

13.5.1 重载全局new和delete317

13.5.2 对于一个类重载new和delete318

13.5.3 为数组重载new和delete320

13.5.4 构造函数调用322

13.5.5 定位new和delete323

13.6 小结324

13.7 练习324

第14章 继承和组合326

14.1 组合语法326

14.2 继承语法327

14.3 构造函数的初始化表达式表329

14.3.1 成员对象初始化329

14.3.2 在初始化表达式表中的内部类型329

14.4 组合和继承的联合330

14.4.1 构造函数和析构函数调用的次序331

14.5 名字隐藏333

14.6 非自动继承的函数336

14.6.1 继承和静态成员函数339

14.7 组合与继承的选择339

14.7.1 子类型设置340

14.7.2 私有继承342

14.7.2.1 对私有继承成员公有化342

14.8 protected343

14.8.1 protected继承343

14.9 运算符的重载与继承343

14.10 多重继承345

14.11 渐增式开发345

14.12 向上类型转换346

14.12.1 为什么要“向上类型转换”347

14.12.2 上类型转换和拷贝构造函数347

14.12.3 组合与继承(再论)349

14.12.4 指针和引用的向上类型转换350

14.12.5 危机350

14.13 小结351

14.14 练习351

第15章 多态性和虚函数354

15.1 C++程序员的演变354

15.2 向上类型转换355

15.3 问题356

15.3.1 函数调用捆绑356

15.4 虚函数356

15.4.1 扩展性357

15.5 C++如何实现晚捆绑359

15.5.1 存放类型信息360

15.5.2 虚函数功能图示361

15.5.3 撩开面纱362

15.5.4 安装vpointer363

15.5.5 对象是不同的363

15.6 为什么需要虚函数364

15.7 抽象基类和纯虚函数365

15.7.1 纯虚定义368

15.8 继承和VTABLE368

15.8.1 对象切片370

15.9 重载和重新定义372

15.9.1 变量返回类型373

15.10 虚函数和构造函数375

15.10.1 构造函数调用次序375

15.10.2 虚函数在构造函数中的行为376

15.11 析构函数和虚拟析构函数376

15.11.1 纯虚析构函数378

15.11.2 析构函数中的虚机制379

15.11.3 创建基于对象的继承380

15.12 运算符重载382

15.13 向下类型转换384

15.14 小结386

15.15 练习387

第16章 模板介绍390

16.1 容器390

16.1.1 容器的需求391

16.2 模板综述392

16.2.1 模板方法393

16.3 模板语法394

16.3.1 非内联函数定义395

16.3.1.1 头文件396

16.3.2 作为模板的IntStack396

16.3.3 模板中的常量398

16.4 作为模板的Stash和Stack399

16.4.1 模板化的指针Stash401

16.5 打开和关闭所有权405

16.6 以值存放对象407

16.7 迭代器简介408

16.7.1 带有迭代器的栈415

16.7.2 带有迭代器的PStash417

16.8 为什么使用迭代器422

16.8.1 函数模板424

16.9 小结425

16.10 练习425

附录A 编码风格428

A.1 常规428

A.2 文件名428

A.3 开始和结束注释标记429

A.4 圆括号、大括号和缩排429

A.5 标识符名432

A.6 头文件的包含顺序432

A.7 在头文件上包含警卫432

A.8 使用名字空间433

A.9 require()和assure()的使用433

附录B 编程准则434

附录C 推荐读物441

C.1 C441

C.2 基本C++441

C.2.1 我自己的书441

C.3 深入研究和死角分析442

C.4 分析和设计443

索引445

热门推荐