C++的學習方法及書籍推薦
(一)我現在理解的C++
種種原因,很多精力要投入到java的學習和使用中去了,想形成一個學習C++的系列文章,沒有什么風格,也沒有什么時間表,想到哪就去寫。這里把以前自己另外一個ID發表的一篇文章的一部分作為這個系列的第一篇,算是開頭吧。
學習C++重在理解其各種語言設施所代表的語義,以及C++所能表示的語義所代表的設計思想。首先從宏觀上入手,你需要明白的是C++是程序設計語言的本質。在此我把C++最重要的性質寫下來:C++是一門靜態類型檢查,基于C內存模式,支持四種基本程序設計范型的語言。注意,這里說明了三個本質特性,靜態說明了語言的類型檢查性質,基于C內存模式告訴我們在C++中所有與內存有關的操作都需要程序員自己來負責,這樣就帶來了很多設計程序時的需要注意的地方,而理解支持的四種基本范型卻是理解各種語言設施的基礎。然后記住C++的最大的一點設計哲學,也是其貫穿應用C++的一條本質,我引用《C++ PRIMER》中文版前言內的一句話表示--“C++的基礎是各種設施,它們讓用戶能夠通過定義新的數據類型來擴展語言本身,這些新類型可以與內置類型一樣的使用方式(如何理解這句話是關鍵,我的理解是:用戶定義類型可以在任何使用內置類型的時候做為其替代,再具體點說就是用戶定義類型可以象內置類型那樣可以被聲明,其對象可以被初始化,可以相互復制,可以象內置類型對象那樣和很多操作符一起使用,可以被作為參數傳遞給函數,可以作為函數的返回值,可以作為容器的操作對象,用戶定義類型可
以和內置類型一樣作為模板的參數),掌握這些設施(哪些設施?就是讓用戶定義類型可以和內置類型一樣方便使用的設施,包括什么?構造,拷貝,解構函數,操作副重載.....)的第一步就是理解基本語言(什么是基本語言?就是C++中better c部分)。
在此,我還想提出一點十分重要的概念:一門語言的'最本質的東西就是其類型系統,任何語言都有自己的獨特的類型系統,學習C++就是學習他的類型系統。所以首先需要徹底明白什么是數據類型這個概念。這樣你的思路就清楚了,你有選擇,從每一種C++支持的設計范型入手學習。
結構化設計-----也就是C++中的better c部分,你需要在C的基礎上學會函數重載和引用這兩個最重要的語言新特心性。
基于對象----你需要建立C++最強大的概念--類,也就是用戶定義類型,這其實就是數據結構里面接觸的抽象數據類型的概念,以及合理構造使用類的一系列語言措施。并始終記住,在C++進行設計時用類來表示我們需要表示的概念。類也是C++抽象機制里面最核心的概念。
面向對象----在這里你需要知道繼承和多態這樣的OO概念,以及句柄類這樣常見的設計技術,這里你需要明白你開始進入了對接口編程的階段。同時你要學會OO思想,C++的一些設施只是為了把OO思想在語言所支持的語義中充分的表示出來。但是在這里,同時你需要明白的C++能表示的語義是受到其當初語言設計原則限制的(什么原則?靜態類型檢查,不為不需要的東西付出代價,選擇權在程
序員手上語言本身不去強迫程序員的做出選擇),也就是說C++所能表示的OO思想可以稱為具有C++特色的OO思想了。這樣的OO思想和JAVA所代表的純OO哪個更好?沒有定論,因為他們本身的設計理念就不一樣。
泛型設計----這里你需要明白最重要的一點是C++的temlate機制無論其開始建立的初衷是什么,現在他所代表的真實含義是:編譯時類型推導,也就是編譯時多態,由此明白了泛型的核心---把各種類型當作一種抽象條件的具體化,C++有措施可以定義抽象條件嗎?沒有,所以這些條件只能定義在我們自己的心中,但我們可以把具體化的類型當作一種抽象條件實現在template機制中去,從而使tempalte成為比類型推導機制更進一步的東西,那就是抽象條件的推導。也就是說,我們不再把template接受的參數看成是類型,而是把template看成是一種接受抽象條件的機制,無論其類型如何,只要這種類型滿足tempalte所接受的抽象條件就可以作為參數傳遞進去,這樣就代表了一種泛型的思想-----類型不再是根本,抽象條件才是,類型不過是抽象條件的外衣和在C++中的實現方式而已。在結合基于對象和泛型設計這兩種抽象設計模式的技術上誕生的工業產品就是---STL。
(二)書的誘惑
《C++程序設計語言》:如果你只買一本C++書,這本就是你的選擇,作者Bjarne就是讓你做出這樣選擇的全部理由,沒有人能比他更了解什么樣才是真正的使用C++編程了,有人說到這本書語言晦澀,或者對與初學者此書不適合,對此評論我頗不以為然,我看的是中文版,起碼在我看來語言描敘非常到位,我喜歡這樣的技術描敘風格。全書的核心就是告訴你如何去用正確的觀念編寫正確的C++的代碼。強烈推薦。
《C++語言設計與演化》:這本書也是我同時擁有中英兩版的兩本書之一(另外一本是《設計模式》)。如果在得到上面的那本書之后你需要第二本,那么在我看來這就是你的選擇,作者同樣是Bjarne,他將在這本書中告訴你C++的起源與發展,語言原則與本質,各種特性加入的理由和考量,以及幾乎一切關于C++有趣的故事。我閱讀過中英兩版,都是強烈推薦。
《C++標準程序庫》:在AMAZON上面關于C++書籍評論最為火暴的一本。全書對于標準程序庫的介紹可謂深入淺出,而且全書都是從實際運用出發,書中例子簡單卻非常說明問題,加上一些圖表的陳列,使其概念十分清晰,而且從手冊和學習兩方面看都有其存在價值。強烈推薦。
《EFFECTIVE C++ 中文版》:無須多說,在任何C++書籍推薦目錄中都可以找到這本書的身影,盛名之下必無虛士。主要強調的是運用C++的各種特性的時候所必須注意的地方,以及一些比較通用的設計手段。其短小精悍的語言自然非常適合快節奏的現代風格,個人就十分喜歡Meyer的寫作方式。強烈推薦。
《MORE EFFECTIVE C++ 中文版》:做為上本書的姐妹篇,一樣的寫作風格,一樣的寫作目的。只是個人認為和其姐姐相比,存在差距,主要是信息量沒有《EFFECTIVE C++ 中文版》那么大,主要說到了一些C++的設計慣用手法。。
《C++ PRIMER 中文版》:同樣是出自大師之手,作者LIPPMAN,作為早期C++編譯器的實現者之一,對與C++的了解以及該如何論序都有自己的獨到見解。做為C++的百科全書和《C++程序設計語言》有著一樣的地位。但是前者更強調的是C++的語法和其語義,而后者則是以如何用C++進行合理設計做為描敘的中心。全書構思十分巧妙,書的一開始就直接進入C++的主題,前面五章都用類設計一個數據結構,讓讀者完全明白了各種用戶定義類型所代表的抽象能力,然后直接進入第六章標準庫中的容器類,這樣的設計讓讀者十分清楚的建立容器和類這兩個C++中十分重要的概念。這樣的設計針對有一定基礎的C++讀者來說可以說是非常有效果的。但是對于初學者來說,這確實不是一本合適的書籍,因為一上來太多的名詞會把剛剛接觸C++的人嚇著的。
【C++的學習方法及書籍推薦】相關文章:
勵志的書籍推薦08-02
精選C++面試題及答案10-03
青春勵志的書籍推薦08-01
有關勵志的書籍推薦09-23
經典勵志的書籍推薦09-23
職場勵志的書籍推薦07-28
優秀心理書籍推薦06-19
正能量書籍推薦09-25
專業書籍推薦08-04