当前位置:首页 > 工业技术
C++面向对象程序设计  基础、数据结构与编程思想  第4版
C++面向对象程序设计  基础、数据结构与编程思想  第4版

C++面向对象程序设计 基础、数据结构与编程思想 第4版PDF电子书下载

工业技术

  • 电子书积分:17 积分如何计算积分?
  • 作 者:(美)Walter Savitch著;周靖译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2003
  • ISBN:7302075948
  • 页数:598 页
图书介绍:本书是最优秀的C++教材之一。作者结合自己多年的教学经验,根据教学大纲精心设计并编写了书中内容。与此同时,作者还以粗体显示了C++的重要元素,非常适合初学者掌握重要的编程概念。全书共17章,9个附录。在讲解了C++基础知识后,直接引导学生读入函数,控制流程、命名空间、数组、字符串、指针和动态数组递归模板,指针和链接表,派生类以及异常。
《C++面向对象程序设计 基础、数据结构与编程思想 第4版》目录

1.1 计算机系统 1

1.1.1 硬件 1

目录 1

第1章 计算机和C++编程入门 1

概述 1

1.1.2 软件 5

1.1.4 编译器 6

1.1 3高级语言 6

1.1.5 历史回顾 8

自测题 8

1.2.1 算法 9

1.2 编程和问题求解 9

1.2.2 程序设计 11

1.2.4 软件生存期 12

1.2.3 面向对象编程 12

1.3.1 C++语言的起源 13

1.3 C++入门 13

自测题 13

1.3.2 一个C++示范程序 14

1.3.5 简单C++程序的布局 17

1.3.4 编程提示:输入和输出语法 17

1.3.3 陷阱:在n中使用错误的斜杠 17

1.3.7 编译和运行C++程序 19

1.3.6 陷阱:在include文件名前添加一个空格 19

1.3.8 编程提示:让程序运行起来 20

1.4 测试和调试 21

自测题 21

1.4.2 陷阱:错误地假定程序正确 22

1.4.1 程序错误的种类 22

小结 23

自测题 23

自测题答案 24

编程项目 25

2.1.1 变量 26

2.1 变量和赋值 26

第2章 C++基础知识 26

概述 26

预备知识 26

2.1.2 名称:标识符 28

2.1.3 变量声明 29

2.1.4 赋值语句 30

2.1.5 陷阱:未初始化的变量 31

2.1.6 编程提示:使用有意义的名称 32

9.2.1 命名空间和usmg预编译指令 33

2.2.1 使用cout进行输出 33

自测题 33

2.2 输入和输出 33

2.2.2 include预编译指令和命名空间 34

2.2.3 转义序列 36

2.2.5 格式化带小数点的数字 37

2.2.4 编程提示:用\n或endl终止每一个程序 37

2.2.6 用cin进行输入 38

2.2.7 设计输入和输出 39

自测题 40

2.2.8 编程提示:I/O中的行中断 40

2.3.1 int类型和double类型 41

2.3 数据类型和表达式 41

2.3.2 其他数字类型 42

2.3.3 char类型 43

2.3.5 类型的兼容性 44

2.3.4 bool类型 44

2.3.6 算术操作符和表达式 46

自测题 48

2.3.7 陷阱:除法中的整数 48

2.4.1 一个简单的分支机制 49

2.3.8 更多赋值语句 49

2.4 简单控制流程 49

2.4.3 陷阱:错用=来取代= 54

24.2 陷阱:连续的不等式 54

自测题 55

2.4.4 复合语句 55

2.4.5 简单的循环机制 56

2.4.7 编程示例:信用卡余额 60

2.4.6 递增操作符和递减操作符 60

2.4.8 陷阱:无限循环 61

自测题 62

2.5.2 注释 63

2.5 程序风格 63

2.5.1 缩进 63

2.5.3 为常量命名 65

小结 66

自测题 66

自测题答案 67

编程项目 70

3.2 预定义函数 72

第3章 过程抽象和返回一个值的函数 72

概述 72

预备知识 72

3.1 自顶向下设计 72

3.2.1 使用预定义函数 73

3.2.2 强制类型转换 76

3.2.4 陷阱:整数除法丢弃了小数部分 78

3.2.3 强制类型转换的古老形式 78

3.3.1 函数定义 79

自测题 79

3.3 程序员自定义函数 79

3.3.3 陷阱:实参顺序错误 83

3.3.2 另种形式的函数声明 83

3.3.5 再论函数定义的位置 85

3.3 4函数定义语法总结 85

34.1 黑盒的比喻 86

自测题 86

3.4 过程抽象 86

3.4.2 编程提示:选择形参名称 88

3.4.3 案例分析:购买比萨 89

3.4.4 编程提示:使用伪代码 93

3.5.1 函数如同小程序 94

自测题 94

3.5 局部变量 94

3.5.3 全局常量和全局变量 96

3.5.2 编程实例:豌豆试验田 96

3.5.4 传值调用形参是局部变量 98

3.5.5 再论命名空间 99

3.5.6 编程实例:阶乘函数 101

自测题 101

36.1 重载入门 102

3.6 重载函数名称 102

36.2 编程实例;购买比萨(修订版) 104

3.6.3 自动类型转换 106

小结 107

自测题 107

自测题答案 108

编程项目 110

4.1.1 void函数的定义 112

第4章 所有子任务的函数 112

概述 112

预备知识 112

4.1 void函数 112

4.1.2 编程实例:温度换算 114

4.1.3 void函数中的return语句 115

自测题 116

4.2.1 初探传引用调用 117

4.2 传引用调用形参 117

4.2.2 传引用调用详解 119

4.2.3 编程实例:swap_values函数 121

4.2.4 混合的参数列表 122

4.2.5 编程提示:应该使用哪种参数 123

4.2.6 陷阱:疏忽的局部变量 124

自测题 125

4.3.1 由函数来调用函数 126

4.3 使用过程抽象 126

4.3.3 案例分析:超市定价系统 128

4.3.2 前条件和后条件 128

stub和驱动程序 132

自测题 132

4.4 测试和调试函数 132

自测题 135

自测题答案 136

小结 136

编程项目 139

5.1 流和基本文件I/O 142

第5章 I/O流——对象和类入门 142

概述 142

预备知识 142

5.1.2 文件I/O 143

5.1.1 文件之于I/O的重要性 143

5.1.3 类与对象入门 146

5.1.4 编程提示:检查文件是否成功打开 148

5.1.5 文件I/O技术 150

5.1.6 追加到文件(选读) 152

自测题 152

5.1.7 文件名作为输入(选读) 154

5.2.1 用流函数格式化输出 156

5.2 流I/O工具 156

5.2.2 操纵元 159

自测题 160

5.2.3 流作为函数实参 161

5.2.4 编程提示:检查文件尾 163

5.2.5 命名空间的问题 164

5.3 字符I/O 165

5.2.6 编程实例:整理文件格式 165

自测题 165

5.3.1 get和put成员函数 166

5.3.2 putback成员函数(选读) 168

5.3.3 编程实例:检查输入 169

5.3.4 陷阱:输入中不期而遇的’n’ 171

自测题 172

5.3 5eof成员函数 173

5.3.6 编程实例:编辑文本文件 175

自测题 175

5.3.7 预定义的字符函数 176

自测题 178

5.3.8 陷阱:toupper和tolower返回int值 178

5.4.1 流类之间的继承关系 179

5.4 继承 179

5.4.2 编程实例:另一个newline函数 182

5.4.3 函数的默认参数(选读) 183

自测题 184

自测题答案 185

小结 185

编程项目 190

6.1.1 用于异种数据的结构 194

第6章 定义类 194

概述 194

预备知识 194

6.1 结构 194

6.1.3 结构作为函数参数 198

6.1.2 陷阱:结构定义中忘记一个分号 198

6.1.4 编程提示:使用层次化结构 199

6.1.5 对结构进行初始化 200

自测题 201

6.2.1 定义类和成员函数 202

6.2 类 202

6.2.2 公共成员和私有成员 206

自测题 206

自测题 212

6.2.3 编程提示:将所有成员变量变成私有 212

6.2.4 编程提示:定义取值函数和赋值函数 212

6.2.6 编程实例:BankAccount类(版本1) 213

6.2.5 编程提示:将赋值操作符用于对象 213

6.2.7 总结类的一些特征 217

6.2.8 用于初始化的构造函数 218

自测题 218

6.2.9 编程提示:总是包括一个默认构造函数 224

6.2.10 陷阱:无参数构造函数 225

6.3 抽象数据类型 226

自测题 226

6.3.1 用于生成抽象数据类型的类 227

6.3.2 编程实例:类的另一种实现 230

自测题 232

自测题答案 233

小结 233

编程项目 237

7.1.1 布尔表达式求值 239

第7章 更多的控制流程 239

概述 239

预备知识 239

7.1 使用布尔表达式 239

7.1.2 陷阱:将布尔表达式转换成int值 242

自测题 243

自测题 244

7.1.3 能返回布尔值的函数 244

7.2 多路分支 245

7.1.4 枚举类型(选读) 245

7.2.2 编程提示:在嵌套语句中使用花括号 246

7.2.1 嵌套语句 246

7.2.3 多路if-else语句 248

72.4 编程实例:州税 250

自测题 251

7.2.5 switch语句 252

7.2.7 为菜单使用switch语句 255

7.2.6 陷阱:忘记在switch语句中添加break 255

函数调用 256

7.2.8 编程提示::在分支语句中使用 256

7.2.9 块 257

自测题 259

7.2.1 0陷阱:疏忽局部变量 259

7.3.1 while语句回顾 260

7.3 C++循环语句详解 260

7.3.2 再论递增操作符和递减操作符 261

7.3.3 for语句 263

自测题 263

7.3.4 陷阱:for语句中多余的分号 267

自测题 268

7.3.5 应该使用哪种循环 268

7.3.7 break语句 269

7.3.6 陷阱:未初始化的变量和无限循环 269

自测题 270

7.3.8 陷阱:嵌套循环中的break语句 270

7.4.1 求和与求乘积的循环 271

7.4 设计循环 271

7.4.2 终止循环 272

7.4.3 嵌套循环 275

7.4.4 调试循环 278

自测题 278

小结 280

自测题 280

自测题答案 281

编程项目 284

8.1.1 编程实例:一个相等性函数 287

第8章 友元函数和重载操作符 287

概述 287

预备知识 287

8.1 友元函数 287

8.1.2 友元函数 289

自测题 289

8.1.4 编程提示:同时使用成员函数和非成员函数 291

8.1.3 编程提示:定义取值函数和友元函数 291

8.1.5 编程实例:Money类(版本1) 293

8.1 6实现digit_to_int(选读) 297

自测题 298

8.1.7 陷阱:数字常量中的前置零 298

8.1.8 const参数修饰符 299

8.1.9 陷阱:不一致地使用const 300

自测题 302

8.2.1 重载操作符 303

8.2 重载操作符 303

8.2.2 用于自动类型转换的构造函数 306

自测题 306

8.2.3 重载一元操作符 307

自测题 307

8.2.4 重载>>和<< 308

自测题 314

自测题答案 315

小结 315

编程项目 319

9.1.1 ADT回顾 321

第9章 独立编译和命名空间 321

概述 321

预备知识 321

9.1 独立编译 321

9.1.2 案例分析:一个独立编译的类DigitalTime 322

9.1.3 使用#ifndef 329

自测题 331

9.1.4 编程提示:定义其他库 331

9.2 命名空间 332

9.2.2 创建命名空间 333

9.2.3 限定名称 335

自测题 335

9.2.4 命名空间的微妙之处(选读) 336

9.2.5 无名命名空间 337

自测题 337

自测题 341

9.2.7 陷阱:混淆全局命名空间和无名命名空间 341

9.2.6 编程提示:为命名空间选择一个名称 341

小结 342

自测题答案 343

编程项目 344

10.1.1 声明和引用数组 345

10.1 数组入门 345

第10章 数组 345

概述 345

预备知识 345

10.1.4 编程提示:为数组长度使用一个已定义常量 347

10.1.3 陷阱:数组索引总是从零开始 347

10.1.2 编程提示:为数组使用for循环 347

10.1.5 数组在内存中的表示 348

10.1.6 陷阱:数组索引越界 349

自测题 350

10.1.7 初始化数组 350

10.2.1 索引变量作为函数参数 352

10.2 函数中的数组 352

10.2.2 整个数组作为函数参数 353

自测题 353

10.2.3 const参数修饰符 356

10.2.4 陷阱:不一致地使用const参数 357

10.2.6 案例分析:产量图 358

10.2.5 返回数组的函数 358

10.3.1 部分填充数组 367

10.3 数组编程 367

自测题 367

10.3.2 编程提示:不要吝啬形参 369

10.3.3 编程实例:数组搜索 370

10.3.4 编程实例:数组排序 371

自测题 374

10.4.1 类数组 375

10.4 数组和类 375

10.4.2 数组作为类成员 378

自测题 378

10.4.3 编程实例:用于部分填充数组的一个类 379

10.5.1 多维数组基础 381

10.5 多维数组 381

自测题 381

10.5.2 多维数组参数 382

10.5.3 编程实例:二维打分程序 383

自测题 386

10.5.4 陷阱:在数组索引之间使用逗号 386

自测题答案 387

小结 387

编程项目 391

11.1 字符串的一种数组类型 397

预备知识 397

第11章 字符串和向量 397

概述 397

11.1.1 C字符串值和C字符串变量 398

11.1.2 陷阱:为C字符串使用=和= 400

11.1.3 <cstring>中的其他函数 402

自测题 403

11.1.4 C字符串输入和输出 404

11.1.5 C字符串到数字的转换和可靠输入 406

自测题 406

11.2.1 标准类string简介 410

11.2 标准string类 410

11.2.2 string类的I/O 412

11.2.3 编程提示:getline的其他版本 414

自测题 414

11.2.4 陷阱:混合使用“cin>>变量;”和getline 415

11.2.5 用string类进行字符串处理 416

11.2.6 编程实例:回文测试 418

11.2.7 string对象和C字符串之间的转换 421

自测题 421

11.3.1 向量基础知识 422

11.3 向量 422

11.3.3 编程提示:向量赋值具有良好行为 424

11.3.2 陷阱:使用方括号时超出向量长度 424

11.3.4 效率问题 425

自测题答案 426

小结 426

自测题 426

编程项目 428

12.1 指针 430

预备知识 430

第12章 指针和动态数组 430

概述 430

12.1.1 指针变量 431

12.1.2 基本内存管理 436

自测题 436

12.1.4 静态变量和自动变量 437

12.1.3 陷阱:虚悬指针 437

12.1.5 编程提示:定义指针类型 438

12.2.1 数组变量和指针变量 439

12.2 动态数组 439

自测题 439

12.2.2 创建和使用动态数组 440

自测题 443

12.2.3 指针运算(选读) 444

12.2.4 多维动态数组(选读) 445

自测题 445

12.3 类和动态数组 446

12.3.1 编程实例:一个字符串变量类 447

12.3.2 析构函数 450

12.3.3 陷阱:指针作为传值调用参数 451

12.3.4 拷贝构造函数 452

自测题 455

12.3.5 重载赋值操作符 456

自测题答案 458

小结 458

自测题 458

编程项目 460

13.1.1 案例分析:垂直数字 462

13.1 面向任务的递归函数 462

第13章 递归 462

概述 462

预备知识 462

13.1.2 深入递归 467

自测题 468

13.1.3 陷阱:无穷递归 468

13.1.4 用于递归的堆栈 469

13.1.6 递归与迭代 470

13.1.5 陷阱:堆栈溢出 470

13.2.1 返回值的递归函数的泛型 471

13.2 面向值的递归函数 471

自测题 471

13.2.2 编程实例:另一个Powers函数 472

自测题 474

13.3.1 递归设计技术 475

13.3 递归思想 475

13.3.2 案例分析:?叉搜索(递归思想示例) 476

13.3.3 编程实例:一个递归成员函数 482

自测题 484

自测题答案 485

小结 485

编程项目 488

14.1 用于算法抽象的模板 490

预备知识 490

第14章 模板 490

概述 490

14.1.1 函数模板 491

14.1.2 陷阱:编译器的复杂性 494

14.1.3 编程实例:一个泛化的排序函数 495

自测题 495

14.1.5 陷阱:为不恰当的类型使用模板 498

14.1.4 编程提示:如何定义模板 498

14.2.1 类模板的语法 499

14.2 用于数据抽象的模板 499

自测题 499

14.2.2 编程实例:一个数组类 501

自测题 504

自测题答案 505

小结 505

编程项目 507

15.1.1 节点 509

15.1 节点和链表 509

第15章 指针和链表 509

概述 509

预备知识 509

自测题 512

15.1.2 链表 513

15.1.3 在表头插入一个节点 514

15.1.4 陷阱:丢失节点 516

15.1.5 搜索链表 517

15.1 6指针作为迭代器 520

15.1.7 在列表中插入和移除节点 520

15.1.8 陷阱:为动态数据结构使用赋值操作符 523

自测题 523

15.2 一个链表应用程序 523

15.2.1 堆栈 524

15.2.2 编程实例:一个堆栈类 524

自测题 527

自测题答案 528

小结 528

编程项目 529

16.1 继承基础 532

预备知识 532

16.1.1 派生类 532

概述 532

第16章 继承 532

16.1.2 派生类中的构造函数 538

16.1.3 陷阱:使用来自基类的私有成员变量 540

16.1.4 陷阱:私有成员函数根本不会继承 541

16.1.5 protected限定符 541

自测题 543

16.1.6 重定义成员函数 544

16.1.7 重定义与重载的比较 546

16.1.8 访问重定义的基函数 546

16.2 继承细节 547

16.2.1 不继承的函数 547

自测题 547

16.2.2 派生类中的赋值操作符和拷贝构造函数 548

16.2.3 派生类中的析构函数 549

自测题 549

16.3 多态性 550

16.3.1 晚期绑定 550

16.3.2 C++中的虚函数 551

自测题 555

16.3.3 虚函数和扩展类型兼容性 555

16.3.4 陷阱:切片问题 557

16.3.5 陷阱:不使用虚成员函数 558

16.3.6 陷阱:试图对虚成员函数定义不齐全的类进行编译 559

16.3.7 编程提示:虚析构函数 559

小结 560

自测题答案 560

自测题 560

编程项目 563

预备知识 566

概述 566

17.1 异常处理基础 566

第17章 异常处理 566

17.1.1 异常处理的一个玩具式例子 567

自测题 573

17.1.2 定义自己的异常类 573

17.1.3 多个throw和catch 574

17.1.4 陷阱:首先捕捉较具体的异常 576

17.1.5 编程提示:异常类可能微不足道 577

17.1.6 在函数中抛出异常 577

17.1.7 异常规范 579

17.1.8 陷阱:派生类中的异常规范 580

自测题 580

17.2 用于异常处理编程技术 581

17.2.1 抛出异常的时机 581

17.2.3 陷阱:嵌套的try-catch块 582

17.2.4 陷阱:滥用异常 582

17.2.2 陷阱:未捕捉的异常 582

17.2.6 测试可用内存 583

17.2.7 重新抛出异常 583

17.2.5 异常类层次结构 583

小结 584

自测题答案 584

自测题 584

编程项目 585

附录1 C++关键字 586

附录2 操作符的优先级 587

附录3 ASCll字符集 588

附录4 部分库函数 589

附录5 assert语句 592

附录6 内联函数 593

附录7 重载数据索引方括号 594

附录8 this指针 595

附录9 将操作符重载为成员操作符 597

返回顶部