「Help」!如何學習C和C++纔不茫然,纔不是亂學?

如何學習C和C++纔不茫然,纔不是亂學?程序員

一、能夠考慮先學習C.算法

  大多數時候,咱們學習語言的目的,不是爲了成爲一個語言專家,而是但願成爲一個解決問題的專家。作一個有用的程序員,作一個賺錢的程序員。咱們的價值,將體如今客戶價值上,而不是語言寫得好很差看。編程

  C++是C的一個面向對象的解釋,C++爲C擴充了大規模工程應用,複雜的系統結構的組織和掌控方法,可是,我認爲,C++骨子裏仍是C的。畢竟,解決具體問題,每一個函數內部,都是用C的方式寫程序,仍是面向過程的。安全

  所以,想要學習好C++,個人建議,先學習C,先學解決問題的能力,再討論解決大問題的能力。就是先學習怎麼走路,再學習怎麼跑步。服務器


 

二、學習C的過程當中,必定要理解結構化編程思惟。網絡

  爲何呢?軟件語言的發展過程,就是一個數據私有化的過程,大型工程應用,強調高內聚,低耦合,模塊化設計,保持代碼最大的靈活性和安全性。架構

  這是現代工程化開發的核心和靈魂。併發

  所以,利用C這門語言入門,藉此理解結構化開發思惟,能夠說是個很方便的路子。由於C的函數,原本就是爲重用作準備的。同時,全局變量和cpp內部私有變量的差異,其使用原則,這些都能學到不少結構化開發思惟。編程語言

三、開始學習C++模塊化

  C++不難學的,不少人以爲C++難學,實際上是由於它在C以外,又提供了不少的概念,尤爲是對象,很難以理解。

  不過我通過這麼多年,把這個問題反而看淡了,我認爲面向對象相對面向過程,僅僅是結構化程序設計的一個具體體現,是編譯器提供手段,強迫程序員必須遵循數據私有化的一個實例,C++和C的關係,最核心的莫過於此。

  如今咱們回到C再看看,若是咱們把一個全局變量,寫到一個cpp裏面,而且在對應的h文件中不聲明,它是否是就只有這個模塊可使用?它是否是就是私有變量,以這個理解,類能明白了嗎?

四、學習C++的深刻技巧

  C++在類的基礎上,通過這麼多年的發展,其實提供了不少深刻的概念,看起來很複雜,其實我看也很簡單。好比模板,個人理解就是「類的類」,你們說是否是?

  既然模板理解了,STL,ATL這些,靜態模板庫,動態模板庫,還難理解嗎?就是一大堆類的類,能夠藉此實現不少應用中須要的類,不須要程序員再本身寫而已。

  ok,STL都理解了,泛型開發還難嗎?所謂泛型開發,其實就是我作一個模板,來定義一套算法規則,可是呢,我但願這個算法規則,能進一步抽象,對核心數據類型不要限死,我把各類數據套進去,均可以用,這樣,僅算法這部分,我不須要重寫了。你想一想是否是這個道理?

  學到這裏,C++和C,其實已經差很少了。再學語言,就是求全責備,過於鑽牛角尖了。

五、學習應用開發

  前面說了,學習語言,目的不是讓別人認爲本身是專家,是爲了寫程序賺錢。所以,語言學完,要學習應用開發。

  什麼叫應用開發呢,我會一門語言,可是,客戶不懂,客戶說的很直接,在Windows下給我寫個程序,我要什麼什麼功能。爲啥Windows呢?由於我習慣。

  OK,不少時候,應用開發要尊重客戶習慣,通常說來,語言這個東東,仍是要結合具體平臺的開發,才能開發出有意義的應用程序賣錢。那麼,通常說來,客戶端是Windows系統,服務器是Linux,這些都是行業習慣,嵌入式很差說,各類平臺都有,Palm,S60,Linux,WinCE,等等。要根據本身的目標客戶來定。

  當咱們選定目標平臺後,有一個問題,選什麼語言,不少時候,學生和商用程序員差異就在這裏,學生通常沒得選,本身會啥就用啥唄,企業裏的程序員不會,要先評估需求,看哪一個語言更合適,不會的語言,要去學。

  ok,假定咱們選了C和C++,那麼,咱們須要選擇開發平臺,Windows下不用說了,VC,這是最好用的,Linux下呢,gcc,其餘的也差很少。

  假如咱們開發VC,而且使用C++,這個時候,才須要考慮學習MFC了,由於這是微軟的標準類庫,至少Windows平臺下,它最權威,你看見沒有,咱們從學習開始,走了多少步,才走到MFC?是否是MFC不是學習C++上來就必須學的?


 

六、學習MFC

  學習MFC,不少人一上來就開始看其體系架構,看得一頭霧水,那個模塊關係依賴圖,我到如今都看不懂。

  呵呵,其實不是啦,和學語言同樣,咱們學MFC的目的,也不是但願成爲MFC的專家,而是要利用MFC開發Windows應用程序,爲咱們賺錢。看見沒?MFC是手段,不是目的,目的是開發Windows程序。

  其實Windows下,有一套很標準的C接口,叫Win32API,這個纔是Windows的標準編程核心,所以,學習MFC,真實的目的是理解Windows程序開發,建議能夠先學習Win32API,看來咱們又回到C了哈,呵呵。剛開始學C有用吧?

七、Win32API

  其實Win32APi不難學的,由於雖然它很大,有不少接口,但不是必須的,咱們真正作個簡單的Windows應用,其實用不到這麼多的。作個簡單的Dialog,而後實現個功能,你遇到的接口函數,其實絕大多數,就是之後經常使用的了。把經常使用的記熟練,就ok了。

  關鍵是,這個時候要經過WinMain方式,去理解Windows的事件機制,這是核心,其實提及來簡單得要死。就是之前你的程序,因爲沒有系統支撐,不少事必須本身作,好比檢查鼠標和鍵盤輸入,你須要寫個死循環,本身不斷去看,而Windows說,這些事你不要作了,我來作比你好。你沒事就玩去吧,我把和你相關的消息放到一個隊列裏,就是你的事件隊列,你本身沒事去找找看,有沒有新消息來,有就作事,沒事就玩好了。很簡單是不?

  固然,Windows是多任務操做系統,有時候,咱們的邏輯須要併發一些功能,好比說,我在等鼠標鍵盤消息的時候,須要再看看打印機準備好了沒有,這裏就須要理解並行計算了,這和語言無關,和操做系統無關,這是另一個話題,這裏很少說了,你能夠本身找找線程開發的相關資料看。

  看見沒,爲了學習好Windows編程,其實咱們不只僅須要學習語言,還要學習操做系統,並行計算原理,內存原理,可能有時候還須要學習網絡通訊,等不少知識,因此說,單憑學習語言,是成不了商用程序員的,一個合格的程序員,須要理解的東西,太多了,要廣爲學習。

  當咱們把Win32API,以及基本的窗口化程序設計理解了,就能夠回到MFC繼續學習了。是否是有點遞歸返回的意思?呵呵。

八、回到MFC

  原來學MFC很難的,由於其封裝了太多細節,很難理解透徹。不過還好,咱們有侯老師的深刻淺出MFC,去找原本看看,如何從Win32API的純C編程,改變爲MFC的C++方式,看這個最快,基本上前6章看完,已經會了,這裏我就很少說了。


 

九、COM

  COM、COM、COM,我最頭疼的COM,呵呵。

  COM就是一種遠程過程調用,即你請求的代碼是在另一個進程中運行的,經過某種通訊協議來回傳遞參數和結果。僅此而已。DCOM進了一步,服務者能夠在另一臺計算機上。在公司開發中,你們可能各作一塊,若是要合做,Windows下建議多使用COM。

  簡單說,COM提供了一種機制,能夠跨進程通訊,甚至跨機器通訊。不過,爲了傳遞各類類型的參數,COM可謂是無所不用其極,它發明了智能指針,能夠指向任何類型的數據,同時,爲了實現智能指針,它使用了大量的C++泛型設計,看見沒,C++的基本功就起做用了,還用到了ATL。

  學習COM,要注意一個接口的概念。因爲開發者是不一樣的人,調用程序和服務程序,可能不是同一種語言,OK,不能簡單提供一個C或C++的。h文件來解答接口,所以,COM提供了標準接口,使用者在程序內部,以查詢方式得到可用接口,進而以接口ID調用很累人的。學會了COM,就能夠多理解一點AcTIveX了,那麼再學習一點dll(動態連接庫)的知識,咱們就已經能夠寫OCX控件了。通常說來,OCX控件是個很好的設計,哪都能用,一個軟件的模塊,最理想是開發成這個樣子,比exe靈活。


 

最後,若是你也想成爲程序員,想要快速掌握編程,趕忙加入學習企鵝圈子!

裏面有資深專業軟件開發工程師,在線解答你的全部疑惑~編程語言入門「so easy」

編程學習書籍:


 

編程學習視頻:

相關文章
相關標籤/搜索