不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(xué)習(xí)啦 > 學(xué)習(xí)方法 > 通用學(xué)習(xí)方法 > 學(xué)習(xí)經(jīng)驗 > 怎么才能快速有效的學(xué)習(xí)c++

怎么才能快速有效的學(xué)習(xí)c++

時間: 欣怡1112 分享

怎么才能快速有效的學(xué)習(xí)c++

  C++儼然已成為一門貴族語言,成為了編程界最重要的語言之一。那么怎么才能快速有效的學(xué)習(xí)c++?以下是學(xué)習(xí)啦小編分享給大家的有效的學(xué)習(xí)c++的方法,希望可以幫到你!

  有效的學(xué)習(xí)c++的方法

  C++是最難的語言

  這個世界上最難的編程語言可能非C++莫屬了。你千萬不要以為幾天就可以學(xué)好C++,C++的學(xué)習(xí)曲線是相當BT的,你可以看看這篇文章。C++是一門很自由的語言,自由到了有點BT和恐怖的地步。我甚至認為C++并不是一門成熟的編程語言,因為太容易犯錯了。所以,你一定要在一開始就要有很小心謹慎的態(tài)度,并把C++當成一種難以訓(xùn)服的猛獸來看待。

  多問“為什么要這樣”的問題

  學(xué)習(xí)C++一定要多問幾個“為什么是這樣”,“憑什么要這樣”的問題。比如:很多人知道C++有拷貝構(gòu)造函數(shù)和初始化列表,但你真的知道為什么要有拷貝構(gòu)造函數(shù)?為什么要有初始化列表嗎?為什么要有template,為什么要有RTTI,為什么不是別的呢?難道就是為了讓一門語言變得Cool一些嗎?完全不是這樣的,C++中的任何一個feature都有些實實在在的原因,你一定要去了解為什么要把C++設(shè)計成這樣的原因,你才能學(xué)好C++。有空看看《C++演化和設(shè)計》一書。

  看書,大量的C++書

  你可以按如下先后順序閱讀

  《C++ Primer》,這本初級讀本可能讓會你啃得很痛苦,所有的語言的特性和為什么都在里面了,好好讀讀。當然由C++之父寫的《C++程序設(shè)計語言》也不錯。兩本看一本就好了(我看的是前者)。

  了解C++的語法僅僅是萬里長征的第一步,你還需要看看《Effective C++》和《More Effective C++》這兩本書并不厚,但我從02年就一直看到現(xiàn)在,每次讀我都有新的體會,這兩本書太經(jīng)典了。如果你對C語言不熟,這兩本書會讓你回去補C語言的課。

  Think in C++同樣是另一本經(jīng)典之極的書,學(xué)c++必讀,但是中文版的翻譯的很不好,所以還是去讀英文版的吧。

  《C++沉思錄》同樣非常值得一讀,這里教的不是編程,而是思考的方法,這是相當珍貴的。

  《Exceptional C++》和《More Exceptional C++》讓你看看各種問題的解決方法和一些常見的經(jīng)典錯誤。

  《Advanced C++》和《Modern C++》可以讓你知道C++各種神奇的用法。

  《泛型編程與STL》是把C++實踐到了極致的東西。很強大。STL——神一樣的模板庫(容器,算法和函數(shù)對象),不得不服。

  《深入探索C++對象模型》讓你了解編譯器下的C++是什么樣的,讓你了解C++的性能并不差。這個對于C++的程序員太關(guān)鍵了。我以前寫過的《C++虛函數(shù)表解析》還有《C++對象內(nèi)存布局》屬于這個范疇。

  和Java語言做對比

  我個人以為Java對C++這個并不成熟的語言做了很多調(diào)整,規(guī)范和限制。所以,對比一下Java和C++,想一想,為什么一些東西在C++中可以做,但在Java中卻不行。比如:Java的異常是必需要catch的,不然就會編譯不通過。為什么Java不提供操作符重載?為什么Java會引入接口來做多重繼承?為什么Java沒有像C++那樣的I/O字符流?為什么Java不支持指針?為什么Java可以做到垃圾回收?等等。Java體現(xiàn)著很多面向?qū)ο笤O(shè)計的東西,學(xué)習(xí)Java有助于你學(xué)會怎么更好地使用C++來編程。

  面向?qū)ο笤O(shè)計

  雖然面向?qū)ο罂赡苁莻€騙局。但是我覺得面向?qū)ο笤O(shè)計中的一些實踐非常的不錯,比如,單一原則,依賴倒置原則,等等,都非常地經(jīng)典?!对O(shè)計模式》必需一讀,《面向?qū)ο蟮姆治龊驮O(shè)計》可以一讀。但不可以設(shè)計模式為中心來編程,而應(yīng)該是用設(shè)計模式來解藕。

  類庫學(xué)習(xí)

  看看MFC是怎么封裝Windows API的,看看ACE是怎么面向?qū)ο蟮模纯碽oost是怎么玩面向?qū)ο蟮?,看看CPPUnit又是怎么設(shè)計的。當然,Java的JDK中有太多的設(shè)計模式,可以參考。

  C++11新語言

  1.RAII和標準庫

  以前學(xué)C和C++,在C/C++中的堆內(nèi)存的動態(tài)分配,以往都是教條式的強調(diào)malloc/free、new/delete、new[]/delete[]一定要匹配使用!千萬不要忘記!而且不能free/delete多次!者雖然不是什么技術(shù)問題,但是人畢竟是人,難免不出錯。而RAII的技巧,就是利用stack上的臨時對象生命期的性質(zhì),當臨時對象超過作用域的時候析構(gòu)函數(shù)會被自動調(diào)用,于是利用程序自動管理的這一特點,可以將資源的釋放操作封裝在一個臨時對象中自動銷毀,改變以往的手動申請和釋放的模式。在C++11中,幾乎絕大多數(shù)類型,通過一些技巧或者包裝,都可以保證其到達作用域結(jié)束的時候被正確的析構(gòu)掉,而且是異常安全的。所以理論上,通過C++11標準的程序,理想狀態(tài)下不需要new/delete方式來管理對象了,使用智能指針、智能鎖等工具重新組織你的工程,從資源管理的泥淖中解脫出來。

  其次,據(jù)說C++新標準中有2/3的篇幅是關(guān)于容器和算法庫。當然有人一直爭論這些容器和算法庫不應(yīng)當作為一個語言的標準這種形式存在,否則語言的標準將會不斷的膨脹。但是作為實用主義來說,這些標準容器和標準庫的存在可以大大增加開發(fā)進度,同時別人調(diào)試好的數(shù)據(jù)結(jié)構(gòu)和算法也更容易開發(fā)出穩(wěn)定的程序來。

  2. Boost庫

  前面說過,Boost庫算是C++標準的試驗田,諸位C++大牛都會把特性想法在這里開發(fā),然后好的東西會被C++標準委員會吸納進正式標準,比如C++11中智能指針就是從Boost中引入的。但是如陳碩老師所言,Boost庫規(guī)模龐大,但也不能盲目盡信之,好的東西譬如如智能指針、noncopyable等可以直接用,免去自己制造垃圾輪子,而且可以借鑒取其實現(xiàn)思路和方法,以增長功力。但是也有些庫用到的技術(shù)晦澀難懂,和實際使用有所脫節(jié),而且可能效率很低。當然這些甄別取舍也是門技術(shù),慚愧自己到達那份功力還路途遙遠。

  還有需要注意的是,很多的東西在Boost和C++11標準中都有一份,雖然大體功能相似,但是還是有些差異,比如:std::unique_ptr可以傳遞deleter函數(shù),但是boost::scoped_ptr卻不支持??磦€人感覺吧,但是建議不要混用,因為即使std::shared_ptr和boost::shared_ptr等價,但是函數(shù)調(diào)用參數(shù)卻不這么認為。

  3.編譯速度非常慢

  C++的運行速度不慢,但是由于現(xiàn)在的庫中引入了大量的模板類,而模板的解析、實例化、編譯等很很需要計算量。一個十來個文件的小項目在筆記本上要干一分多鐘,實在忍受不了。網(wǎng)上搜羅的解決方式有:

  (1). PCH預(yù)編譯頭部

  照網(wǎng)上的說法是建立一個頭文件xxx.hpp,包含在項目中常用穩(wěn)定的頭文件,然后編譯這個頭文件生成同名xxx.gch的預(yù)編譯頭結(jié)果,后續(xù)在項目中包含xxx.hpp就會直接使用xxx.gch預(yù)編譯結(jié)果,從而減少編譯時間。我照著做了,沒效果,在stackoverflow上面問了好久About g++ not working with pre-compiled headers pch,也沒人鳥我。

  不知道是GCC的BUG還是我的姿勢不對,后面試試Clang吧。我覺得這種預(yù)編譯頭還是挺有用的,如果有預(yù)編譯結(jié)果會得到優(yōu)化,如果沒有也能正常編譯,可惜這里暫時不能用。

  (2). ccache緩沖

  問了羅劍鋒,他說ccache應(yīng)該可以優(yōu)化編譯效率,不過我還沒試。

  C++基礎(chǔ)到高級方法指南

  C/C++入門階段

  剛?cè)腴T的時候我們主要是學(xué)習(xí)培養(yǎng)編程思維和動手能力,深刻理解面向過程和面向?qū)ο蟮乃枷敕椒?/p>

  所以學(xué)習(xí)語言更為重要

  C語言的學(xué)習(xí):

  數(shù)據(jù)類型、變量、內(nèi)存布局、指針基礎(chǔ);字符串、一維數(shù)組、二維數(shù)組;一級指針,二級指針,三級指針,N級指針概念,指針數(shù)組和數(shù)組指針;結(jié)構(gòu)體、文件的使用;動態(tài)庫的封裝和設(shè)計;函數(shù)指針回調(diào)函數(shù)。

  學(xué)習(xí)C++語言:

  面向?qū)ο缶幊趟枷?類的封裝,構(gòu)造和析構(gòu)、靜態(tài)成員、對象管理;類的構(gòu)造(有參構(gòu)造函數(shù)、無參構(gòu)造、拷貝構(gòu)造、默認構(gòu)造函數(shù))和析構(gòu);對象動態(tài)管理、友元函數(shù)、友元類、操作符重載; C++編譯器對象管理模型分析;類對象的動態(tài)管理(new/delete);友元函數(shù)和友元類;運算符重載(一元運算符、二元運算符、運算符重載難點、項目開發(fā)中的運算符重載);類的繼承、多繼承及其二義性、虛繼承;多態(tài)(概念、意義、原理剖析、多態(tài)案例);虛函數(shù)、純虛函數(shù)、抽象類(面向抽象類編程思想案例);函數(shù)模板、類模板,模板的繼承。

  C++類型轉(zhuǎn)換;C++輸入輸出流(標準I/O 文件I/O 字符流I/O);C++異常處理(異常機制、異常類型、異常變量、異常層次結(jié)構(gòu)、標準異常庫);利用一些IDE開發(fā)工具:諸如Windows平臺VC系列:VC++6.0(比較古老) ;Visual Studio2013, Visual Studio2015;Mac平臺的XCode系列,還有CodeBlock,另附一些高級編輯器Notepad++, EditPlus,UE等一些開發(fā)工具的常用設(shè)置和一些常見快捷鍵的使用。

  二、C/C++開發(fā)進階

  在第二階段學(xué)習(xí)的時候,就是比較重要的了,C/C++開發(fā)的進階之路,更是一個讓自己找份薪水比較體面的工作的籌碼。

  C++進階之STL:

  STL = Standard Template Library,即標準模板庫。這是提高開發(fā)效率的極品工具。通過學(xué)習(xí)此階段,應(yīng)掌握泛型編程技巧,理解容器類在C++語言中的應(yīng)用模式,以及熟練掌握全部STL類的使用方法。

  C++進階之設(shè)計模式:

  決定一個項目成敗最重要的因素是項目總體的設(shè)計,通過本階段的學(xué)習(xí),可掌握面向?qū)ο缶幊讨兄匾囊画h(huán),是編碼前建模的技巧所在。單例模式;工廠模式;代理模式;迭代模式等,這些都是你要掌握的哦。

  C++進階之數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):

  這是所有編程語言中最應(yīng)該學(xué)習(xí)的部分,程序組成的基礎(chǔ)之一。順序存儲、鏈式存儲、循環(huán)鏈表;

  雙向鏈表、棧(順序和鏈式)、隊列(順序和鏈式);

  棧的應(yīng)用、樹基本概念及遍歷、二叉樹;

  排序算法、并歸算法、選擇、插入、快速、希爾。

  以上這些內(nèi)容你知道嗎?

  C++進階之UI界面開發(fā):

  掌握QT類庫構(gòu)架,圖形界面開發(fā)模型;

  掌握QT開發(fā)技巧,消息機制,圖形處理;

  掌握QT網(wǎng)絡(luò)編程,UDP,TCP使用方式;

  掌握QT文件處理方式,序列化;

  掌握QT在windows,linux,ios,android不同平臺下的移植技術(shù)

  C++進階之Unix/Linux網(wǎng)絡(luò)服務(wù)器:

  掌握Unix/Linux平臺開發(fā)方式;

  熟練使用系統(tǒng)調(diào)用;

  熟練Unix/Linux內(nèi)存管理,進程,線程調(diào)度;

  熟悉網(wǎng)絡(luò)服務(wù)器開發(fā)方式,熟練編寫TCP,UCP網(wǎng)絡(luò)服務(wù)程序;

  掌握同步/異步IO模型在網(wǎng)絡(luò)編程中的使用方式。

  C++進階之數(shù)據(jù)庫開發(fā):

  掌握SQL語言的實用技巧。

  Oracle,MySQL數(shù)據(jù)庫的使用方式。

  如果你能熟練掌握以上列出的技能,具備解決復(fù)雜問題和技術(shù)難點的能力,而且你能獨立開發(fā)一些比較復(fù)雜的功能模塊,這個時候月薪過萬都是小意思了!

  三、C++開發(fā)高級

  這就是所謂的程序員大牛了,當下炙手可熱的全棧開發(fā)工程師,既曉前端,又通后臺??焖俣ㄎ粏栴},解決問題對他們來說已是小菜一碟,就是人們常說的神秘大牛,只在公司技術(shù)攻關(guān)的時候才會才看到他們的身影。

 ?、俅穗A段軟件開發(fā)工作所需的知識和技能相對較難,高級軟件工程師編碼熟練度和規(guī)范性需要達到一定要求;

  ②具備一定的項目能力(包括調(diào)試能力、文檔編寫能力、測試能力等)和綜合技術(shù)素質(zhì)(包括對軟件生命周期的理解、對設(shè)計模式的理解、必備的行業(yè)知識和經(jīng)驗等);

 ?、哿私庵髁鞯暮笈_技術(shù)和前后端協(xié)作方式,能從全局角度理解項目的整個生命周期。

猜你喜歡:

1.程序設(shè)計學(xué)習(xí)心得

2.程序設(shè)計基礎(chǔ)學(xué)習(xí)心得

3.c語言學(xué)習(xí)心得體會

4.程序設(shè)計學(xué)習(xí)心得體會3篇

5.編程語言用什么方法學(xué)習(xí)

熱門文章

3799404