初學(xué)者應(yīng)該如何去學(xué)習(xí)c++
都說(shuō)Javascript是世界上最受誤解的語(yǔ)言,其實(shí)C++何嘗不是呢。對(duì)于初學(xué)者來(lái)說(shuō)是一道大難題,那么初學(xué)者應(yīng)該如何去學(xué)習(xí)c++?下面是學(xué)習(xí)啦小編分享給大家的初學(xué)者學(xué)習(xí)C++的方法的資料,希望大家喜歡!
初學(xué)者學(xué)習(xí)C++的方法
學(xué)習(xí)C++一定要多問(wèn)幾個(gè)“為什么是這樣”“憑什么要這樣”的問(wèn)題。
比如:很多人知道C++有拷貝構(gòu)造函數(shù)和初始化列表,但你真的知道為什么要有拷貝構(gòu)造函數(shù)?為什么要有初始化列表嗎?為什么要有template,為什么要有RTTI,為什么不是別的呢?難道就是為了讓一門(mén)語(yǔ)言變得Cool一些嗎?完全不是這樣的,C++中的任何一個(gè)feature都有些實(shí)實(shí)在在的原因,你一定要去了解為什么要把C++設(shè)計(jì)成這樣的原因,你才能學(xué)好C++。有空看看《C++演化和設(shè)計(jì)》一書(shū)。
看書(shū),大量的C++書(shū)
你可以按如下先后順序閱讀
《C++ Primer》,這本初級(jí)讀本可能讓會(huì)你啃得很痛苦,所有的語(yǔ)言的特性和為什么都在里面了,好好讀讀。當(dāng)然由C++之父寫(xiě)的《C++程序設(shè)計(jì)語(yǔ)言》也不錯(cuò)。兩本看一本就好了(我看的是前者)。
了解C++的語(yǔ)法僅僅是萬(wàn)里長(zhǎng)征的第一步,你還需要看看《Effective C++》和《More Effective C++》這兩本書(shū)并不厚,但我從02年就一直看到現(xiàn)在,每次讀我都有新的體會(huì),這兩本書(shū)太經(jīng)典了。如果你對(duì)C語(yǔ)言不熟,這兩本書(shū)會(huì)讓你回去補(bǔ)C語(yǔ)言的課。
Think in C++同樣是另一本經(jīng)典之極的書(shū),學(xué)c++必讀,但是中文版的翻譯的很不好,所以還是去讀英文版的吧。
《C++沉思錄》同樣非常值得一讀,這里教的不是編程,而是思考的方法,這是相當(dāng)珍貴的。
《Exceptional C++》和《More Exceptional C++》讓你看看各種問(wèn)題的解決方法和一些常見(jiàn)的經(jīng)典錯(cuò)誤。
《Advanced C++》和《Modern C++》可以讓你知道C++各種神奇的用法。
《泛型編程與STL》是把C++實(shí)踐到了極致的東西。很強(qiáng)大。STL——神一樣的模板庫(kù)(容器,算法和函數(shù)對(duì)象),不得不服。
《深入探索C++對(duì)象模型》讓你了解編譯器下的C++是什么樣的,讓你了解C++的性能并不差。這個(gè)對(duì)于C++的程序員太關(guān)鍵了。我以前寫(xiě)過(guò)的《C++虛函數(shù)表解析》還有《C++對(duì)象內(nèi)存布局》屬于這個(gè)范疇。
和Java語(yǔ)言做對(duì)比
我個(gè)人以為Java對(duì)C++這個(gè)并不成熟的語(yǔ)言做了很多調(diào)整,規(guī)范和限制。所以,對(duì)比一下Java和C++,想一想,為什么一些東西在C++中可以做,但在Java中卻不行。比如:Java的異常是必需要catch的,不然就會(huì)編譯不通過(guò)。為什么Java不提供操作符重載?為什么Java會(huì)引入接口來(lái)做多重繼承?為什么Java沒(méi)有像C++那樣的I/O字符流?為什么Java不支持指針?為什么Java可以做到垃圾回收?等等。Java體現(xiàn)著很多面向?qū)ο笤O(shè)計(jì)的東西,學(xué)習(xí)Java有助于你學(xué)會(huì)怎么更好地使用C++來(lái)編程。
面向?qū)ο笤O(shè)計(jì)
雖然面向?qū)ο罂赡苁莻€(gè)騙局。但是我覺(jué)得面向?qū)ο笤O(shè)計(jì)中的一些實(shí)踐非常的不錯(cuò),比如,單一原則,依賴(lài)倒置原則,等等,都非常地經(jīng)典?!对O(shè)計(jì)模式》必需一讀,《面向?qū)ο蟮姆治龊驮O(shè)計(jì)》可以一讀。但不可以設(shè)計(jì)模式為中心來(lái)編程,而應(yīng)該是用設(shè)計(jì)模式來(lái)解藕。
類(lèi)庫(kù)學(xué)習(xí)
看看MFC是怎么封裝Windows API的,看看ACE是怎么面向?qū)ο蟮?,看看boost是怎么玩面向?qū)ο蟮?,看看CPPUnit又是怎么設(shè)計(jì)的。當(dāng)然,Java的JDK中有太多的設(shè)計(jì)模式,可以參考。
初學(xué)者學(xué)習(xí)C++的建議
1、擺正心態(tài)、心平氣和的學(xué)習(xí)C++,更學(xué)習(xí)C語(yǔ)言、PHP等語(yǔ)言沒(méi)有什么區(qū)別的。
2、不要放過(guò)任何一個(gè)看上去很簡(jiǎn)單的小編程問(wèn)題——他們往往并不那么簡(jiǎn)單,或者可以引伸出很多知識(shí)點(diǎn)。
3、會(huì)用Visual C++,并不說(shuō)明你會(huì)C++;Visual C++只不過(guò)是開(kāi)發(fā)C++程序的一個(gè)工具而已,如果不嫌棄的話(huà),你用系統(tǒng)自帶的記事本寫(xiě)C++程序也是一樣的。
4、學(xué)class并不難,template、STL、generic programming也不過(guò)如此——難的是長(zhǎng)期堅(jiān)持實(shí)踐和不遺余力的博覽群書(shū)。
5、如果不是天才的話(huà),想學(xué)編程就不要想玩游戲——你以為你做到了,其實(shí)你的C++水平并沒(méi)有和你通關(guān)的能力一起變高——其實(shí)可以時(shí)刻記?。簩W(xué)C++是為了編游戲的。
6、看Visual C++的書(shū),是學(xué)不了C++語(yǔ)言的。
7、C++不僅僅是支持面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。
8、學(xué)習(xí)編程最好的方法之一就是閱讀源代碼,光閱讀源代碼也不夠,還要自己親自編寫(xiě)代碼實(shí)踐。
9、在任何時(shí)刻都不要認(rèn)為自己手中的書(shū)已經(jīng)足夠了,也不要在任何時(shí)刻都認(rèn)為自己的C++水平很高了,語(yǔ)言知識(shí)是永遠(yuǎn)也學(xué)不完的。
10、看得懂的書(shū),請(qǐng)仔細(xì)看;看不懂的書(shū),請(qǐng)硬著頭皮看。理解書(shū)中的方法和思想,這個(gè)比記得書(shū)中的代碼還要重要。
11、別指望看第一遍書(shū)就能記住和掌握什么——請(qǐng)看第二遍、第三遍。每看一篇你都會(huì)有新的收獲。
12、不要停留在集成開(kāi)發(fā)環(huán)境的搖籃上,要學(xué)會(huì)控制集成開(kāi)發(fā)環(huán)境,還要學(xué)會(huì)用命令行方式處理程序。新手要先熟悉集成的開(kāi)發(fā)環(huán)境。
13、不要因?yàn)镃和C++中有一些語(yǔ)法和關(guān)鍵字看上去相同,就認(rèn)為它們的意義和作用完全一樣。
14、C++絕不是所謂的C的“擴(kuò)充”——如果C++一開(kāi)始就起名叫Z語(yǔ)言,你一定不會(huì)把C和Z語(yǔ)言聯(lián)系得那么緊密。
15、學(xué)習(xí)編程的秘訣是:編程,編程,再編程。只有不斷的編程,你的動(dòng)手能力才能提高。
16、記住:面向?qū)ο蠹夹g(shù)不只是C++專(zhuān)有的。幾乎每種高級(jí)語(yǔ)言,像PHP、JAVA等都有面向?qū)ο蠹夹g(shù)。
17、既然決定了學(xué)C++,就請(qǐng)堅(jiān)持學(xué)下去,因?yàn)閷W(xué)習(xí)程序設(shè)計(jì)語(yǔ)言的目的是掌握程序設(shè)計(jì)技術(shù),而程序設(shè)計(jì)技術(shù)是跨語(yǔ)言的。
18、當(dāng)你寫(xiě)C++程序?qū)懙揭话雲(yún)s發(fā)現(xiàn)自己用的方法很拙劣時(shí),請(qǐng)不要馬上停手;請(qǐng)盡快將余下的部分粗略的完成以保證這個(gè)設(shè)計(jì)的完整性,然后分析自己的錯(cuò)誤并重新設(shè)計(jì)和編寫(xiě)。
19、每學(xué)到一個(gè)C++難點(diǎn)的時(shí)候,嘗試著對(duì)別人講解這個(gè)知識(shí)點(diǎn)并讓他理解——你能講清楚才說(shuō)明你真的理解了。
初學(xué)者學(xué)習(xí)C++的忠告
1.把C++當(dāng)成一門(mén)新的語(yǔ)言學(xué)習(xí)(和C沒(méi)啥關(guān)系!真的。);
2.看《Thinking In C++》,不要看《C++變成死相》;
3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因?yàn)樗麄兒茈y而我們自己是初學(xué)者所以就不看;
4.不要被VC、BCB、BC、MC、TC等詞匯所迷惑——他們都是集成開(kāi)發(fā)環(huán)境,而我們要學(xué)的是一門(mén)語(yǔ)言;
5.不要放過(guò)任何一個(gè)看上去很簡(jiǎn)單的小編程問(wèn)題——他們往往并不那么簡(jiǎn)單,或者可以引伸出很多知識(shí)點(diǎn);
6.會(huì)用Visual C++,并不說(shuō)明你會(huì)C++;
7.學(xué)class并不難,template、STL、generic programming也不過(guò)如此——難的是長(zhǎng)期堅(jiān)持實(shí)踐和不遺余力的博覽群書(shū);
8.如果不是天才的話(huà),想學(xué)編程就不要想玩游戲——你以為你做到了,其實(shí)你的C++水平并沒(méi)有和你通關(guān)的能力一起變高——其實(shí)可以時(shí)刻記住:學(xué)C++是為了編游戲的;
9.看Visual C++的書(shū),是學(xué)不了C++語(yǔ)言的;
10.浮躁的人容易說(shuō):XX語(yǔ)言不行了,應(yīng)該學(xué)YY;——是你自己不行了吧!?
11.浮躁的人容易問(wèn):我到底該學(xué)什么;——別問(wèn),學(xué)就對(duì)了;
12.浮躁的人容易問(wèn):XX有錢(qián)途嗎;——建議你去搶銀行;
13.浮躁的人容易說(shuō):我要中文版!我英文不行!——不行?學(xué)呀!
14.浮躁的人容易問(wèn):XX和YY哪個(gè)好;——告訴你吧,都好——只要你學(xué)就行;
15.浮躁的人分兩種:a)只觀望而不學(xué)的人;b)只學(xué)而不堅(jiān)持的人;
16.把時(shí)髦的技術(shù)掛在嘴邊,還不如把過(guò)時(shí)的技術(shù)記在心里;
17.C++不僅僅是支持面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言;
18.學(xué)習(xí)編程最好的方法之一就是閱讀源代碼;
19.在任何時(shí)刻都不要認(rèn)為自己手中的書(shū)已經(jīng)足夠了;
20.請(qǐng)閱讀《The Standard C++ Bible》(中文版:標(biāo)準(zhǔn)C++寶典),掌握C++標(biāo)準(zhǔn);
21.看得懂的書(shū),請(qǐng)仔細(xì)看;看不懂的書(shū),請(qǐng)硬著頭皮看;
22.別指望看第一遍書(shū)就能記住和掌握什么——請(qǐng)看第二遍、第三遍;
23.請(qǐng)看《Effective C++》和《More Effective C++》以及《Exceptional C++》;
24.不要停留在集成開(kāi)發(fā)環(huán)境的搖籃上,要學(xué)會(huì)控制集成開(kāi)發(fā)環(huán)境,還要學(xué)會(huì)用命令行方式處理程序; 25.和別人一起討論有意義的C++知識(shí)點(diǎn),而不是爭(zhēng)吵XX行不行或者YY與ZZ哪個(gè)好;
26.請(qǐng)看《程序設(shè)計(jì)實(shí)踐》,并嚴(yán)格的按照其要求去做;
27.不要因?yàn)镃和C++中有一些語(yǔ)法和關(guān)鍵字看上去相同,就認(rèn)為它們的意義和作用完全一樣;
28.C++絕不是所謂的C的“擴(kuò)充”——如果C++一開(kāi)始就起名叫Z語(yǔ)言,你一定不會(huì)把C和Z語(yǔ)言聯(lián)系得那么緊密;
29.請(qǐng)不要認(rèn)為學(xué)過(guò)XX語(yǔ)言再改學(xué)C++會(huì)有什么問(wèn)題——你只不過(guò)又在學(xué)一門(mén)全新的語(yǔ)言而已;
30.讀完了《Inside The C++ Object Model》以后再來(lái)認(rèn)定自己是不是已經(jīng)學(xué)會(huì)了C++;
猜你喜歡:
2.學(xué)習(xí)證券投資學(xué)的體會(huì)