免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7208 | 回复: 11
打印 上一主题 下一主题

[C++] 评 《C++程序设计原理与实践》 [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-18 17:26 |只看该作者 |倒序浏览
本帖最后由 OwnWaterloo 于 2010-09-18 17:50 编辑

评 《C++程序设计原理与实践》


这是一本大杂烩!

文法分析、 GUI、 数据结构、 正则表达式、 数值计算、 嵌入式、 内存管理、 加密、 测试, 哦, 还有某章中的若干语言; 最后, 当然还包括C++自身 —— 每一个方面的入门书籍, 都不会比本书更薄。

本书目的何在?


入门级书籍


“我需要这样一本C++书籍,看了之后就可以在实际环境中得心应手地使用C++。” —— 这种想法也没什么不好, 如果真的存在这样一本书, 肯定会被视为C++社区的福音, 推荐给每一个想要学习C++的人。
问题是, C++的复杂性使得这个任务几乎不可能完成。

Stroustrup博士的新作给人带来了一丝希望。
但我觉得本书依然没能创造这个奇迹, 依然是一本入门级别的书。

上手容易 从来不是C++的优点, 将来也不会是。

所以, 打算学习C++的朋友,请打消 “一口吃成C++专家” 的念头。
吃成C++中级用户都不太现实, 除非你才华出众。
就目前来看, 依然需要走那个经典的模式: 从一本入门级别的书感受C++的整体轮廓, 然后从更多书籍中逐步细化、 完善对C++的各个方面的认识。
立马行动, 极有可能在神作出现之前就不再需要它了。

而与其他同类书籍相比, 本书还是有一些特点的。


着重程序设计而非语言规则


记得我们是如何学习加法与乘法法的? 从竖式开始?

竖式确实能展示计算的过程, 并能得出计算的结果。
但计算意义, 通常不是通过竖式了解到的, 而是在更早的启蒙教育中就获得了:
“我给希望工程捐12元, 你给希望工程捐26元, 我俩 总共 捐了多少元?”
因为我不懂政治, 所以答案是38元 —— 这就是加法的含义: 求和。
“每发一帖可以得5毛钱, 发74帖 一共 能得多少钱?”
这就是乘法的意义 —— 多个相同的数求和。

正因为我们需要解决这些问题, 所以给这些问题以定义, 并逐步总结解决问题的一般方法。

而很多C++书籍着重C++语言本身。

通过这类书籍,我们可以得知 X —— 此处, X=构造/析构、访问控制、 虚函数、 继承、 异常、 模板等等 —— 能起到怎样的效果、 存在何种陷阱、 甚至还能了解X是如何被实现。
但很少有书籍能清楚的阐述出 “ 为什么需要X ?”、“ X应该用于何种场景 ?”

本书的的首要主题是 程序设计

是因为程序设计需要: 维护不变式、 隔离接口与实现、 开闭原则、 差异编程、 错误的报告与处理分离、 元编程等等等等。
为此, C++添加了许多特性以直接支持种种程序设计的需要。

所以本书不是孤立地介绍C++, 而是揭示C++与程序设计的关系。 通过本书, 可以更快掌握X的使用时机。


示例选材

程序设计要通过编写程序的实践来学习

—Brian Kernighan


所以, 编程书籍中从来不会缺少示例。


本书从程序设计的各个领域(见上)中选取较丰富的题材、 加以简化浓缩、 作为书中的示例。

一方面, 可以开阔视野; 更重要的是, 通过这样的示例比那些个 toy 示例 更能体会出程序设计, 而不是仅仅展示语言规则
—— 那些充斥着 foo 、 bar 、 42 什么的代码片段最讨厌了。

另外, 关于这些丰富的题材:
  • 如果对某领域感兴趣, 想更深入地了解, 肯定需要参阅更多的资料。 但以“通过这些题材体会程序设计与C++相应支持”为目的的话, 并不需要额外掌握相应的知识。
  • 这也是一个例子, 说明C++是一门general purpose而非领域专用的语言, 能够(但并不总是适合)在许多领域使用。


C++语言规则选材


C++语言规则非但不是本书的第一要素, 还要通过审查才能进入本书。


本书包含了C++语言规则的 每一个主要方面 , 没有遗漏任何一个方面; 但每个方面中, 作者只介绍了C++中的 最常用与实用的部分 , 有意避免了那些 复杂且冷僻 的部分 [1] :

  • 函数没有重载解析规则
  • 类没有多继承
  • 内存管理没有 operator new
  • 流没有 locale 与 codecvt
  • 模板没有偏特化与 template template argument
  • 异常没有 terminate_handler 和 exception specification
  • ……

也就是说, 本书包含了C++语言的 所有主干内容 , 如果对那些细枝末叶的东西感兴趣, 可参阅更多的C++书籍。

如果不感兴趣?上面那些东西其实也没什么大不了的。


[1] 注意: 这并不是一个 系统的C++语言规则列表 。 并且, 因为时间仓促, 可能与书中的真实情况不符。


权威的指导


事物越是复杂, 对它的理解也就越多样化, 也越不可能和谐统一。 C++自然也如此。


应该如何使用C++ 这个问题, 10个人可能会得出11种答案。

稍有经验的C++程序员都会存在自己的 倾向 , 即: 当满足何种条件时, 使用/禁止某种特性

上文有提到, C++书籍中, 多是讲述语言特性是什么, 而非 指导应在何种情况下使用

因为大师们都明白后者很难。
为了不误导读者, 他们只能从C++的 某些局部 选出一些 久经考验 、 并且在绝大部分情况下都适用的经验, 从而成就了一些C++的经典书籍。

既然本书旨在传授 “如何使用C++的方方面面”, 并且本书的作者之一 —— Stroustrup博士 —— 可谓全世界对C++理解最深入与权威的人, 所以本书必然存在相当强烈的倾向。


我不是在说 “迷信权威” 。


对乐于让别人代替自己思考的人, 跟着Stroustrup博士混, 风险最小 —— 本书中的C++倾向是最为主流与经典的一脉。


对喜欢自主思考的人, 当你对C++越来越熟悉的同时, 也会产生不同于其他人的看法。

但在变得熟悉之前, 总得被动接受点什么。
Stroustrup博士可能会教给你一些在20%的情况下不适合的东西, 人无完人; 但不太可能教给你一些在80%情况下都不适合的东西。
人是白纸一张时最容易吸收, 而且也吸收的最彻底; 往后要发现、 承认并改正这个时期产生的认识偏差是很困难的。
跟Stroustrup博士混, 这种情况不那么容易出现。

关于倾向, 最后再多说一点个人建议供参考:
请考虑你编程的目的是为了 用小代价解决问题 , 还是为了将某种技术—— 不仅仅只C++语言的各种特性, 还包括但不限于OO、 设计模式等 时尚 的东西
—— 玩得最 纯粹 、 最

附录

当需要查询某个C++语言规则时, 由于本书的安排, 这些规则散布在各个章节之中。 这非常不利于查阅。

本书的附录可作为一种补充。 附录A是按语言规则而非程序设计组织, 并且:

  • 包含正文章节数, 如果本书中有关于该规则的详细讨论
  • 或者 “请查阅专家级的书籍或资料”, 表示本书中没有(或极少有)相关讨论, 并且可能属于比较偏门的知识。

遗憾的是附录在中文版中被阉割, 只能 在线 下载, 文件没有标签, 甚至搜索不能…… 严重影响附录原本的查阅效果……




三周时间要细读这样一本书还是有些小困难…… 所以, 以上的文字请各位随便看看就好, 切勿太过当真……
最后, enjoy

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
2 [报告]
发表于 2010-09-18 17:27 |只看该作者
论坛排版不能……
还是去http://blog.chinaunix.net/u3/118956/showart_2330928.html 看吧……

论坛徽章:
0
3 [报告]
发表于 2010-09-18 21:46 |只看该作者
呵呵

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
4 [报告]
发表于 2010-09-19 10:41 |只看该作者
回复 3# egmkang

开地原因如下:

cu是因为活动要求, 也许是想推广它的blog?

cnblogs……  我真不想去转正、 浪费人家网络资源的说……
但如果不转正, 是没法订阅评论的……  所以只好……

搞不懂, cppblog和cnblogs明明是一家……  为什么帐号不通用……
而且cnblogs比cppblog做得华丽得多……  偏心啊……


不写的原因就更简单了,  就是2楼的, 排版不易啊……

论坛徽章:
0
5 [报告]
发表于 2010-09-24 15:14 |只看该作者
很好啊!

论坛徽章:
0
6 [报告]
发表于 2010-09-26 06:25 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2010-10-09 21:41 |只看该作者
在哪里可以下载到?

论坛徽章:
0
8 [报告]
发表于 2012-12-12 17:17 |只看该作者
请问有可以下载的答案吗

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
9 [报告]
发表于 2012-12-12 17:59 |只看该作者
前几天想买,看了下目录,没下去手

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
10 [报告]
发表于 2012-12-13 09:36 |只看该作者
我觉得那本书适合一窍不通的初学者,让他们能够正确的理解C++
重点就在于“正确的理解”上,比如为什么要main,为什么#include
很多人会用C++了,还很熟练的使用,却没想过为什么是这样,而非那样,从而落在“熟练工”的层次
当然,我没看过那本书,只是看了广告中的前几页
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP