我的第一本C++书

游历C++世界的地图

#

The New C++: Lay down your guns, knives, and clubs, Pick up your multI-cores

今天看到一篇关于C++0x的评述文章,其中Herb Sutter说了一句


"The world is built on C++"


很是振奋人心,大长了我们C++程序员的脸面,振奋人心!大家有兴趣可以去看看。

http://imcc.blogbus.com/logs/136800138.html

 The New C++: Lay down your guns, knives, and clubs, Pick up your multI-cores


posted @ 2011-06-15 19:00 陈良乔——《我的第一本C++书》 阅读(2008) | 评论 (7)编辑 收藏

《我的第一本C++书》试读:1.1 C++是什么?

第1篇 叩开C++世界的大门

第1章 C++世界地图

对一个即将到陌生地方去旅行的人来说,什么是最重要的和必需的?没错,是一张内容丰富详尽、生动有趣的旅行地图。借助这张地图,就知道在什么地方停车吃饭、在什么地方打尖住店。即将进入陌生C++世界的各位旅行者对C++世界有太多的问题和疑惑。C++是什么?C++是怎么来的?C++能做什么?如何学好C++?

面对这些问题,同样需要一张C++世界地图。这张C++世界地图可以为解答这些问题和疑惑,让我们清晰地认识C++世界。同时,我们可以通过这张C++世界地图,了解C++世界的整个面貌:有哪些好玩的地方,有哪些有趣的故事,有哪些有用的知识,有哪些危险而需要注意的地方。这张C++世界地图,将带领我们畅游整个C++世界。

还等什么,让我们出发吧!

1.1 C++是什么

C++是什么?这几乎是每个即将进入C++世界的旅行者要问的第一个问题。面对这个问题,一千个人有一千种答案。有人说,C++是一种高级程序设计语言;有人说,C++是C语言的继承者;有人说,C++是一种面向对象的思维方式;有人说,C++很好很强大;更有人说,不要迷恋C++,C++只是一个传说。可以说,这些答案都从某个侧面回答了"C++是什么",但是又都不全面。

在这里,我不能、也不会给你所谓的完美答案。在这里,我能够做到的,就是给你描绘美好的C++世界,讲述其中的各色公民、风俗见闻,为各位旅行者指引方向和路径。等各位完成这奇妙的C++世界之旅之后,自然会有自己的答案。

从现在开始,寻找答案吧!

更多试读章节,来自 >>http://imcc.blogbus.com

posted @ 2011-06-15 10:18 陈良乔——《我的第一本C++书》 阅读(1645) | 评论 (0)编辑 收藏

《我的第一本C++书》试读:目录

目录

第1篇 叩开C++世界的大门 1
第1章 C++世界地图 3
1.1 C++是什么 3
1.2 C++的前世今生 3
1.2.1 从B到C 4
1.2.2 从C到C++ 4
1.2.3 从C++到.NET Framework的CLI 6
1.2.4 最新标准C++0x让C++重新焕发活力 8
1.2.5 C++和C#不得不说的那点事儿 8
1.2.6 C++世界的五大子语言 9
1.3 C++世界版图 10
1.3.1 Windows系统下的C++开发 10
1.3.2 Linux系统下的C++开发 11
1.3.3 嵌入式系统下的C++开发 11
1.4 如何学好C++ 12
1.4.1 将自然语言转换为C++程序设计语言 12
1.4.2 "多读多写"是学好C++的不二法门 14
1.4.3 和Google做朋友 14
第2章 与C++第一次亲密接触 17
2.1 一个C++程序的自白 17
2.1.1 用Visual Studio创建C++程序 17
2.1.2 以手工方式创建C++程序 20
2.1.3 C++程序=预编译指令+程序代码+注释 21
2.1.4 编译器和链接器 25
2.1.5 C++程序的执行过程 26
2.1.6 程序的两大任务:描述数据与处理数据 27
2.2 基本输入/输出流 28
2.2.1 标准的输入和输出对象 29
2.2.2 输出格式控制 31
2.2.3 读/写文件 32
2.3 最常用的开发环境Visual Studio 34
2.3.1 Visual C++的常用菜单 35
2.3.2 Visual C++的常用视图 44
2.4 C++世界旅行必备的物品 46
2.4.1 编程助手Visual Assist 46
2.4.2 代码配置管理工具Visual Source Safe 48
2.4.3 CodeProject和CodeGuru 48
2.4.4 C++百科全书MSDN 48
第2篇 欢迎来到C++世界 51
第3章 C++世界众生相 53
3.1 C++中的数据类型 53
3.2 变量和常量 54
3.2.1 声明变量 55
3.2.2 给变量取个好名字 55
3.2.3 变量初始化 57
3.2.4 常量 57
3.2.5 用宏与const关键字定义常量 59
3.3 数值类型 62
3.3.1 整型数值类型 62
3.3.2 浮点型数值类型 63
3.4 布尔类型 64
3.5 字符串类型 65
3.5.1 字符类型 65
3.5.2 字符串类型 66
3.6 数组 67
3.6.1 数组的声明与初始化 68
3.6.2 数组的使用 69
3.7 枚举类型 71
3.8 用结构体类型描述复杂的事物 73
3.8.1 结构体的定义 73
3.8.2 结构体的使用 74
3.9 指向内存位置的指针 76
3.9.1 指针就是表示内存地址的数据类型 76
3.9.2 指针变量的定义 77
3.9.3 指针的赋值和使用 78
第4章 将语句编织成程序 81
4.1 用运算符对数据进行运算 81
4.1.1 用表达式表达设计意图 82
4.1.2 算术运算符 82
4.1.3 赋值操作符 84
4.1.4 关系运算符 84
4.1.5 逻辑运算符 86
4.1.6 运算符之间的优先顺序 87
4.1.7 将表达式组织成语句 89
4.2 条件选择语句 90
4.2.1 if语句 90
4.2.2 并列选择的switch语句 93
4.3 循环控制语句 97
4.3.1 while循环 97
4.3.2 do…while循环 99
4.3.3 for循环 100
4.3.4 循环控制:break和continue 102
4.4 从语句到程序 104
4.4.1 程序是控制语句串联起来的语句 104
4.4.2 豪华工资统计程序 106
第5章 用函数封装程序功能 109
5.1 函数就是一个大"箱子" 109
5.1.1 函数的声明和定义 110
5.1.2 函数调用机制 113
5.1.3 函数的声明与函数调用 117
5.1.4 函数参数的传递 119
5.1.5 函数的返回值 121
5.2 内联函数 123
5.2.1 用体积换速度的内联函数 123
5.2.2 内联函数的使用规则 124
5.3 重载函数 125
5.3.1 重载函数的声明 125
5.3.2 重载函数的解析 128
5.4 函数设计的基本规则 129
5.4.1 函数声明的设计规则 129
5.4.2 函数体的设计规则 131
第6章 当C++爱上面向对象 135
6.1 从结构化设计到面向对象程序设计 135
6.1.1 "自顶向下,逐步求精"的结构化程序设计 136
6.1.2 面向对象程序设计 137
6.1.3 面向对象的三座基石:封装、继承与多态 138
6.2 类:当C++爱上面向对象 142
6.2.1 类的声明和定义 142
6.2.2 使用类创建对象 146
6.2.3 构造函数和析构函数 148
6.2.4 拷贝构造函数 152
6.2.5 操作符重载 155
6.2.6 类成员的访问控制 157
6.2.7 在友元中访问类的隐藏信息 160
6.3 类如何面向对象 162
6.3.1 用类机制实现封装 163
6.3.2 用基类和派生类实现继承 164
6.3.3 用虚函数实现多态 171
6.4 实战面向对象:工资管理系统 175
6.4.1 从问题描述中发现对象 175
6.4.2 分析对象的属性和行为 176
6.4.3 实现类的属性和行为 177
6.5 高手是这样炼成的 183
6.5.1 C++类对象的内存模型 183
6.5.2 指向自身的this指针 185
第7章 C++世界的奇人异事 189
7.1 一切指针都是纸老虎:彻底理解指针 189
7.1.1 指针的运算 189
7.1.2 灵活的void类型和void类型指针 192
7.1.3 指向指针的指针 194
7.1.4 指针在函数中的应用 195
7.1.5 引用 198
7.2 程序中的异常处理 203
7.2.1 异常处理 203
7.2.2 异常的函数接口声明 206
7.2.3 合理使用异常处理 207
7.3 编写更复杂的C++程序 208
7.3.1 源文件和头文件 208
7.3.2 名字空间 210
7.3.3 作用域与可见性 214
7.3.4 编译预处理 218
7.4 高手是这样炼成的 220
7.4.1 用宏定义化繁为简 220
7.4.2 用typedef定义类型的别名 221
7.4.3 用const保护数据 223
第3篇 攀登C++世界的高峰 227
第8章 用STL优雅你的程序 229
8.1 跟STL做朋友 230
8.1.1 算法 + 容器 + 迭代器 = STL 230
8.1.2 在程序中使用STL 231
8.1.3 STL到底好在哪里 233
8.2 用模板实现通用算法 234
8.2.1 函数模板 235
8.2.2 类模板 238
8.2.3 模板的实例化 240
8.2.4 用模板实现通用算法 241
第9章 STL中的容器管理数据 245
9.1 容器就是STL中的瓶瓶罐罐 245
9.1.1 操作容器中的数据元素 247
9.1.2 使用迭代器访问容器中的数据元素 247
9.1.3 容器的使用说明书 249
9.1.4 如何选择合适的容器 252
9.2 vector容器是数组的最佳替代者 253
9.2.1 创建并初始化vector对象 253
9.2.2 vector容器的操作 256
9.2.3 访问vector容器中的数据 257
9.3 可以保存键值对的map容器 258
9.3.1 创建并初始化map容器 258
9.3.2 将数据保存到map容器中 259
9.3.3 根据键找到对应的值 260
第10章 用STL中的通用算法处理数据 263
10.1 STL算法中的"四大帮派" 263
10.2 容器元素的查找与遍历 264
10.2.1 用for_each()算法遍历容器中的数据元素 264
10.2.2 用find()和find_if()算法实现线性查找 266
10.3 容器元素的复制与变换 270
10.3.1 复制容器元素:copy()算法 270
10.3.2 合并容器元素:merge()算法 272
10.3.3 变换容器元素:transform函数 274
10.4 容器元素的排序 276
10.4.1 使用sort()算法对容器中的数据进行排序 276
10.4.2 对排序的规则进行自定义 279
10.5 实战STL算法 282
10.5.1 "算法"老师带来的一堂别开生面的体育课 282
10.5.2 删除容器中的冗余元素 284
第11章 函数指针、函数对象与Lambda表达式 287
11.1 函数指针 287
11.1.1 函数指针的声明与赋值 287
11.1.2 用函数指针调用函数 289
11.1.3 用函数指针实现回调函数 291
11.1.4 将函数指针应用到STL算法中 293
11.2 函数对象 295
11.2.1 定义一个函数对象 295
11.2.2 利用函数对象记住状态数据 297
11.3 用Lambda表达式编写更简单的函数 299
11.3.1 最简单直接的函数表达形式:Lambda表达式 299
11.3.2 Lambda表达式的语法规则 301
11.3.3 Lambda表达式的复用 302
第12章 C++世界的几件新鲜事 305
12.1 用右值引用榨干C++的性能 305
12.1.1 什么是右值 305
12.1.2 右值引用在函数返回值上的应用 306
12.1.3 STL算法中被浪费的右值 307
12.1.4 右值引用如何提高性能 310
12.2 智能指针shared_ptr 312
12.2.1 C++的内存管理 312
12.2.2 用聪明的shared_ptr解决内存管理问题 313
12.2.3 智能指针的应用场景 315
12.2.4 shared_ptr的使用 316
12.2.5 shared_ptr与标准库容器 321
12.2.6 对shared_ptr进行自定义 323
12.3 用PPL进行多线程开发 326
12.3.1 多核给程序设计带来的挑战 326
12.3.2 PPL带来免费的午餐 327
12.3.3 PPL中的并行算法 329
12.3.4 PPL中的并行任务 331
12.3.5 PPL中的并行对象和并行容器 334
12.3.6 PPL之外的另一种选择:OpenMP 340
第13章 找工作就靠它了 343
13.1 打好基础 343
13.1.1 基本概念 343
13.1.2 函数 346
13.1.3 面向对象思想 348
13.1.4 类与对象 349
13.1.5 STL 360
13.2 积累经验 362
13.3 考查智力 364
附录A 接下来该读什么书 367
A.1 开山鼻祖:《C++程序设计语言》 367
A.2 初学者必看:《C++ Primer中文版(第4版)》 368
A.3 百科全书:《代码大全,第2版》 368
A.4 内功秘籍:《Effective C++(Third Edition)》 370
A.5 经验很重要:《C++编程规范》 370
后记 373

posted @ 2011-05-31 11:10 陈良乔——《我的第一本C++书》 阅读(1446) | 评论 (1)编辑 收藏

《我的第一本C++书》试读:前言

前言

当你拿起本书翻看到这一页的时候,是否在寻找一本既简单实用又通俗易懂的C++参考书?没错,这本书正是你要寻找的最佳C++参考书。

有了这本书的帮助,你将会发现C++学习过程是一次愉快的C++世界之旅。C++编程就是用C++编程语言描述和表达周围现实世界的过程。按照描述 和表达现实世界的需要,本书分别介绍了C++语言中最重要的内容,包括基本数据类型、逻辑控制语句、函数、面向对象思想、类与对象,以及标准模板库等相关 的知识。学习基本数据类型之后,你会知道如何使用int、double和string等数据类型来描述现实世界中的数据;学习逻辑控制语句之后,你会知道 如何使用if...else来控制程序逻辑;学习函数之后,你会知道如何用函数来表达完整的算法;而面向对象思想可以帮助我们抽象现实世界;类与对象则将 抽象的结果在程序中表达出来;最后的标准模板库,通过提供通用容器来对数据进行管理,通过提供通用算法来对数据进行处理,从而使程序更加简单而优雅。这些 内容,都是C++语言中最基本而又最实用的部分,通过这些内容的学习,你完全可以将C++作为自己的语言来描述和表达现实世界。

这么多内容,学习起来困难吗?虽然C++语言纷繁复杂的语法规则让很多学习者望而却步,但是,在本书中,你会发现C++语言的学习也可以如此轻松。 本书没有孔乙己式地去深究C++语言的语法细节,也没有重点地去介绍各种高深的C++编程技巧,而是本着简单实用的原则,通俗易懂地向你介绍C++中最重 要、最实用的知识。看完本书,你会发现用逻辑控制语句可以把C++语句串珠成链;用函数实际上就是把程序装进一个箱子;当C++语言爱上面向对象思想就有 了类与对象;算法就像体育老师,给我们带来一堂别开生面的算法体育课。本书不再是一本枯燥乏味的C++语法介绍书,而是一本通俗易懂的C++故事书,可以 让我们在讲故事中轻松学会C++语言。

本书不仅仅是一本入门参考书,它更是一本关于C++编程经验总结的书。本人使用C++编程已有10多年时间,同时多年担任微软最有价值专家 (Microsoft Most Valuable Professional,MVP),接触到很多来自实践的问题,也积累了丰富的实践经验。我的这些宝贵实践经验都融入了本书中。通过本书,你不仅可以获 得关于C++语言的知识,更重要的,你可以获得这些宝贵的实践经验。例如,表示浮点数的float和double,我们到底该如何选择?为什么const 关键字这么重要?指针和引用的区别到底在哪里?这些都是来自实践的问题,在你读完这本书后,你将获得完美的答案,这些答案会帮助你从一个C++新手成长为 一个经验丰富的C++开发人员。如果你已经在进行C++程序开发,也可以通过这些经验的积累,让自己的C++编程技能更上一层楼。

最后,当你在C++学习之旅中累了、倦了,或者遇到问题的时候,不妨来我的有{間}客栈坐坐,链接地址:http://imcc.blogbus.com/。在这里,我可以为你答疑解惑,让你的C++学习之旅更加轻松惬意。

还等什么呢?即刻拿起这本书,开始我们的C++学习之旅吧!

致谢

本书从最初提出设想到最终成书经历了大约四年时间,我希望是四年磨一剑,能给大家奉上一本好书,一本有价值的书。

在这四年的写作过程中,我获得了很多人的帮助,最终才有了大家手中的这本书。在这里,我要感谢父母对我的默默支持;感谢亲爱的贾玮,你的支持、鼓励 和期许是我的动力和灵感的源泉;感谢为本书作序的康雁老师,我的好老师;感谢周静姐姐、唐总和兰姐给予我的教诲;感谢好朋友丁春利、马洪旭在我最困难的时 候给予我的无私帮助;感谢Elmar Driesch先生、Andreas Muench先生及Thorsten Thomsen先生给予我的指导;感谢本书的编辑,从最初的陈禹成编辑到后来的徐定翔、陈元玉编辑,是你们成就了这本书;感谢所有关心我的朋友,我爱你 们!

陈良乔
2011年2月于西安

posted @ 2011-05-30 11:20 陈良乔——《我的第一本C++书》 阅读(1297) | 评论 (0)编辑 收藏

C++0x FAQ中文版:您是如何看待C++0x的?

对于我来说,这是一个最最容易被问到的问题。它可能是被问到的次数最多的问题。让人吃惊 的是,C++0x就像一种新的编程语言:跟以前旧的C++不同,C++0x的各个部分被更好地组合在一起,并且我找到了一种更加自然的高层次的编程方式, 而且同样有很好的效率。如果你仅仅是将C++当作更好的C,或者是一种面向对象语言,那么你将错过其中非常精彩和关键的东西。C++0x中的抽象机制将比 以前更加灵活,并且更加经济实惠。就像古老的“咒语”一样:如果你的头脑中有一个想法或者对象,想要在程序中直接对其进行表现,那么,你需要对现实世界中 的对象进行建模,并在代码中对其进行抽象。现在这一过程更加容易了:你的想法将直接对应成为枚举、对象、类(例如,对默认值进行控制)、类的继承(例如, 继承的构造函数)、模板、别名、异常、循环、线程等。这将远远好于以前那种简单的“以一双鞋适应所有脚”的抽象机制。

我的理想是,使用编程语言的各个功能来帮助程序员从另外一个角度思考系统的
设计和实现。我认为C++0x可以做到这一点。并且,不仅仅是为了让C++程序员可以做到,还包括更多的习惯于其它编程语言的,在更广泛的领域内进行系统编程的程序员都可以做到这一点。

换句话说,我依然是一个乐观主义者。

更多C++0x FAQ主题,尽在

C++0x FAQ中文版 - [C++0x FAQ]

posted @ 2011-05-29 14:36 陈良乔——《我的第一本C++书》 阅读(1456) | 评论 (2)编辑 收藏

《我的第一本C++书》,你值得拥有


 

作为一本入门级的C++书,本书在创作的时候坚持这样三个原则:

  • 内容翔实,坚持以实用为主,介绍了C++中最常用的必须掌握的绝大部分知识,对于一些很少用到的语法知识,则较少涉及。在讲解的时候,也以实际的应用场景为主,避免孔乙己式的深究C++的语法细节。
  • 语言生动有趣,避免以往教科书式的呆板面孔。全书以一个C++世界为主线,形象生动地介绍了C++世界中的各种食物。全书中丰富的比喻,可以让读者对比较抽象难懂的C++知识有一个形象的劣迹,更利于掌握知识。
  • 坚持理论实践相结合。在讲解知识的同时,结合作者自己多年的实践经验,提醒读者这些C++知识应该如何应用,在应用的过程中需要注意些什么,同时有大量的实例加以示范,这样可以避免读者掌握了C++的语法知识,却没法动手写程序的纸上谈兵式的学习。特别是最后一章收集整理的各大公司的鄙视题目与分析,对读者有很大的实用价值。

如果你是一个C++新手,正在寻找一本C++的入门书,这本书就是你的最佳选择。这本书从零起步,不仅循序渐进地介绍了C++的知识,更介绍了如何应用这些知识来开发程序。生动有趣的语言,让C++那些枯燥的知识也生动活泼起来,学习不再是一件枯燥的事情,而是一次有趣的C++世界之旅。

如果你是一位已经对C++有所了解的C++中高级用户,正在寻求在C++方面更上层楼,这本书也同样适合你。本书中形象生动的比喻,可以让你对整个C++世界有一个更加通透的认识和理解;丰富的实践经验,让你从一个只是掌握语法知识的新手成长为
一个 经验丰富的高手;本书还介绍了最新标准C++0x中最重要的特性,包括PPL并行模式库、右值引用、智能指针等等,让你时刻走在C++技术发展的潮头。

《我的第一本C++书》,每一个C++学习者都值得拥有

更多详细信息,欢迎访问

http://imcc.blogbus.com

posted @ 2011-05-28 10:43 陈良乔——《我的第一本C++书》 阅读(1442) | 评论 (1)编辑 收藏

C++0x FAQ中文版

很快很快,最新的ISO C++标准C++0x就要来到我们身边了。

今天获得Stroustrup 先生的许可,开始翻译由他撰写和维护的C++0x FAQ 。我觉得这是一件伟大而光荣的事情,但是我又觉得压力很大,因为我的英语水平很差劲,同时自己的C++水平也很有限,很害怕在翻译过程中出现什么错误,贻笑大方不要紧,而误人子弟就罪过大了。所以,我这里的翻译只能算是抛砖引玉,如果你的英文很好,你可以直接阅读他的原文
。或者,你也可以参照两者进行阅读,我想一定会有更多的收获。

当然,我也非常欢迎大家指出翻译中的错误,或者是加入进来和我一起翻译这份文档,共同为C++0x在中国的推广做一点事情。你可以通过chenlq at
live.com联系到我。

对自己的翻译做一点说明:

  • 在翻译的过程中,尽量遵照原文含义,可能有时候也会自己根据自己的理解加一点批注,希望可以帮助大家理解。
  • 另外,虽然C++0x标准还没有正式公布,但是现在已经有很多编译器支持C++0x,比如gcc以及它在Windows下的MinGW,Visual C++
    2010也部分支持,大家可以使用这三款编译器尝试这个文档中的例子。
  • 在下面的目录中,已经翻译的问题链接到相应的中文文档,未翻译的问题则链接到英文原文。

感谢所有参与翻译的志愿者:interma,Chilli,张潇,dabaidu,Yibo Zhu,lianggang jiang,nivo,陈良乔

最后,祝大家阅读愉快:)

---------------------------------------------------------------------------

目录

关于C++0x的一般性的问题:

关于独立的语言特性的问题 :


我经常从提案中借用一些例子。所以,我要感谢这些提案的作者们。另外,我也从自己的访谈和论文中借用了很多例子。

关于标准库的问题:

posted @ 2011-05-28 10:38 陈良乔——《我的第一本C++书》 阅读(2867) | 评论 (4)编辑 收藏

仅列出标题
共4页: 1 2 3 4