學(xué)習(xí)C++語言總結(jié)筆記
本章詳細(xì)講述的問題:我們更多的時候是使用程序庫在寫程序。比如MFC、STL、ATL、VCL等等。其中要使用C++來寫出結(jié)構(gòu)優(yōu)美、性能卓越、代碼簡潔、易于維護的代碼,首推C++標(biāo)準(zhǔn)程序庫。
學(xué)習(xí)C++應(yīng)該由易至難,循序漸進。以前經(jīng)常有人說學(xué)習(xí)C++之前應(yīng)該學(xué)習(xí)C語言。事實上那不是必須的,C++和C語言雖然有關(guān)系,但仍然是兩種不同的語言。當(dāng)然,在學(xué)習(xí)C++之前學(xué)習(xí)過其他編程語言是很有好處的。
那會使學(xué)習(xí)C++的速度更快,畢竟很多計算機語言的概念都是相通的。而對于零基礎(chǔ)的初學(xué)者來說,則是應(yīng)該靜下心來,不要急躁。要成為C++的高手,不是那么容易的,必須要花很大的努力。
從入門教材的選擇上,主要看學(xué)習(xí)者的自身情況。如果已經(jīng)有過學(xué)習(xí)高級語言的經(jīng)歷,那么推薦使用譚浩強的《C++程序設(shè)計》。注意是04年版的,06年版的那本書是閹割版,上來就面向?qū)ο蟆?/P>
雖然說C和C++是相似的,但是前面已經(jīng)說了,C和C++應(yīng)該作為兩種語言來學(xué)習(xí),所以06年的那本內(nèi)容就稍微欠缺一點了。譚浩強04版的這本書內(nèi)容比較規(guī)整的,條理也很清晰。如果有過其他高級語言的基礎(chǔ),那么估計半年就能對C++的概況有個了解了。
譚浩強老師的書已經(jīng)成為了全國各大高等院校的教科書,是比較受到認(rèn)可的。如果是從零基礎(chǔ)開始學(xué)C++,那么推薦使用潘嘉杰的《易學(xué)C++》。這本書是2008年出的新書,聽說是個學(xué)生在讀書的時候?qū)懙?。這本書網(wǎng)上有下載免費的電子版。
這本書主要就是針對初學(xué)者的,講得也比較生動有趣,比較提得起學(xué)習(xí)的興趣。所以沒有基礎(chǔ)的初學(xué)者選這本書也是不錯的,就是想要很快成為高手,可能看這本書還不夠。
至于看完入門的書之后,就應(yīng)該看一些高層次的書了。
比如The C++ Programming Language和C++ Primer,同時也可以向STL、MFC、API等各個方向發(fā)展。如果對別的語言感興趣,還能去看看C#和Java,它們和C++從語法和很多概念上都是類似的。
分析機構(gòu)EvansData定期對開發(fā)人員展開調(diào)查,其調(diào)查結(jié)果與Stroustrup提出的C++正在擴張的說法相違背。EvansData的數(shù)據(jù)顯示,以C++為工具的開發(fā)人員在整個開發(fā)界所占的比例由1998年春天的76%下降至2004年秋的46%。
Forrester***的調(diào)查顯示,C++、微軟VisualBasic和Java是眾多公司產(chǎn)品體系的***語言。對100家公司的調(diào)查顯示,C/C++、VisualBasic和Java在產(chǎn)品體系中的使用比例分別是59%、61%和66%。
傳統(tǒng)上認(rèn)為,C++相對于目前一些新潮的語言,如Java、C#,優(yōu)勢在于程序的運行性能。這種觀念并不完全。如果一個人深信這一點,那么說明他并沒有充分了解和理解C++和那個某某語言。
同時,持有這種觀念的人,通常也是受到了某種誤導(dǎo)(罪魁禍?zhǔn)桩?dāng)然就是那些財大氣粗的公司)。對于這些公司而言,他們隱藏了C++同某某語言間的核心差別,而把現(xiàn)在多數(shù)程序員不太關(guān)心的差別,也就是性能,加以強化。
因為隨著CPU性能的快速提升,性能問題已不為人們所關(guān)心。這叫“李代桃僵”。很多涉世不深的程序員,也就相信了他們。于是,大公司們的陰謀也就得逞了。
一般認(rèn)為,使用Java或C#的開發(fā)成本比C++低。#t#
但是,如果你能夠充分分析C++和這些語言的差別,會發(fā)現(xiàn)這句話的成立是有條件的。這個條件就是:軟件規(guī)模和復(fù)雜度都比較小。如果不超過3萬行有效代碼(不包括生成器產(chǎn)生的代碼),這句話基本上還能成立。
否則,隨著代碼量和復(fù)雜度的增加,C++的優(yōu)勢將會越來越明顯。造成這種差別的就是C++的軟件工程性。在Java和C#大談軟件工程的時候,C++實際上已經(jīng)悄悄地將軟件工程性提升到一個***的高度。
這一點被多數(shù)人忽視,并且被大公司竭力掩蓋。 語言在軟件工程上的好壞,依賴于語言的抽象能力。從面向過程到面向?qū)ο螅Z言的抽象能力有了一個質(zhì)的飛躍。但在實踐中,人們發(fā)現(xiàn)面向?qū)ο鬅o法解決所有軟件工程中的問題。
于是,精英們逐步引入、并拓展泛型編程,解決更高層次的軟件工程問題。(實際上,面向?qū)ο蠛头盒途幊痰钠鹪炊伎梢宰匪莸?967年,但由于泛型編程更抽象,所以應(yīng)用遠遠落后于面向?qū)ο螅?/P>