前言
- 讀者定位是兩類人群:
a.初學(xué)者案疲,即將入手 C++ 語(yǔ)言、不知道如何開(kāi)始麻养;
b.已經(jīng)開(kāi)始學(xué)習(xí)C++許久了褐啡,卻進(jìn)度緩慢,抓不到精髓鳖昌,倍感迷茫备畦。 - 本文不會(huì)深入到C++語(yǔ)言內(nèi)部挖掘技術(shù)點(diǎn)低飒。
- 你本就是C++高手,開(kāi)發(fā)經(jīng)驗(yàn)豐富懂盐,可以對(duì)本文提一些建議褥赊。
- 本文將結(jié)合小編自己的學(xué)習(xí)經(jīng)歷和經(jīng)驗(yàn),談一談 C++ 應(yīng)該如何學(xué)習(xí)莉恼。
【文章福利】: 小編推薦一個(gè)C語(yǔ)言/C++交流群:836880131拌喉!整理了一些個(gè)人覺(jué)得比較好的學(xué)習(xí)書(shū)籍、視頻資料共享在群文件里面俐银,有需要的可以自行添加~
為什么 C/C++尿背?
C++ 是一門(mén)編程語(yǔ)言,請(qǐng)注意它僅僅是一門(mén)編程語(yǔ)言捶惜。這句話的意思就是一旦有人在做語(yǔ)言好壞之爭(zhēng)的時(shí)候田藐,一笑而過(guò)即可。特定的語(yǔ)言只是用來(lái)在特定的領(lǐng)域解決特定的問(wèn)題吱七,僅此而已汽久,尤其是現(xiàn)在眾多語(yǔ)言紛飛的年代,這句話的正確性不容置疑陪捷。
在編程領(lǐng)域里回窘,每個(gè)人都會(huì)有他/她的入門(mén)語(yǔ)言,各持己見(jiàn)市袖。我個(gè)人認(rèn)為 C 語(yǔ)言是一個(gè)很不錯(cuò)的選擇啡直,語(yǔ)法簡(jiǎn)單,深度可深可淺苍碟,高級(jí)語(yǔ)言的鼻祖酒觅。很重要的一點(diǎn)是現(xiàn)今的各種編程語(yǔ)言,或多或少都是 C 語(yǔ)言的衍生品微峰,或者是衍生品的衍生品舷丹。語(yǔ)言相通,只要 C 語(yǔ)言學(xué)好了蜓肆,上手其他語(yǔ)言問(wèn)題不大颜凯。C 語(yǔ)言的靈魂在于指針,指針可以幫助你更好的理解內(nèi)存仗扬,理解操作系統(tǒng)的工作機(jī)理症概。
C++ 是一門(mén)爭(zhēng)議性語(yǔ)言,喜歡研究的人很多早芭,吐槽的(包括一些大神級(jí)的人物)的人也很多彼城。在 C/C++ 的時(shí)代(C/C++剛出道的時(shí)候),語(yǔ)言的可選性較少,所以 C++ 干了許多事情募壕,現(xiàn)在時(shí)代不一樣了调炬,正如我前面所謂語(yǔ)言紛飛,針對(duì)性語(yǔ)言眾多舱馅,程序員的選擇性也就多了(有很多的優(yōu)秀的語(yǔ)言可以去學(xué)缰泡,C#,java代嗤,php匀谣,python,ruby……)资溃,所以 C++ 不再是必須品。
在你開(kāi)始學(xué)習(xí)之前烈炭,請(qǐng)慎重考慮一下溶锭,為什么要學(xué)?如果考慮好了符隙,請(qǐng)繼續(xù)閱讀趴捅。
C++新手
選擇一本好書(shū)
如果你發(fā)現(xiàn)以“數(shù)字”命名的書(shū)籍,請(qǐng)扔掉E摺(21天學(xué)通C++拱绑?)
如果你發(fā)現(xiàn)以“通”字樣命名的書(shū)籍,請(qǐng)扔掉@鲂(零起點(diǎn)學(xué)通C++猎拨?C++從入門(mén)到精通?)
如果你發(fā)現(xiàn)把“Visual” 和 “C++” 聯(lián)系起來(lái)的 C++ 教程屠阻,請(qǐng)扔掉:焓 (太多了,不舉例了)
如果你發(fā)現(xiàn)“void main”作為實(shí)例的書(shū)籍国觉,請(qǐng)扔掉吧恃!
如果你發(fā)現(xiàn)“”作為實(shí)例的書(shū)籍,請(qǐng)扔掉麻诀!
……
有幾本書(shū)可以供你選擇:《C++ Primer Plus》,《C++ Primer》痕寓,《C++程序設(shè)計(jì)語(yǔ)言》
小編入門(mén)用的是《C++入門(mén)經(jīng)典》,繼而讀的是《C++ Primer》蝇闭。其實(shí)好書(shū)和差書(shū)很容易區(qū)分呻率,厚度和價(jià)位是一個(gè)很關(guān)鍵的點(diǎn),通常薄薄的丁眼,又便宜筷凤,書(shū)名卻非常霸氣的告訴你如何精通,那你果斷扔了,想都不要想藐守。
選擇一個(gè)好的IDE
請(qǐng)注意我強(qiáng)調(diào)的是IDE(集成開(kāi)發(fā)環(huán)境)挪丢,而不是套餐(GCC+VIM/EMACS+GDB+[linux]),對(duì)于一個(gè)初學(xué)者來(lái)說(shuō)卢厂,一定要抓住重點(diǎn)乾蓬。
初學(xué)者一定要相信這一點(diǎn),網(wǎng)上太多人吹噓學(xué) C++ 不應(yīng)該用 IDE 慎恒,就應(yīng)該直接 文本編輯器+GCC 用 GDB 調(diào)試任内,進(jìn)而言語(yǔ)鄙視 IDE 。我不知道你抱著什么心態(tài)融柬,我只想說(shuō)你入門(mén)是那樣入門(mén)的嗎死嗦?當(dāng)時(shí)有沒(méi)有 IDE ?你了解 IDE 嗎粒氧?你公司用什么開(kāi)發(fā)越除?
對(duì)于一個(gè)入門(mén)新手,一個(gè)人性化的調(diào)試環(huán)境是必須的外盯。當(dāng)然摘盆,作為一個(gè) C++ 程序員的話,GCC/GDB 是必須要去了解的饱苟,linux 也是必須要會(huì)的孩擂。
C++入門(mén)(停留在表面)
參考標(biāo)準(zhǔn):熟練掌握 C++ 語(yǔ)法結(jié)構(gòu),了解 C++ 主要模塊箱熬,技術(shù)難點(diǎn)类垦。大部分書(shū)上可以找到的知識(shí)點(diǎn)。
學(xué)習(xí) C++ 要不要學(xué)習(xí) C 坦弟?
作為這樣的一篇文章护锤,這個(gè)探討幾乎是必須要做的。
我的觀點(diǎn)很明確酿傍,要學(xué)烙懦!
因?yàn)槲蚁葘W(xué) C 語(yǔ)言,后學(xué)的 C++ 的赤炒,而且學(xué)習(xí)使用過(guò)程中無(wú)數(shù)次穿插的相互學(xué)習(xí)氯析。我的程序中從來(lái)沒(méi)有刻意的區(qū)分這是 C 還是 C++,我把握的標(biāo)準(zhǔn)是怎么樣方便怎么來(lái)莺褒。
就好像文件讀寫(xiě)我從來(lái)都不用 C++ 的文件流掩缓,因?yàn)槲伊?xí)慣了 C 語(yǔ)言的 fread、fwrite遵岩、 fopen你辣、 fseek巡通、 ftell 等等。
我是站在語(yǔ)言的語(yǔ)法和庫(kù)的角度來(lái)說(shuō)“要學(xué)”的舍哄。如果你要學(xué)面向?qū)ο蟮脑捬缌梗蔷蜎](méi)必要學(xué) C 了,好像也沒(méi)有學(xué) C++ 的必要了表悬,你可以選擇一個(gè)純面向?qū)ο蟮恼Z(yǔ)言去學(xué)面向?qū)ο筘M不更好弥锄。
總結(jié),以我的個(gè)人經(jīng)歷來(lái)說(shuō)蟆沫,學(xué) C++ 可以先學(xué)習(xí) C 語(yǔ)言(觀點(diǎn)已明確籽暇,探討結(jié)束!)饭庞。
要了解哪些東西呢戒悠?總結(jié)是兩點(diǎn):語(yǔ)法和庫(kù)。所有的語(yǔ)言幾乎都是一樣的舟山。
- 語(yǔ)法[基本類型救崔、標(biāo)準(zhǔn)庫(kù)類型、數(shù)組和指針捏顺、表達(dá)式、語(yǔ)句纬黎、函數(shù)等]
- STL[容器幅骄,算法]
- 模板與泛型編程
- 類與面向?qū)ο?/li>
語(yǔ)法熟練的是必須的;熟練使用 STL 編程本今,面向?qū)ο笏枷氩皇且惶靸商炀涂梢杂械牟鹱枰粩嗟臍v練和實(shí)戰(zhàn)才能培養(yǎng)出來(lái)的;面向?qū)ο笤贑++中的實(shí)現(xiàn)方式一定要熟(繼承冠息,派生挪凑,虛函數(shù)等);模板的實(shí)參演繹要搞清楚逛艰。
怎么學(xué)習(xí)C語(yǔ)言
希望我整理的 C語(yǔ)言的學(xué)習(xí)路線躏碳,能對(duì)你有幫助!
數(shù)據(jù)類型散怖、變量菇绵、內(nèi)存布局、指針基礎(chǔ)镇眷;
字符串咬最、一維數(shù)組、二維數(shù)組欠动;
一級(jí)指針永乌,二級(jí)指針,三級(jí)指針,N級(jí)指針概念翅雏,指針數(shù)組和數(shù)組指針圈驼;
結(jié)構(gòu)體、文件的使用枚荣;
動(dòng)態(tài)庫(kù)的封裝和設(shè)計(jì)碗脊;
函數(shù)指針回調(diào)函數(shù)。
配套書(shū)籍:
如何實(shí)現(xiàn)入門(mén)橄妆?
- 看書(shū)衙伶。《C++ primer》害碾,《C++標(biāo)準(zhǔn)程序庫(kù)》矢劲,《C++ template》
- 多思考,多寫(xiě)小程序慌随。
C++進(jìn)階(技術(shù)研究)
參考標(biāo)準(zhǔn):內(nèi)部機(jī)理芬沉,奇淫技巧
- 深入C++內(nèi)部,探究實(shí)現(xiàn)的機(jī)理[為什么模板不支持分離編譯阁猜?虛函數(shù)/多重繼承是怎么實(shí)現(xiàn)的丸逸?類型轉(zhuǎn)換做了那些事情?異常處理剃袍?等]
- STL源碼學(xué)習(xí)[學(xué)習(xí)別人的設(shè)計(jì)方法黄刚?為什么STL效率高(為達(dá)效率,無(wú)所不用其極)民效?學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法憔维??jī)?nèi)存池?RTTI畏邢?等]
- 內(nèi)存[理解指針運(yùn)算业扒??jī)?nèi)存對(duì)齊?類的內(nèi)存布局舒萎?new/delete 和 malloc/delete的區(qū)別程储?函數(shù)變參的實(shí)現(xiàn)?存儲(chǔ)方式臂寝?智能指針虱肄?等]
- 編譯器在編譯劫樟,鏈接的過(guò)程中偷偷的做了那些事情藤抡。[如何分析編譯器的提示?鏈接錯(cuò)誤代表可能出現(xiàn)哪些問(wèn)題撤卢?等]
- 跟上C++庫(kù)的潮流素征,研究新標(biāo)準(zhǔn)集嵌。
如何實(shí)現(xiàn)進(jìn)階萝挤?
- 看書(shū)。Effective 系列書(shū)籍根欧,《STL源碼剖析》怜珍,《C++標(biāo)準(zhǔn)程序庫(kù)》,《C++沉思錄》凤粗,《高質(zhì)量C/C++編程》酥泛,《C++編程思想》,《深度探索C++對(duì)象模型》等嫌拣。
- 寫(xiě)軟件柔袁,遇到問(wèn)題之后自己折騰,自己探索异逐。
- 逛社區(qū)捶索,回答別人的問(wèn)題。
- 多看看別人的博客灰瞻。
- 結(jié)交自己的技術(shù)圈子腥例。
最后給大家?guī)讉€(gè)忠告來(lái)結(jié)束本文吧:
多交流:不管你的技術(shù)多么硬,你都不可能一個(gè)人做完所有的事情酝润,你要學(xué)會(huì)與別人合作燎竖,與別人交流。交流過(guò)程中要销,要注意交流技巧底瓣。學(xué)會(huì)尊重別人,但要不亢不卑蕉陋。
多動(dòng)手:熟能生巧,這是萬(wàn)能之理拨扶。我們干的是技術(shù)活凳鬓,最能證明自己能力的就是干!不是扯淡患民!
多思考:不要做編碼機(jī)器缩举。
多總結(jié):相同的問(wèn)題不可能只出現(xiàn)一次,尤其是在我們這個(gè)行業(yè)匹颤〗龊ⅲ總結(jié)是為了你在以后更快的解決類似的問(wèn)題,提高工作效率印蓖。
能說(shuō)的還有很多辽慕,讓博客待續(xù)……
文章福利
對(duì)于自己找不到視頻、書(shū)籍資源的讀者赦肃,可以加小編的C語(yǔ)言/C++交流群:836880131溅蛉!整理了一些個(gè)人覺(jué)得比較好的學(xué)習(xí)書(shū)籍公浪、視頻資料共享在群文件里面,需要的可以自行添加下載即可~