如何高效學完c++primer?Blue Espeon2021-09-24 22:53:33

說說自己的經驗。

花半個月到一個月把前八章學完,重點關注第二章,第三章,第六章,第七章和第八章。第二章和第七章涉及到的大量語言細節第一遍可以忽略。比如什麼頂層指標底層指標,委託建構函式,友元等都是初學暫時無關緊要的東西。

重點關注第三章和第六章,第八章。

第三章講的vector和string,即便只用c++的c語法部分+vector+string都能讓日常的編碼舒服很多。第六章講的函式過載是c語言沒有的東西,需要了解。第七章最基本的建構函式還是要明白的,因為到這個節點就要接受c++面向物件的設定,儘可能多逼自己寫class。第八章的檔案流讀取和字串流讀取也能對日常編碼有非常大的幫助。

好了,第八章學完了可以稍微停一停了,接下來第九章,第十章,第十一章都是

資料結構這門課的

,工業級實現的

用法講解。

沒學過資料結構是不會明白什麼時候用vector,list或者map的,也不知道它們的優缺點。如果你沒有資料結構基礎,現在先中斷這本書的學習,去學資料結構。

學完資料結構後你會感嘆資料結構的精妙,甚至有自己動手實現的想法。現在回到這本書,你會發現已經有非常完備的實現了,沒錯,就是C++的STL,這些都會在第九章,第十章,第十一章學習。充斥著大量細節無法消化也沒關係,比如push_back和emplace_back的區別搞不清楚也沒關係,日後用到再查,我們的目的是高效,一遍過。

第十二章講到動態記憶體了。這個時候我們需要同時進軍研究計算機系統了。什麼是堆什麼是棧,淺複製深複製,什麼時候用vector,什麼時候用指向vector的指標。不過這個節點剛學完資料結構,

我建議先去用c++這門語言去Leetcode 刷刷題,連結串列和二叉樹都可以。做連結串列題的時候我們會遇到要new的情況,與此同時會有各種各樣的空指標引用和段錯誤,因為我們在入門的時候被棧保護得太好了,現在接觸堆記憶體肯定會遇到各種各樣奇怪的錯誤。

在踩夠足夠的坑後,來學習這一章,應該會有比較好的認識。

到後面舉步維艱,十三章到十六章都是類設計者的工具。到此步硬啃即為同時接受c++的複雜和一種全新的程式設計正規化—面向物件。

這個節點我建議先去學一下其他語言的面向物件程式設計,Java,python都可以。當學完以後你就可以回來接受第十三章所介紹的,c++給你的複雜兼自由。因為c++可以自己申請記憶體,故c++除了建構函式外還有解構函式,也因此有了一個RAII的用法(Resource Acquisition is Initialization,獲得資源即初始化)。複製建構函式,複製賦值運算子,移動建構函式,移動賦值運算子,右值引用…包括第十四章的各種過載運算子,細節過多,慢慢消化,第一遍可觀其大略。十四章末尾的函式物件可以考慮學一學。

這兩章其實也在同時教讀者如何實現一個string類,vector類和智慧指標類,程式碼千萬不要跳過,照著敲,習題照做。雖然痛苦,但是值得。

十五章,面向物件,繼承,多型,虛擬函式,虛析構,這一章非常重要,一定要掌握,不然之後總會遇到各種各樣的坑。繼承暫時只需要學懂public繼承即可,多型一定要自己編寫幾個比較具象的例子來幫助理解。網上講多型都是透過字母A父類字母B子類這樣描述,但其實每次看的時候都懂了,過一段時間不用就又忘了。比如動物可以繼承出狼,狗,貓,它們都有一個父類方法echo(),比如圖形可以繼承出圓,矩形,三角形,但是父類方法的求周長面積自然也是不同的方法。多舉幾個現實中存在的例子,才能更好地理解多型。最後一小節給了個綜合案例,好好理解對應的繼承樹。

為了更好的理解記憶體模型,有興趣可以進階《深度探索C++物件模型》,對各種面向物件的規則的使用建議可以參考《Effective C++》的部分條款。

十六章,模板,可以看心情決定學不學,不過我是看完了第一節就跳過不看了,以後有需要可以再回來學

十七章的東西都很有趣,很實用,第一節的tuple可以混個臉熟,至少以後大佬在討論這個的時候知道這是個什麼東西。第二節的bitset,有時想把位轉成字串的時候也可以用用它。後面的正則表示式更不用說,畢竟很多人都在抱怨C++的string類,儘管regex編譯速度慢,但作為初學者我們還是需要了解一下正則表示式的使用方法。

這之後的東西,十八章有個名稱空間的使用,可以看一看。再往後還有RTTI和dynamic_cast,以及typeid的用法,簡單瞭解一下即可。

至此一遍學完,之後該書可當作字典使用,輔以cppreference。

如何高效學完c++primer?C十十20年2021-09-25 08:02:42

不值得。老師不講,有幾個人自學能發現其中的錯誤,甚至你連做練習試每個例子的時間都沒有。更麻煩的是例子正確,而敘述是錯誤的,翻譯的書就是這樣難讀。

如何高效學完c++primer?清華鄧博士2021-09-25 12:43:59

c++語言缺陷比較大,不必要學的那麼細,推薦rust,一種從編譯器級別更好的培養你的程式設計習慣和理解的語言

如何高效學完c++primer?Fool2021-09-29 23:39:35

感覺沒必要,把它當成字典不懂翻一下還是很不錯的。