C++程序设计:现代方法.pdf

C++程序设计:现代方法.pdf
 

书籍描述

内容简介
本书不是一本百科全书式的C++教程,更不是一本写给有编程经验的人看的C++书。如果你想学C++,但没有太多编程经验,而且十分发愁去看那些厚得要命,大部分内容不知所云,更不知道何年何月才用得上的C++“砖头书”,别着急,就看这本吧!
本书篇幅适中,写得又简单通俗,涵盖了C++编程的所有重要概念。另外,我们得提一提本书作者Alexander Allain,他是月访问量超百万的著名C\C++教程站Cprogramming.com的创建者,拥有在哈佛大学讲授C++编程的一线教学经验。本书就是他结合多年教学心得和大量读者反馈,为普通C++初学者登堂入室特意编写的一本全新教程,可以帮助你迅速成长为一名优秀的、受欢迎的C++程序员。
作者真正了解每一位C++编程学习者的需求,了解初学者起步阶段的困惑和纠结。因此,本书由浅入深、循序渐进、步步为营,讲述了编程过程的每一个环节,揭示了编程之路中可能遇到的各种“坑”。以下内容是本书特有的教学思想和方法的体现。
从编程所需的工具开始讲起,耐心教你怎么使用
清晰解释变量、循环、函数等最基本的编程概念
手把手示范怎么把头脑中的想法转换成C++代码
C++的指针不好理解,但本书会给你最清晰明白的解释
字符串、文件I/O、数字、引用……纷至沓来
C++中的类,以及类的设计
面向C++的特有编程模式
使用C++进行面向对象编程
数据结构和标准模板库(STL)
习题和75个课后练习巩固你对重要概念和知识点的理解

编辑推荐
作者两度荣获哈佛大学Top Teaching Fellow
数百万月访问量C\C++教程网站提供支持
体现C++编程的现代观点,有效解决实际问题

媒体推荐
亚马逊读者评论:
“作为一个多年来习惯于Fortran编程的C++编程新手,我认为本书内容简明扼要。读者只需从网上下载软件,然后即可按自己的节奏完成书中练习。”
“我对C有一定的了解,因此理所当然地会很容易看懂本书内容。但是,当我真正开始阅读它,才惊喜地发现,它让我对编程有了重新的认识,真正充分理解了C与C++编程。”
“我是一个IT培训师,之前针对C++为儿子买了3本书,而目前为止我认为本书是组织结构最好的一本学习用书。我有30多年学习C的经历。本书从常见的语言特性讲起,简单流畅地过渡到对象,并介绍了鲜见于其他同类图书的模板、文件I/O、格式化I/O和命令行参数等内容。”
“本书并非是内容全面的大部头著作,但其内容阐述真的很棒!……指针是语言中非常晦涩难懂的部分,也是我之前常常存有困惑的内容,而本书对指针的介绍堪称完美。……无论你之前是否具有编程经验,本书绝对对你大有帮助!”

作者简介
作者简介:
F. Alexander Allain 知名云存储创业公司Dropbox软件工程师、资深C++程序员,在哈佛大学工程与应用科学学院有多年一线教学经验(重点围绕C、C++、Scheme讲授计算机科学基础课程)。另外,他还是知名编程网站Cprogramming.com的创建者与维护者,上面关于C和C++的教程帮助了全球数百万的程序员。

译者简介:
赵守彬
2011年毕业于河北理工大学网络工程专业,后从事Android平台游戏和应用开发,擅长C/C++、Java等,目前从事基于cocos2d-x的手游开发。

陈园军
毕业于南京大学计算机系,硕士学历,微博账号“NJU陈小坏”。主要从事嵌入式系统研究,有多年的C++开发经验,关注开源社区和云计算等领域,对新技术有强烈的探索欲。他常年混迹于字幕翻译论坛,常读书,闲书、技术皆可,不求甚解,只贪欢愉,最大的爱好非科幻莫属。

马兴旺
湖南大学毕业,中国计算机学会YOCSEF委员,证通电子股份有限公司高级工程师,从事支付安全工作。

目录
第一部分 进入C++的世界
第1章 简介和环境搭建  3
1.1  什么是编程语言  3
1.2  C和C++之间的不同之处  3
1.3  学习C++之前,是否需要先了解C  3
1.4  成为程序员,是否需要懂数学  4
1.5  术语  4
1.5.1  编程  4
1.5.2  可执行文件  4
1.6  编辑和编译源文件  4
1.7  关于示例源代码  5
1.8  Windows  5
1.8.1  第1步:下载Code::Blocks  5
1.8.2  第2步:安装Code::Blocks  5
1.8.3  第3步:运行Code::Blocks  6
1.8.4  错误调试  9
1.8.5  使用Code::Blocks的原因  11
1.9  Macintosh  11
1.9.1  Xcode  12
1.9.2  安装Xcode 5  12
1.9.3  运行Xcode  12
1.9.4  用Xcode创建第一个C++
程序  12
1.9.5  安装Xcode 6 beta  16
1.9.6  运行Xcode  16
1.9.7  用Xcode创建第一个C++
程序  17
1.9.8  错误调试  20
1.10  Linux  21
1.10.1  步骤1:安装g++  21
1.10.2  步骤2:运行g++  22
1.10.3  步骤3:运行你的程序  22
1.10.4  步骤4:安装文本编辑器  23
1.10.5  配置nano  23
1.10.6  使用nano  23
第2章 C++基础  27
2.1  C++简介  27
2.1.1  最简单的C++程序  27
2.1.2  程序无法运行的原因  29
2.1.3  C++程序的基本结构  30
2.2  为程序添加注释  30
2.3  像程序员一样思考,创建可复用的
代码  31
2.4  痛并快乐着的练习  32
2.5  问答题  32
2.6  实践题  33
第3章 用户交互和变量  34
3.1  变量  34
3.1.1  C++中的变量声明  34
3.1.2  使用变量  34
3.1.3  程序闪退的处理方法  35
3.1.4  修改、使用和比较变量  36
3.1.5  加减1的简写  36
3.2  变量的使用和滥用  38
3.2.1  C++中声明变量的常见错误  38
3.2.2  区分大小写  39
3.2.3  变量命名  39
3.3  字符串存储  40
3.4  基本类型的存储解析  42
3.5  问答题  43
3.6  实践题  44
第4章 if语句  45
4.1  if的基础语法  45
4.2  表达式  46
4.2.1  truth  47
4.2.2  布尔型  48
4.3  else语句  48
4.4  else-if  49
4.5  字符串比较  49
4.6  逻辑运算符在条件语句上的有趣应用  50
4.6.1  逻辑非  50
4.6.2  逻辑与  51
4.6.3  逻辑或  51
4.6.4  综合表达式  52
4.6.5  逻辑表达式示例  53
4.7  问答题  54
4.8  实践题  54
第5章 循环  55
5.1  while循环  55
5.2  for循环  57
5.2.1  变量初始化  57
5.2.2  循环条件  57
5.2.3  变量更新  57
5.3  do-while循环  58
5.4  控制循环  59
5.5  嵌套循环  61
5.6  选择合适的循环  62
5.6.1  for循环  62
5.6.2  while循环  62
5.6.3  do-while循环  63
5.7  问答题  64
5.8  实践题  64
第6章 函数  66
6.1  函数语法  66
6.2  局部变量和全局变量  68
6.2.1  局部变量  68
6.2.2  全局变量  69
6.2.3  有关全局变量的警告  70
6.3  使函数对调用有效  71
6.3.1  函数定义和声明  71
6.3.2  函数原型的应用示例  72
6.4  把程序拆分成函数  73
6.4.1  当需要重复代码时  73
6.4.2  使代码更加易读  73
6.5  命名和重载函数  73
6.6  函数概述  74
6.7  问答题  74
6.8  实践题  75
第7章 如何解决问题  76
7.1  只需判断数被除时有无余数  78
7.2  效率和安全的简单说明  79
7.3  不知道算法的情况下的解决方案  80
7.4  实践题  82
第8章 switch-case和枚举  83
8.1  比较switch-case和if-else  85
8.2  使用枚举创建简单类型  86
8.3  问答题  87
8.4  实践题  88
第9章 随机  89
9.1  获得随机数  90
9.2  bug和随机数  92
9.3  问答题  92
9.4  实践题  93
第二部分 数据处理
第10章 数组  96
10.1  数组的基础语法  96
10.2  数组使用示例  97
10.2.1  使用数组存储排序  97
10.2.2  用多维数组表示网格  98
10.3  使用数组  98
10.3.1  数组和for循环  98
10.3.2  将数组传递给函数  99
10.3.3  注销数组的末尾  101
10.4  数组排序  101
10.5  问答题  105
10.6  实践题  106
第11章 结构体  107
11.1  关联多个值  107
11.1.1  语法  107
11.1.2  传递结构体变量  109
11.2  问答题  111
11.3  实践题  112
第12章 指针简介  113
12.1  忘记之前对指针的认知  113
12.2  指针的概念以及关注指针的原因  113
12.3  内存的概念  114
12.3.1  变量与地址  115
12.3.2  内存布局  116
12.4  指针的其他优点(和缺点)  117
12.5  问答题  118
12.6  实践题  119
第13章 使用指针  120
13.1  指针的语法  120
13.2  指针的指向:变量的地址  121
13.3  未初始化指针与空指针  125
13.4  指针和函数  125
13.5  引用  128
13.6  问答题  129
13.7  实践题  130
第14章 动态内存分配  131
14.1  获得更多的新内存  131
14.1.1  运行内存不足  132
14.1.2  引用和动态分配  132
14.2  指针和数组  132
14.3  多维数组  134
14.4  指针运算  135
14.4.1  理解二维数组  136
14.4.2  指向指针的指针  137
14.4.3  指向指针的指针与二维
数组  138
14.5  盘点指针  139
14.6  问答题  140
14.7  实践题  141
第15章 数据结构简介与链表  142
15.1  指针和结构体  144
15.2  创建一个链表  145
15.2.1  第一轮  146
15.2.2  第二轮  147
15.3  遍历链表  148
15.4  盘点链表  150
15.5  问答题  152
15.6  实践题  153
第16章 递归  155
16.1  如何看待递归  155
16.2  递归和数据结构  157
16.3  循环和递归  159
16.4  栈  161
16.4.1  栈的力量  163
16.4.2  递归的缺点  164
16.4.3  调试栈溢出  164
16.4.4  性能  166
16.5  盘点递归  166
16.6  问答题  167
16.7  实践题  167
第17章 二叉树  169
17.1  在现实世界中使用二叉树  184
17.2  问答题  186
17.3  实践题  187
第18章 标准模板库  188
18.1  vector,大小可变的数组  189
18.1.1  vector的方法调用  190
18.1.2  vector的其他功能  190
18.2  map  191
18.3  迭代器  192
18.4  盘点STL  195
18.5  进一步学习STL  196
18.6  问答题  196
18.7  实践题  197
第19章 更多关于字符串的内容  198
19.1  读入字符串  198
19.2  字符串长度和访问单个元素  200
19.3  字符串搜索与子字符串  200
19.4  通过引用传递  202
19.4.1  const传播  203
19.4.2  const和STL  204
19.5  问答题  206
19.6  实践题  206
第20章 使用Code::Blocks进行调试  208
20.1  踏上调试之旅  209
20.2  设置断点  211
20.2.1  调试崩溃问题  216
20.2.2  强行进入一个“悬停”
程序  219
20.2.3  修改变量  223
20.2.4  总结  223
20.3  实践题  223
20.3.1  问题1:指数问题  223
20.3.2  问题2:相加问题  224
20.3.3  问题3:斐波那契程序的
bug  225
20.3.4  问题4:列表的错误读取
和错误输出  225
第三部分 编写大规模程序
第21章 将程序分解  228
21.1  理解C++的构建过程  228
21.1.1  预处理  228
21.1.2  编译  230
21.1.3  链接  230
21.1.4  把编译和链接分开的原因  231
21.2  如何把程序分开到不同的文件中  231
21.2.1  第一步:将声明和定义分
开  231
21.2.2  第二步:找出哪些函数需
要共享出去  232
21.2.3  第三步:把共用的函数移
到新的文件中  232
21.2.4  看一个完整的例子  233
21.2.5  关于头文件其他要注意的
地方  237
21.2.6  在开发环境中处理多个源
文件  237
21.3  问答题  240
21.4  实践题  240
第22章 程序设计方法介绍  241
22.1  冗余代码  241
22.2  假定数据是如何存储的  242
22.3  设计和注释  244
22.4  问答题  245
第23章 隐藏结构化数据的表示  246
23.1  问答题  250
23.2  实践题  250
第24章 类  251
24.1  隐藏数据的存储方式  251
24.2  声明一个类的实例  253
24.3  类的职责  254
24.4  小结  255
24.5  问答题  255
24.6  实践题  256
第25章 类的生命周期  257
25.1  对象构造  257
25.1.1  没有新建构造函数的结果  260
25.1.2  初始化类的成员  260
25.1.3  用初始化列表初始化常量
字段  261
25.2  解构对象  262
25.2.1  delete时的解构  264
25.2.2  超出作用域时的解构  264
25.2.3  由其他析构函数导致的
解构  265
25.3  复制类  266
25.3.1  赋值操作符  267
25.3.2  复制构造函数  269
25.3.3  所有编译器生成的方法  270
25.3.4  彻底地阻止复制  271
25.4  问答题  272
25.5  实践题  273
第26章 继承和多态  274
26.1  C++中的继承  275
26.1.1  继承的别的作用以及误用
的情况  278
26.1.2  继承、对象构建和销毁  279
26.1.3  多态和对象销毁  281
26.1.4  对象切割的问题  283
26.1.5  与子类共享代码  284
26.1.6  protected的数据  285
26.1.7  属于类的数据  285
26.1.8  如何实现多态  286
26.2  问答题  288
26.3  实践题  290
第27章 命名空间  291
27.1  问答题  294
27.2  实践题  295
第28章 文件I/O  296
28.1  文件I/O基础  296
28.2  文件格式  298
28.3  写文件  301
28.4  文件位置  302
28.5  接受命令行参数  305
28.6  二进制文件 I/O  307
28.6.1  处理二进制文件  309
28.6.2  转换到char*  309
28.6.3  二进制I/O的一个例子  310
28.6.4  把类存储到文件中  311
28.6.5  读取二进制文件  312
28.7  问答题  315
28.8  实践题  315
第29章 C++中的模板  318
29.1  模板函数  318
29.1.1  类型推断  320
29.1.2  鸭子类型  320
29.2  模板类  321
29.3  使用模板的一些小技巧  322
29.4  模板小结  325
29.5  问答题  328
29.6  实践题  330
第四部分 其他
第30章 使用iomanip格式化输出  332
30.1  处理空间问题  332
30.1.1  使用setw设置字段宽度  332
30.1.2  改变填充字符  333
30.1.3  永久改变设置  333
30.2  把你的iomanip知识汇总到一起  334
30.2.1  输出数字  336
30.2.2  使用setprecision来设置数值输出的精度  336
30.2.3  如何处理货币  337
30.2.4  按不同的进制输出  337
第31章 异常和错误报告  338
第32章 最后的话  346
索引  368


文摘
【第一章:简介和环境搭建】

1.1 什么是编程语言
如果想控制计算机,你需要一种可以和计算机对话的方法。不像猫或狗那样有一套自己的神秘语言,计算机的语言是人类创造的。计算机程序是一段文本,就像一本书或一篇文章,有着特定的结构。编程语言对人类来说易于理解,但与自然语言相比,它们的结构更严格,词汇量也更小。C++便是这些计算机语言中很流行的一个。
在你写完程序之后,计算机需要一种方法来运行它,就是解释所写的是什么,也就是执行程序。执行的过程取决于所使用的编程语言和开发环境,我们稍后会讲到如何执行程序。
目前有很多种编程语言,尽管每种语言都有自己的语法和关键字,但它们在很多方面是相通的,一旦学会一种,再学习其他的便会容易很多。
1.2 C和C++之间的不同之处
C语言是为了开发Unix操作系统而诞生的,是一种低层且强大的语言,但缺少很多现代编程特性。C++是基于C语言的一个较新的语言,它增加了很多现代编程语言特性,比C更加易用。
C++包含了所有C语言的强大特性,同时提供了很多新功能,使其更容易编写复杂程序。
例如,C++可以非常方便地管理内存。它有很多的特性可以实现“面向对象编程”和“泛型编程”,我们之后会解释这些是什么意思。目前你只需要知道C++对程序员来说更加地简单,可以让他们无需考虑机器运行的细节,而是将注意力放在如何解决问题上。
如果你在学C还是学C++之间徘徊,我强烈建议学习C++。
1.3 学习C++之前,是否需要先了解C
不需要。C++是C的超集,任何能用C做的事情,都可以用C++完成。如果了解C语言,你会很快适应C++的面向对象特性。如果不了解C,也不要紧,先学会C并不会有多少优势,其实你能很快掌握并运用C++的独有特性(比如更简单的输入和输出)。
1.4 成为程序员,是否需要懂数学
如果每次有人问我这个问题我都收他5分钱的话,那我这笔财富要用计算器才能算清。很幸运,这答案是:不需要!大多数编程涉及的是设计和逻辑推理,而不是快速运算、线性代数或微积分。数学和编程之间的重叠部分,主要集中在逻辑推理和严密的思维部分。只有需要编写高级3D图形引擎、数控编程,或是写程序来进行统计分析时,你才需要真正的数学知识。
1.5 术语
本书中我会不断定义新术语,不过会从一些非常基本的概念开始介绍。
1.5.1 编程
编程指的是编写计算机能够理解和执行的指令,这些指令称为源代码。我们将在接下来的内容中初步接触一些源代码。
1.5.2 可执行文件
编程的最终成果就是生成一个可执行文件。可执行文件即计算机能够运行的文件:如果使用Windows系统,这些文件即EXE文件。Microsoft Word便是一个可执行文件。有些程序会有额外的文件(图形文件、音乐文件等),但每个程序都必须有一个可执行文件。为了生成可执行文件,你需要一个将程序源代码转化为可执行文件的编译器。没有编译器,除了眼巴巴地看着源代码,你无法做任何事情。这实在是太无聊了,我们赶紧安装一个编译器吧。
1.6 编辑和编译源文件
本章接下来的部分讲述如何搭建一个简单易用的编程环境。我推荐安装两个工具:一个编译器和一个编辑器。你已经知道编译器的存在是为了让程序可以工作。虽然之前没有提及编辑器,但它非常重要,编辑器可以让你按照正确的格式编辑源代码。
源代码必须以纯文本的形式编写。纯文本文件仅包含文字信息,不包含格式化信息。用Microsoft Word(或类似产品)创建的文件就不是纯文本文件,因为它包含字体、字号等格式化信息。在Word中打开文件时,尽管你看不到这些信息,但它们确实存在。而纯文本文件只有原始信息,可以使用接下来我们将要介绍的工具来创建和编辑。
编辑器还会提供两个很方便的功能:语法高亮和自动缩进。语法高亮给代码添加颜色,使你可以很容易地区分程序的不同元素。自动缩进可以自动对代码排版,使其更加易读。
如果你使用Windows或者Mac,我推荐更复杂的编辑器:包含了编辑器和编译器的集成开发环境(Integrated Development Environment,IDE)。如果你使用Linux,我推荐使用非常简单易用的编辑器nano。下文中,我将指导大家进行设置。

购买书籍

当当网购书 京东购书 卓越购书

PDF电子书下载地址

相关书籍

搜索更多