- 在线时间
- 0 小时
- 最后登录
- 2007-11-12
- 注册时间
- 2004-12-24
- 听众数
- 2
- 收听数
- 0
- 能力
- 0 分
- 体力
- 2467 点
- 威望
- 0 点
- 阅读权限
- 50
- 积分
- 882
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 205
- 主题
- 206
- 精华
- 2
- 分享
- 0
- 好友
- 0
升级   70.5% 该用户从未签到
 |
第一篇3 T7 [5 s/ K. h
: L$ @' T e* w' L1 Y/ M0 q
一些同学问我,如何学好C++,我没有别的办法给你们,唯一的办法就是读书,读大/ m) d9 w7 R: F' i2 Z; h
量的书,就可以解决。要把C++作为日常语言,而不是一种程序语言,这样就好办了。
' r F9 T5 u, \! p' E8 P- D, f$ S& Q' X. t2 l
有人又要问我,那么我应该读什么书才好?没有时间怎么办?
; h2 f& A% z6 V' a* A: L. t& e& ]2 A
我只能对你们说,没时间的话,就别学C++了,做你们喜欢做的事。生活中没有
0 g1 k% F% R3 ]" w9 R& ?/ Q# JC++,也同样美好。 c0 P; Z- h0 t
4 W+ u1 s5 C$ J) B8 Y8 U- x! g' r4 ~$ O
如果你准备学,一定要学好,那么我开个书单,应该问题不是甚大。
0 l; |" t. c, `2 T4 Q+ X' x |3 K8 \) J. c$ H) r- H4 G% ?
首先肯定要读一读Bjarne Stroustrup的The Design and Evolution of C++,了解
; F, ?. f8 ]+ d一下这个语言的历史。接下来就可以看别的书了,但要不停地回头看这本书,看到4 W3 f5 j9 @1 X. V
你不断地学到的新技术是怎么样一点点地被接纳到这个语言中去的。 b, d6 h0 O3 n# X9 T
1 c3 M- ~" _8 d8 ]0 x% @
第一本书因人而异,基础好一些的,可以看Stanley B. Lippman的C++ Primer,这1 P9 M" F0 n4 |
本书非常地巨大,你打星号的部分可以不要看。基础不太好的,可以看Stanley B.. @9 W! X9 g9 \" U1 Z
Lippman的Essential C++,这本书份量要轻得多,不过四个C++的范型都讲了,而, O0 D0 R; M. Y- v3 {8 k
且讲得非常清楚。$ p7 p1 N, c. s' R
" v9 e$ P6 s0 s" K8 r- l第二本应该停止技术层面的东西,静下心来看看Pike和Kernighan的The Practice+ f: [& P/ e g5 n" x2 Z' Z# I
of Programming,好好地整理一下,在程序设计中应该有哪些注意的事项。这本
& ]) p8 b$ v3 x8 ^+ h5 u非常薄的booklet,可以说是程序员必读的指南。$ p A# A6 Q0 p+ ]: D: l
( g0 {& A( C# E; J; Y' F
第三本书,就应该是Bruce Eckel写的、候捷译的Thinking in C++,这本书每过, w; g A7 z3 \6 b( s) ~4 C
半年我就要重读一遍。可以说每一章都是写得发人深省的,这本书让我感觉到了
9 }( @: U) ~2 {1 B技术运用的非常高的境界,但是语言非常平实,只要认真地读,即使基础不行, n% S) j9 I( z1 x9 ? g
也一定可以懂。我在教课的时候,就是用这本书(面对的学生是零基础)。
/ z8 l- v9 F$ v+ B2 f3 l- p( m6 x# @5 z
要更上一层的话,就要慢一步,先要把握C++设计习惯的良好。这是Scott' c {. }" [* u, u9 {1 x4 a0 C2 z7 b0 @
Meyers的Effective C++和More Effective C++带给我们的无尽收益。我More
1 c6 I; k/ }+ k4 p, CEffective C++买不起,只好花了10块钱复印装订了一本"线装本",看起来像葵花
, h, j* V* }1 K! \宝典(;-))。这两本书是真正的经典,作者对C++的纯熟,使得语言的风格读起来
) {1 x& y) g9 x d8 D简直是如饴甘甜,就像他站在对面在讲课。我手中有这两本书的原版CD,如果有兴: M" F; h' [( p" Z7 v9 @% g
趣,可以发E-mail到sjtu@263.net或在饮水思源投条儿给gaobo索要,只要您提供
# a7 X$ r* [( m) b' F c光盘我就给免费烧。如果你已经深刻地理解了Effective C++和More Effective+ Z& t# T+ S- \3 t0 {) W
C++,那你可以发现,你在众人中已经是鸡群之鹤。可以指导项目运作了,可以编
9 b' t6 M8 g$ j写一切你想做的程序了,可以指出别人看起来不错的代码的大小问题了。如果你能
* g5 h6 W& M& q4 S一眼看出有人的代码是对应于"条款27"或"条款M6",那你可真是让本人刮目了。
6 t. _# K$ M; c5 P6 | ~4 S% R1 M5 O# {% L
我已经讲了,如果要写程序,EC++和MEC++的境界已经足以使你自如应付,可是如
7 K. \- |# I9 q( A6 W% Z+ l果你还不满足,想关注一些理论层面的问题,或是想看看实现的代码,你就不应该( r8 m3 j1 Q$ z4 |( F) L$ @6 k
错过这几本好极了的书。我是说Herb Sutter的Exceptional C++和More( C6 L: y+ N/ D6 Q8 `/ v" p4 `
Exceptional C++,这两本书的难度是非常大的,我对每一条的阅读笔记都是十多
4 a% T' V! k7 r9 H8 }8 h# {9 _- ^0 U页。特别是泛型程序设计的部分,这两本书旁征博引,极尽深入探讨之能事,每每
. l: X. @; Y1 S. j% \看懂一条,都抹汗一次,大感酣畅淋漓;还有侯捷的 STL源码剖析 ,以实际的# J- I+ j* N- i- z
例子一点点地讲解一个STL是怎么样实现的,我是刚开始读,不发表评论;而( N" R9 u( _) } {
Stanley B. Lippman,Cfront的实现者之一,执笔写出Inside the C++ Object
+ [+ V- \- M) P- w. G/ @7 L( K# oModel,我只有一个字,就是基本帅呆了。我从中了解了无数的编译器解释源代码
$ [; [! d4 c( U$ v; Q5 \$ q的细节,以及记忆体分配的细节,呵呵,这些都知道了,我还怕什么呢?最近得到6 w. z- M1 h! E3 e
了另一Cfront实现者、C++标准委员会Koenig的 C++沉思录,看起来非常不错,这
& R, M# K/ K2 e; q0 P里也推荐给大家,但我也没看完,亦无发言权。
0 ^; D- V1 d3 h6 f+ B( c) I* _( [. P0 |3 z ~- a) E- T
最后最后,你们,未来的C++理论家们,可要记住,Bjarne Stroustrup的The C++ " g L& X* f% c4 d& L. B
Programming Language无论如何也应该读个四五遍!这是一切C++的书本的源泉。
% O# ^3 Y1 y+ n( x q如果还觉得不够,就向C++标准委员会订购一本C++标准。
3 D4 X- f) p: q1 C
8 }0 u6 }2 s$ C$ h' H一切中国大陆作者的书,一概不要看(包括我的)。一切VC++或讲特定的编译器的! o6 K1 I3 B( t+ Q1 E
书,一概不要看。如果需要补C语言的课,买一本非常小的K&R的The C
: o4 x( E. [( h4 lProgramming Language足矣,其它的书一概不要看。不要先学C,再学C++,而要直, }+ P* a4 A# O) K8 ]
接学C++。你不是先学古文,再学白话的,对不对?所以相信我,直接来更容易。
. o6 |6 W4 w3 S
e, F) B$ x6 G以上文字,皆为原创,本人愿意为每个字负责。
( ^6 o! ]1 S! k5 ~( }
/ y+ g9 q+ m: |3 R* N第二篇, Z/ P5 S$ g* H( W8 }
1 W( n, H" H, D) U7 {+ ^好久未来C板了,原因这段时间一直在研究两本书,看得自己不敢多说一句话。
- Q. E1 b- m9 \; L5 P% ~4 Z( U" i' \* q! j# S8 m" o
1、《Effective STL》+ M4 v$ U$ J" b6 O& a+ [" L
订购:http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8537- i+ ?) E0 J- m* o1 z
作者:Scott Meyers' r) R) T( R, E/ a$ j
出版社:中国电力出版社
5 T, s3 P% z; Q7 O/ Y 一开始欺负这本书比较薄,想快点看完,但不久就发现自己已经翻不动了。直2 [1 w4 ]/ q- r
到看完最后一个字,才发现一个基本的事实:薄的不是这本书,而是自己的见识。
! E1 u9 J2 \* S) S/ U 有关STL的书也读了不少,正如读《Effective C++》以前,有关C++的书也读了7 Q% X3 _7 G5 B: h2 ^
不少。Meyers的书总是给人一种脱胎换骨的提升感觉,他总能在大家以为老生常谈
2 h- T/ H3 T: s' p7 T' K的地方挖出意想不到的新意,并指出一些一般人习以为常的东西其实存在种种危机,7 B- _2 `# L' i2 |
或是在一些看来完全等价的选择中,为特定的场合选择最有效的(Most
1 ^' `! X6 A5 T! s# U8 d% ]Effective)那一种。而且他的切入口总是让人看得懂的(不像Stroustrup的书,) h; q4 }$ b' z C- O
第一句话就要琢磨半天),但是他总是会选择几个拓展点,并把它们分析得淋漓尽5 ?% w& Q7 L1 [+ Z) F
致,这时候就需要一段代码一段代码甚至是语句粒度地阅读了——当然,最后总是
1 X) f; Y. l( N* F( T看得懂,这和读者的阅读程度总是正比,这会给人极大的成就感。可以说,在STL
0 x3 N: w$ X. x4 d. P/ k! S- U实践的书籍,无书可出其右(当然在STL实作方面,我还是要向大家推荐侯捷的
6 I+ A5 q- s6 d1 O1 O& A( A《STL源码剖析》)。
6 k2 x! D5 f9 s0 N" t 读完这本书后,和Pascal就产生明显的距离感了。这里我仍然要说:请热爱
* p0 i8 A3 {4 U5 D% Q9 SDelphi!我还是更愿意写“var s:set of char;”而不是
! ]( j: w* Z6 ?" T1 Q Z“set <char*, less<char*>, allocator<char*> > s”,;-)。
1 F7 `% K7 m0 v1 x9 A
+ D q) e1 I' G' P. ]: ]5 D1 R2、《Modern C++ Design》. t! r. R0 B0 C/ f( W
订购(中文):http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8184
! t+ l) J3 s1 S" ]8 G订购(影印):http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8319& N# g0 }6 K Q% z2 g0 l) h
作者:Andrei Alexandrescu* `3 [& ?7 ~% G6 B k- k, C
译者:侯捷、於春景1 Y* f$ E8 c5 E2 o' e* t5 o! G" E
出版社:华中科技大学出版社(中文). q6 k& d/ F$ N( j2 o {
中国电力出版社(影印)3 w$ b% m; K2 V# c; f
读完这本书的第一页,我就知道自己放不下它了,但我也知道,我的苦难经历: b% t! }8 T m, D! z' W
又要多上一笔了。用C++实作设计模式,已经是骨灰级的难度,但这本书明显还在讲
5 s0 ^; f5 l+ V5 o' e一个template的对象模型的问题,这在我读《Inside the C++ Object Model》时是% J/ ]( W3 P& C& x% r+ |3 b% h
屡攻不下的难点。不过,出乎意料的是这本书居然使我具有一些概念了,而且动手写
3 H5 c! J- f9 f+ }6 h- `: d7 N出了一个SmartPointer。# ~) C# d+ _# V8 {7 a# \+ X
这本书我还远不能说我读懂了,但是确乎是读完了。如果你还没有读过对象模型
) V3 I4 N" i4 ]" V$ t- g; g和设计模式的书,我认为需要读一读。否则,直接看这本书根本就是受罪。最近,有
0 T/ o) }) Z0 x+ d一些朋友也注意到设计模式的重要性了,可能从明年起我在《电脑报》上要发表一些
& E+ v7 p. h1 O文章,届时请朋友们指教吧。& Z# W. Q& D, U4 A$ Z
1 ^3 w: Z# ]+ e* Y另外就是Effective C++点评继续写,我现在觉得更惶恐,但是信心也更足了。 |
zan
|