C++程式設計這麼學習,0基礎入門也沒想的那麼難!

2020-08-10 13:42:08

前言

  • 讀者定位是兩類人羣:
    a.初學者,即將入手 C++ 語言、不知道如何開始;
    b.已經開始學習C++許久了,卻進度緩慢,抓不到精髓,倍感迷茫。
  • 本文不會深入到C++語言內部挖掘技術點。
  • 你本就是C++高手,開發經驗豐富,可以對本文提一些建議。
  • 本文將結合小編自己的學習經歷和經驗,談一談 C++ 應該如何學習。

【文章福利】: 小編推薦一個C語言/C++交流羣:836880131!整理了一些個人覺得比較好的學習書籍、視訊資料共用在羣檔案裏面,有需要的可以自行新增~

爲什麼 C/C++?

C++ 是一門程式語言,請注意它僅僅是一門程式語言。這句話的意思就是一旦有人在做語言好壞之爭的時候,一笑而過即可。特定的語言只是用來在特定的領域解決特定的問題,僅此而已,尤其是現在衆多語言紛飛的年代,這句話的正確性不容置疑。

在程式設計領域裏,每個人都會有他/她的入門語言,各持己見。我個人認爲 C 語言是一個很不錯的選擇,語法簡單,深度可深可淺,高階語言的鼻祖。很重要的一點是現今的各種程式語言,或多或少都是 C 語言的衍生品,或者是衍生品的衍生品。語言相通,只要 C 語言學好了,上手其他語言問題不大。C 語言的靈魂在於指針,指針可以幫助你更好的理解記憶體,理解操作系統的工作機理。

C++ 是一門爭議性語言,喜歡研究的人很多,吐槽的(包括一些大神級的人物)的人也很多。在 C/C++ 的時代(C/C++剛出道的時候),語言的可選性較少,所以 C++ 幹了 乾了許多事情,現在時代不一樣了,正如我前面所謂語言紛飛,針對性語言衆多,程式設計師的選擇性也就多了(有很多的優秀的語言可以去學,C#,java,php,python,ruby……),所以 C++ 不再是必須品。

在你開始學習之前,請慎重考慮一下,爲什麼要學?如果考慮好了,請繼續閱讀。

C++新手

選擇一本好書

如果你發現以「數位」命名的書籍,請扔掉!(21天學通C++?)
如果你發現以「通」字樣命名的書籍,請扔掉!(零起點學通C++?C++從入門到精通?)
如果你發現把「Visual」 和 「C++」 聯繫起來的 C++ 教學,請扔掉!(太多了,不舉例了)
如果你發現「void main」作爲範例的書籍,請扔掉!
如果你發現「」作爲範例的書籍,請扔掉!
……

有幾本書可以供你選擇:《C++ Primer Plus》,《C++ Primer》,《C++程式設計語言》

小編入門用的是《C++入門經典》,繼而讀的是《C++ Primer》。其實好書和差書很容易區分,厚度和價位是一個很關鍵的點,通常薄薄的,又便宜,書名卻非常霸氣的告訴你如何精通,那你果斷扔了,想都不要想。

選擇一個好的IDE

請注意我強調的是IDE(整合開發環境),而不是套餐(GCC+VIM/EMACS+GDB+[linux]),對於一個初學者來說,一定要抓住重點。

初學者一定要相信這一點,網上太多人吹噓學 C++ 不應該用 IDE ,就應該直接 文字編輯器+GCC 用 GDB 偵錯,進而言語鄙視 IDE 。我不知道你抱着什麼心態,我只想說你入門是那樣入門的嗎?當時有沒有 IDE ?你瞭解 IDE 嗎?你公司用什麼開發?

對於一個入門新手,一個人性化的偵錯環境是必須的。當然,作爲一個 C++ 程式設計師的話,GCC/GDB 是必須要去瞭解的,linux 也是必須要會的。

C++入門(停留在表面)

參考標準:熟練掌握 C++ 語法結構,瞭解 C++ 主要模組,技術難點。大部分書上可以找到的知識點。

學習 C++ 要不要學習 C ?

作爲這樣的一篇文章,這個探討幾乎是必須要做的。

我的觀點很明確,要學!

因爲我先學 C 語言,後學的 C++ 的,而且學習使用過程中無數次穿插的相互學習。我的程式中從來沒有刻意的區分這是 C 還是 C++,我把握的標準是怎麼樣方便怎麼來。

就好像檔案讀寫我從來都不用 C++ 的檔案流,因爲我習慣了 C 語言的 fread、fwrite、 fopen、 fseek、 ftell 等等。

我是站在語言的語法和庫的角度來說「要學」的。如果你要學物件導向的話,那就沒必要學 C 了,好像也沒有學 C++ 的必要了,你可以選擇一個純物件導向的語言去學物件導向豈不更好。

總結,以我的個人經歷來說,學 C++ 可以先學習 C 語言(觀點已明確,探討結束!)。

要瞭解哪些東西呢?總結是兩點:語法和庫。所有的語言幾乎都是一樣的。

  • 語法[基本型別、標準庫型別、陣列和指針、表達式、語句、函數等]
  • STL[容器,演算法]
  • 模板與泛型程式設計
  • 類與物件導向

語法熟練的是必須的;熟練使用 STL 程式設計,物件導向思想不是一天兩天就可以有的,需要不斷的歷練和實戰才能 纔能培養出來的;物件導向在C++中的實現方式一定要熟(繼承,派生,虛擬函式等);模板的實參演繹要搞清楚。

怎麼學習C語言

希望我整理的 C語言的學習路線,能對你有幫助!

數據型別、變數、記憶體佈局、指針基礎;
字串、一維陣列、二維陣列;
一級指針,二級指針,三級指針,N級指針概念,指針陣列和陣列指針;
結構體、檔案的使用;
動態庫的封裝和設計;
函數指針回撥函數。

配套書籍:

如何實現入門?

  • 看書。《C++ primer》,《C++標準程式庫》,《C++ template》
  • 多思考,多寫小程式。

C++進階(技術研究)

參考標準:內部機理,奇淫技巧

  1. 深入C++內部,探究實現的機理[爲什麼模板不支援分離編譯?虛擬函式/多重繼承是怎麼實現的?型別轉換做了那些事情?例外處理?等]
  2. STL原始碼學習[學習別人的設計方法?爲什麼STL效率高(爲達效率,無所不用其極)?學習數據結構和演算法?記憶體池?RTTI?等]
  3. 記憶體[理解指針運算?記憶體對齊?類的記憶體佈局?new/delete 和 malloc/delete的區別?函數變參的實現?儲存方式?智慧指針?等]
  4. 編譯器在編譯,鏈接的過程中偷偷的做了那些事情。[如何分析編譯器的提示?鏈接錯誤代表可能出現哪些問題?等]
  5. 跟上C++庫的潮流,研究新標準。

如何實現進階?

  • 看書。Effective 系列書籍,《STL原始碼剖析》,《C++標準程式庫》,《C++沉思錄》,《高品質C/C++程式設計》,《C++程式設計思想》,《深度探索C++物件模型》等。
  • 寫軟體,遇到問題之後自己折騰,自己探索。
  • 逛社羣,回答別人的問題。
  • 多看看別人的部落格。
  • 結交自己的技術圈子。

最後給大家幾個忠告來結束本文吧:

  • 多交流:不管你的技術多麼硬,你都不可能一個人做完所有的事情,你要學會與別人合作,與別人交流。交流過程中,要注意交流技巧。學會尊重別人,但要不亢不卑。

  • 多動手:熟能生巧,這是萬能之理。我們乾的是技術活,最能證明自己能力的就是幹!不是扯淡!

  • 多思考:不要做編碼機器。

  • 多總結:相同的問題不可能只出現一次,尤其是在我們這個行業。總結是爲了你在以後更快的解決類似的問題,提高工作效率。

能說的還有很多,讓部落格待續……

文章福利

對於自己找不到視訊、書籍資源的讀者,可以加小編的**C語言/C++交流羣:836880131!**整理了一些個人覺得比較好的學習書籍、視訊資料共用在羣檔案裏面,需要的可以自行新增下載即可~

image.png