现代C++程序设计

现代C++程序设计
作 者: Barbara Johnston 曾葆青 丁晓非 曾葆青
出版社: 清华大学出版社
丛编项: 国外经典教材·计算机科学与技术
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: C
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  曾葆青,大连理工大学软件学院地教师,毕业于北京大学。曾留学美国,程序员出身。有多年IT业工作经验和大学教育经验。目前在大连理工大学软件学院主讲C++程序设计、C++高编编程、面向对角程序设计、面向对象的分析和设计、C#.NET、C#高级应用、ASP.NET高级编程、Web Services、数 据结构与算法等多门课程和专题技术。教学内容丰富、生动,深受学生喜爱。主要研究领域为符号计算技术。

内容简介

本书用简单通俗的语言,细腻生动地介绍了C++语言和面向对象程序设计技术。全书图文并茂,易学易懂,真正做到了寓教于乐,是一本难得的C++面向对象设计入门教材。本书特色如下: 深入浅出地讲解了基本概念和各种重点难点,并配合大量趣味生动的案例。 每章开头给出了重要术语、概念和学习内容,每章后面部分给出了程序排错指南。 很多案例既给出了源代码,也列举了常见错误,以及编译器产生的出错信息。 各种技巧方法和注意事项被总结成易于查阅的表格。 课后练习类型丰富,循序渐进,难度和规模适中。 附录部分内容独特,信息丰富。 本书提供全部案例的源代码(可从www.tup.com.cn下载)。 本书有配套的《教师手册》、《实验手册》及教学配套网站(详见前言中的说明)。 本书的读者对象是高校计算机系及软件学院低年级学生、非计算机专业软件工程硕士、计算机专业二学位和双学位、非计算机专业的计算机语言公共选修课不生,以及计算机业余爱好者。

图书目录

第1章C++与软件开发1

欢迎来到C++的世界2

1.1什么是C,什么是C++4

1.1.1C和C++发展简史5

1.1.2C/C++是编译语言5

1.1.3为什么程序员们喜欢C++6

1.2什么是面向对象7

1.2.1C++程序不是自动面向对象的7

1.2.2一个简单的面向对象程序案例7

1.2.3面向对象的软件更受欢迎8

1.3结构化设计与面向对象设计9

1.3.1ATM的结构化方法9

1.3.2ATM的面向对象方法9

1.4软件开发技术简介11

1.4.1如何不编程11

1.5找错12

1.5.1我的程序哪儿出了错12

复习题与作业13

简答题13

作业13

第2章C++入门: 数据类型、变量、操作符、算术、简单输入输出14

软件开发简介15

2.1编程基础15

2.1.1算法设计15

2.1.2走成功编程之路17

2.1.3练习: 如何给猫洗澡17

2.1.4三分原则18

2.1.5如何编程19

2.2术语及项目的建立19

2.2.1项目的建立步骤20

2.3C++程序的一般格式21

2.3.1Hello World!程序21

2.3.2注释21

2.3.3预处理指令22

2.3.4main函数22

2.3.5函数首行22

2.3.6C++语句23

2.3.7气象信息23

2.3.8空白字符与C++灵活的编程风格24

2.3.9语法与编译错误25

2.3.10C++关键字26

2.3.11大小写敏感27

2.3.12好的编程风格27

2.3.13坚持好的风格27

2.3.14关于程序中的注释28

2.4程序与数据: 球与球拍28

2.5C++中的数据类型29

2.5.1物品架=内存,容器=数据类型,标签=变量名30

2.5.2数据类型修饰符31

2.5.3找错: 整数有多大31

2.6C++中的变量声明32

2.6.1C++中的命名规则33

2.6.2在哪里声明变量33

2.7C++中的操作符34

2.7.1操作的优先级34

2.7.2赋值操作符35

2.7.3算术操作符36

2.7.4自增量和自减量操作符41

2.7.5累计操作符42

2.7.6C++中的其他操作符43

2.8其他话题: #define、const和数据类型转换43

2.8.1#define43

2.8.2const修饰符44

2.8.3const优于#define吗45

2.8.4数据类型转换46

2.9键盘输入和屏幕输出48

2.10练习48

2.10.1找错: 赋值操作的摆放位置48

2.10.2计算圆柱体的体积49

2.10.3求余和距离换算50

2.10.4将字符数据表示为十进制、十六进制、八进制数,流格式化51

复习题与作业51

简答题51

程序改错题52

代码阅读53

编程题54

第3章控制语句和循环55

判断,还是判断56

3.1关系操作符和逻辑操作符56

3.1.1表达式求值和操作符优先级57

3.2if语句59

3.2.1if else语句60

3.2.2if语句中的括号错误61

3.2.3if—else if—else语句62

3.2.4低效率编程方法64

3.2.5if else: This Old Man编程举例65

3.2.6嵌套if else语句66

3.2.7“?”操作符67

3.3switch语句68

3.3.1找错: 不要忘了break69

3.4循环语句概述70

3.4.1加括号还是不加括号70

3.4.2无法跳出无穷循环71

3.5for循环71

3.5.1不要更改循环指标72

3.5.2for循环举例73

3.6while循环74

3.6.1while循环举例75

3.7do while循环76

3.7.1do while举例77

3.8排除错误79

3.8.14种常见错误79

3.8.2找错: 循环无法中止80

3.8.3找错: 分号和括号82

3.8.4找错: 放错位置的else、非法else、文件不完整错误83

3.8.5调试程序84

3.9总结84

3.9.1缩进原则86

3.10练习86

3.10.1时间转换87

3.10.2数89

3.10.3输出图案90

复习题与作业92

简答题92

找错题: 编译错误93

找错题: 运行期错误93

代码阅读95

编程题95

第4章指针、地址、间接寻址操作符97

泊车与指针98

4.1指针的重要性98

4.2变量与内存98

4.2.1sizeof操作符99

4.2.2分配内存100

4.2.3计算机内存与十六进制数101

4.3取地址操作符&102

4.4指针104

4.4.1指针与取地址操作符104

4.4.2小红帽与白宫106

4.4.3指针与间接寻址操作符106

4.4.4指针类型混用109

4.5指针有什么用110

4.5.1C++中的函数只返回一个值110

4.5.2高效处理大数据结构、数组、类111

4.6总结112

4.6.1指针: 早学,勤练113

4.7练习113

4.7.1问候与指针113

4.7.2“This Old Man”与指针114

4.7.3金字塔的体积与指针115

复习题与作业116

简答题116

代码阅读116

找错题117

编程题118

第5章函数第I部分: 基本概念119

盖房子与开发软件120

5.1C++中的函数120

5.1.1使用函数之前120

5.1.2有了函数以后121

5.1.3使用函数有很多优点122

5.2函数的基本格式122

5.2.14个简单函数例子123

5.2.2调用函数与被调函数124

5.3写函数的要求125

5.3.1计算年龄125

5.3.2函数原型126

5.3.3函数调用127

5.3.4函数首行与函数体127

5.3.5传值调用129

5.3.6再看一个例子130

5.3.7回顾函数的一般形式132

5.3.8找错: 类型失配133

5.3.9找错: 调用语句中的数据类型134

5.3.10函数使用要求与C++库135

5.4局部变量、静态变量、全局变量135

5.4.1局部变量136

5.4.2找错: 忘记声明变量136

5.4.3静态变量137

5.4.4全局变量138

5.4.5全局变量是危险的139

5.4.6找错: 全局变量y1和math.h139

5.5指针与函数141

5.5.1传值调用复习141

5.5.2函数返回两个值142

5.5.3指针复习142

5.5.4传引用调用: 将变量地址传给函数143

5.6总结145

5.7练习146

5.7.1素数146

5.7.2随机数150

5.7.3时间转换151

5.7.4猫和狗152

复习题与作业155

简答题155

代码阅读156

程序找错题157

编程题157

第6章数组159

跑得更快,跳得更高160

6.1使用单数据变量160

6.2数组基础161

6.2.1C++中的数组下标从零开始162

6.2.2数组不被自动初始化162

6.2.3初始化一维数组162

6.2.4for循环与数组163

6.3数组的伴随指针165

6.3.1数组指针165

6.4一维数组和函数166

6.4.1数组与数组指针167

6.4.2向函数传递一维数组167

6.4.3求数组元素的平均值168

6.4.4找错: 不能从函数中“返回”数组169

6.5字符数组172

6.5.1字符数组的初始化173

6.5.2空字符173

6.5.3输入字符串175

6.5.4读取数值和字符数据181

6.5.5C++中的字符串函数183

6.6多维数组184

6.6.1二维数组的初始化185

6.6.2嵌套for循环和二维数组186

6.6.3二维数组的应用: 水电杂费计算程序186

6.7多维数组与函数188

6.7.1重新设计水电杂费计算程序188

6.7.2白雪公主: 用二维数组存储姓名190

6.8数组下标越界190

6.8.1数组下标越界等于灾难192

6.9从文件中读数据192

6.10总结192

6.11练习194

6.11.1常用单词194

6.11.2气象信息195

复习题与作业199

简答题199

找错题: 编译错误199

找错题: 运行期错误200

编程题201

第7章用户定义的数据类型、结构与枚举204

建城堡205

7.1用户定义的数据类型205

7.1.1将数据分组205

7.1.2结构与枚举206

7.2结构206

7.2.1数据类型基本概念回顾206

7.2.2创建并声明结构207

7.2.3结构说明208

7.2.4无名结构209

7.3访问结构成员210

7.3.1方框图210

7.3.2访问结构成员210

7.4结构数组213

7.4.1结构数组举例213

7.5结构中的结构216

7.5.1使用了时间结构的竞赛程序216

7.5.2嵌套了两个结构的结构217

7.6复制结构219

7.7结构与函数220

7.7.1时间结构举例221

7.7.2求线段的中点222

7.8传引用调用: 将结构地址传递给函数223

7.8.1函数与指针: 简要回顾223

7.8.2结构变量的赋值与返回225

7.8.3右箭操作符与点操作符226

7.8.4程序员的捷径227

7.8.5编程案例: 观鸟228

7.9结构数组与函数230

7.9.1底线230

7.9.2举例: Student结构数组231

7.10枚举数据类型232

7.10.1通过枚举变量创建编号序列233

7.10.2枚举变量: 赋值与比较235

7.10.3枚举变量找错: 选择枚举值要谨慎238

7.10.4举例: 数硬币239

7.10.5枚举变量的输入与输出240

7.11枚举类型与函数242

7.11.1举例: 光学器件与错误代码243

7.12多文件程序245

7.13练习245

7.13.1计算时间245

7.13.2扑克牌247

7.13.3趣味狗秀248

复习题与作业251

简答题251

找错: 编译错误252

找错: 运行期错误253

编程题254

第8章函数第II部分: 高级概念256

走进新世界257

8.1函数复习257

8.1.1基本要求257

8.1.2传值调用257

8.1.3调用函数与被调函数259

8.1.4传引用调用: 向函数传递变量地址259

8.1.5全局变量与函数260

8.1.6函数传递数据的4种方法261

8.2利用引用参数的传引用调用262

8.2.1通过引用参数进行函数的传引用调用262

8.2.2引用变量数组269

8.3函数重载270

8.3.1在过去的C时代270

8.3.2函数重载271

8.4可变长参数表函数273

8.4.1画线程序274

8.4.2参数顺序275

8.4.3找错: 函数重载278

8.4.4不同类型的重载函数280

8.5内联函数281

8.6总结282

复习题与作业282

简答题282

找错题: 编译错误283

找错题: 运行期错误285

编程题287

第9章类与对象290

打蜡291

9.1面向对象的原则和定义291

9.1.1简介291

9.1.2面向对象语言的基本原则293

9.1.3对象存在于生活中294

9.1.4对象定义295

9.2类与对象296

9.2.1面向对象分析: 特征、行为和功能296

9.2.2面向对象设计297

9.2.3结构化网球程序298

9.2.4类的声明299

9.2.5网球类300

9.2.6如何给数据成员赋值302

9.3定义成员函数305

9.3.1两种不同格式305

9.3.2举例: 球体类305

9.4类的构造函数308

9.4.1数据成员的初始化308

9.4.2构造函数309

9.4.3举例: 构造函数与时钟310

9.4.4构造函数注意事项312

9.4.5举例: 两个日期312

9.5析构函数315

9.6一个简单例子316

9.6.1学习难点316

9.6.2举例: Gadgets程序316

9.6.3找错: 与类相关的常见错误320

9.7对象数组325

9.7.1PhoneList对象数组325

9.7.2对象数组和扑克牌328

9.8操作符重载与对象330

9.8.1一元操作符重载331

9.8.2增量/减量操作符的前缀形式与后缀形式332

9.8.3二元操作符重载333

9.9指针与类339

9.9.1举例340

9.10总结346

9.10.1结构与类的比较347

9.11练习348

9.11.1足球运动员348

复习题与作业353

简答题353

找错题: 编译错误353

找错题: 运行期错误356

编程题358

第10章类之间的关系360

开心时刻361

10.1对象模型和类关系361

10.2使用C++的类362

10.2.1输入输出流类iostream362

10.2.2C++字符串类362

10.2.3C++数值类362

10.2.4使用名字空间std363

10.2.5名字空间举例363

10.3“有”关系和“使用”关系365

10.3.1例1: 顾客与收银员365

10.3.2例2: 掷色子372

10.3.3例3: 教练的秒表376

10.3.4例4: 可乐零售机379

10.4总结387

作业387

第11章继承与虚函数392

家长与孩子393

11.1为什么继承如此重要393

11.1.1举例: 计数器类393

11.1.2答案是继承395

11.2继承基础395

11.2.1举例: Counter与NewCounter395

11.2.2受保护的成员399

11.2.3雇员、经理、执行总裁401

11.3存取说明符的特殊用法408

11.4多重继承410

11.5继承、构造函数和析构函数410

11.5.1复习构造函数和析构函数410

11.5.2基类和派生类的构造函数411

11.5.3基类和派生类的析构函数411

11.5.4基类和派生类构造函数的参数传递412

11.5.5找错: 继承419

11.6继承举例420

11.6.1动物园421

11.6.2洗牌与发牌424

11.6.3面向对象程序设计425

11.6.4类声明427

11.7多态与虚函数434

11.7.1多态: 一个界面,多种形式434

11.7.2什么是虚函数435

11.7.3纯虚函数437

11.7.4虚函数的应用438

11.8总结443

复习题与作业443

简答题443

编程题444

第12章高级C++编程446

冰山的启示447

12.1动态内存分配447

12.1.1概述447

12.1.2new和delete操作符448

12.1.3如果new操作失败,会出什么事451

12.2星球大战452

12.2.1为二维和三维数组分配内存452

12.2.2在函数之间多次传递地址457

12.3异常处理458

12.3.1举例459

12.3.2new操作符的异常处理461

12.4微软基础类库(MFC)462

12.4.1简述462

12.4.2快速构建一个会发声的Windows应用程序463

12.5JavaTM程序设计语言465

12.5.1JavaTM是没有指针的C++465

12.5.2Java版“Hello World”466

12.6总结: 模板、标准模板库、友元466

12.6.1cout<<"\n再见!";467

附录AVisual C++使用入门468

附录BC++关键字480

附录CC++中的操作符492

附录DASCII码493

附录E位、字节、内存及十六进制表示法497

附录F文件输入输出502

附录GC++的string类515

附录H多文件程序524

附录I键盘输入和屏幕输出532

附录JMicrosoft Visual C++调试工具544

附录K例子程序索引552

参考文献559

词汇表560