做者:劉鐵猛 關鍵字:Visual C++ 入門
首先,實事求是地說,個人Visual C++是否是已經入門了,我不敢確定。如今的水平是能看懂一些代碼了,或者說對於VC「脫盲」了。而後您看到的是我在道歉——CSDN本是大雅之堂,我卻把這裏當本身的記事本,很差意思。
「N次失敗,1次成功,還學的不怎麼樣……你也太笨了吧!」若是您有這樣的評價,那麼祝賀您,您已經瞭解了我這人的99.9%。N這個數字具體是多少連我本身也記不清楚,保守地講(N≥6==TRUE)這個表達式是可以成立的。回想個人Visual C++入門過程,一路過來,絕對不是像黃飛鴻的功夫那樣瀟灑精彩,而更像是一顆石頭順流而下,在河牀底摸爬滾打、磕磕碰碰。今天是週末,我就把之前N次失敗留給個人經驗教訓胡寫上幾筆,若是有朋友看到這篇拙文,又恰好打算嘗試一下Visual C++,也就算是我給您留下的莽原一徑吧。
一.C++語言的基礎
提及入門慢,第一個緣由莫過於語言基礎了.高中時期學校組織的微機興趣小組學習的是PASCAL語言(我也不知道爲何要講這個語言,若是說是爲了應付比賽,當時也有C語言組呀),因此在大學轉向Windows編程的時候,我首先選擇了Delphi.大三的時候學校要求考國家二級,二級沒有Delphi,因而又轉向了VB,緣由是VB作起來與Delphi很像。後來發現VB的IDE作的比Delphi好用,並且BASIC語言寫起來簡單,因而便棄Delphi而去(明眼人恐怕又要罵我了,若不是太懶,怎麼會喜歡VB的IDE呢?的確是這樣,後文會提到,懶不只僅是學習VC的大敵,並且懶人是什麼都學很差的)。終年與VB打交道,讓我對C/C++語言很不習慣——我不喜歡C++寫一個句語要打一個分號,我不喜歡大小寫字母要嚴格區分,我不喜歡比較的時候要寫兩個等號,我不喜歡……總之,對C++很沒好感,沒好感也就沒興趣學了(後面提到興趣是至關重要的)。固然若是你如今再問我應該學習什麼語言,我會絕不猶豫地向你推薦C++,由於就經常使用語言而言,C++語言中包含的知識是至關全面的——從面向過程,到基於對象/面向對象,再到模板和範型,能夠說是應有盡有,不誇張地說,別的語言在某種程度上而言是C++語言的子集或者說是在模仿C++、向C++靠攏。
在數次失敗中,給我很明顯的感受就是,不學好C++語言就學習Visual C++純粹是一種自虐。此次入門以前,我花了3個多月的時間系統地學習了C++語言,夠意思吧。而後我信心實足地敲響Visual C++的家門,呵呵,此次她終於肯給面子了。舉個例子吧,在看Dll的調用時,用到「函數指針」,瓜熟蒂落就看下去了,想想若是沒有C++語言的基礎,基本是不可能的。因此說,沒學會中文以前,別看《紅樓夢》,那不是《看圖識字》。奉勸想從VB轉向VC學習的朋友,若是你期望能像學習VB同樣邊學習VC邊學習C++語言,那你可就錯了:)
順便提醒C++語言入門的朋友一點,應該關注ANSI/ISO C++,也就是標準C++了,市面上C++的書參差不齊,不少書是「舊書換新皮」,講的仍然是非標準C++,必定要選好。計算機書很貴,你們不妨找電子版的來看,網上有不少,甚至《C++ Primer》或者《C++沉思錄》這樣的好書也有熱心朋友放到了網上。不過,我最喜歡的是《C++編程金典》這本書,不愧是教育大師寫的書,用來學習很合適。至於編譯器的選擇,若是條件容許就安裝VS.NET2003吧,聽說Visual C++7.1的編譯器是目前對標準C++支持的最好的編譯器了。
二.VC學習資料的選擇
VC入門難有不少緣由,其中不容忽視的一個就是優秀的VC學習資相對較少。C++語言較深,Visual C++用起來複雜,再加上資料少——難上加難。資料少,並不意味着沒有,怎樣選擇或者說挖掘就是關鍵。暫把資料分爲光盤、書籍(包括電子書)和文檔(包括網上的)三類。
在選擇資料方面,你們必定要擯棄中國人思想中的兩大劣根性:<1>坐享其成<2>一晚上暴富。
「坐享其成」的思想會致使趨向於選擇「講課」類的資料,好比多媒體光盤。結果是光盤容量每每不多但又要求內容面面俱到(否則怎麼賣出去呀),這就形成了知識的連貫性差並且講的又飛快,任你一遍一遍地聽,不見成效又打擊信心,最後只能放棄。期待早日有內容豐富,講解精彩的光盤面市。
「一晚上暴富」的思想會讓你趨向於選擇「速成」類教材。那樣的教材大可能是騙人的——能寫個彈出窗口Hello一下World,這就能算是會Visual C++了?咱們仍是不要自欺欺人的好。至少也要能連數據庫、能使用Socket吧……而這些知識怎麼可能「速成」呢?
我有不少Visual C++的學習資料,但沒有一本我是抱着一啃到底的,由於沒有哪本書十全十美,我是交替着使用些資料,這樣作的好處在於:
<1>知識的連貫性好,跳躍性小,進階坡度較小,讀起來舒服。都說Visual C++的學習坡度比較陡,那個陡坡是出如今由單純的C++語言學習轉向Windows編程的時候,C++語言自己的學習並無那麼困難。
<2>有積累效應,這本書講的不精不透,另外一本書會幫你補上,這本書你沒留心,下本書總該長個心眼吧。還有就是一些小例子程序,把MFC的類或者函數拆開來給你看,目的很是明確,效果也不錯。天天學一點,不圖快,圖紮實。呵呵,跟VC搞「面向對象」,固然要一天一點戀愛了。
<3>舉一返三,動手實踐。若是多本書中都把它列爲重點,那就必定要熟記在心並且上機操做,書上的例子必定要分析透徹,不能有「差很少」的思想——差多少算多呢?程序這東東,錯一個字母都不行呀。光看會了還差遠着呢,本身要能寫,並且能對例子進行擴展才行。
<4>內容詳實豐富,這一點上,首推MSDN啦,還有就是在網上能找到的微軟出的Visual C++的叢書,但願譯的電子版,是wdl格式的。雖然MSDN是英文版,但其中的英文並不難——您盡能夠相信我,由於在下的英文水平是奇爛無比的。MSDN有兩種用法,一種是當字典用,由於內容全;一種是當消遣,沒事了看一個類,敲幾行代碼,看到那個MFC的繼承圖了嗎,挺好玩兒的,感受像逛街——並且東西不要錢,help yourself。
互聯網上的資源是很是很是豐富的,千萬不要錯過!好網站和下載站BB皆是。還有論壇、新聞組、在線QQ羣……你問我有哪些?呵呵,遠在天邊近在眼前呀:)
三.內因與外因:「三心二意」和「高手朋友」你有嗎?
啊哦,我不是在開玩笑。「三心」是指
決心,
信心和
耐心。決心來源於動機,說來可笑,我最初動機很簡單,大學時有個朋友,計算機系的,我總認爲我比他聰明(個人天~~~~),他會VC我不會,我就想超過他,如今都畢業兩年了,最初的動機早已經不在了,而學習卻VC已經成了個人心願——最關鍵的一點是個人願望是寫本身的輸入法,而寫輸入法只能用Visual C++去實現,因此我會有決心學好Visual C++。至於信心,有兩次失敗徹底是信心不足形成的,促成此次成功的信心提及來還挺傳奇:我去北京玩兒,回家的火車上一姓趙位老師看見我彆着一個MCP的領章就過來跟我聊天,得知他是一位有着十多年VC開發經驗的程序員,敬意油然而生。聊天的過程當中,趙老師給了我極大的鼓勵和支持——我問他像我這種Wood Head能不能在半年內入門VC,他告訴我,必定能,因而我就堅決了本身的信心,如今恰好是4個月,若是趙老師有機會看到這篇文章——我在這裏謝謝您啦!(花絮:下車,兩個小時後我與女朋友分手了,是被甩呀同志們!隨後的一段日子裏,一直與VC相伴……) 還要說說耐心:若是您已經看到這裏了,說明您頗有耐心(居然能看到這裏尚未拂袖而去),耐心與我的的風格有關,沒耐心的人多半是懶人,懶人什麼都作不成,學習VC就是不能懶,書懶得看,問題懶得問,英語懶得譯……或者是有點挫折就放棄,學好VC是沒期望了。我不知作別人怎樣,反正我是沒少受挫,其實有兩次離入門就那麼一點點了,我放棄了……學VC要越挫越勇,學VC要確定執着,Gogogo!
「二意」是指第一你要感受學習VC有「意思」,二是你要感受學習VC有「意義」。
有意思,就是說你喜歡寫程序,「三心」的源動力來源於你對程序設計的熱愛,不喜歡編程的人可能能學好VB但絕學很差VC。有
意義,就是說你要給本身一個理由:本身都不能給本身一個交待的事情是作不長久的。前面說過,我是爲了寫本身的輸入法,解放中國人的雙手,這個理由夠純潔夠崇高,還有一個理由就是經過學習VC來礪練本身,成爲一個真正的程序員。你能夠有本身的理由,好比提升薪水或者取得認證云云,必定要有!這就像是給本身的「報酬」,沒有報酬只憑激情作事是任何事都作不長久的。
我小小的成功,有嚴重的緣由是由於我有位「高手朋友」——楊W,他是個VC高手,你們會好奇地問:他教你寫什麼呢?是MFC仍是ATL或者是COM?呵呵,都不是,他歷來沒教我寫過一行代碼,但他對個人每一次幫助都彌足珍貴,當我不知道從哪裏查找類庫資源的時候,他告訴我:MSDN;當我不知道從×××到類的成員函數時,他告訴我:在頁面的左下角有一個class member連接,當我問他能不能完成XXXX時,他說:別白費力氣了……在他的幫助下,我少走了不少彎路,這也正是高手朋友的難得之處。在此,我要衷心地說一聲:謝謝!
並非每位學習VC的朋友都有我這麼好的運氣,若是你身邊沒有這樣的朋友也不用着急嗎,我這位好朋友但是常常出沒於CSDN的壇壇裏,明白了?不過,提醒與我同樣的初學者:必定要作一個會問問題的人哦!怎麼作一個會問題的人呢?歸納一下就是:
目的明確,言簡意賅,核心代碼,客氣謙虛。
四.VC入門隨筆
本人寫東西向來思緒凌亂、顛三倒四。剩下好多東西不知道寫到哪裏,沒辦法了,只好叫「隨筆」咯。
……學習VC編程,首先要豎立一個「系統/全局觀」。不管是VB、C#、Delphi,寫程序的時候只須要考慮程序自己就好了,換句話說就是你不用考慮消息是如何映射和傳遞的。而VC寫程序就要多多少少考慮到這些東西。打個比方:之前用VB寫程序,就好像是在一座山上建一個亭子,山是山,亭子是亭子,我只管造亭子就是了;而用VC寫程序,仍是這個亭子,那麼你應該意識到,亭子是山的亭子,是山的一部分而不是一個孤立的建築。「亭子」就是程序,「山」就是Windows系統,亭子的地基是山留給建築的「接口」,也就是API了……
……VC相對VB入門難,一上來不是像VB那樣給個窗體從頭作起,並且AppWizard要分好幾步,每一步裏還有一大堆不知所云的選項,不等生成一個程序就已經暈頭轉向了。怎麼辦呢?一句話,從對話框程序入手,由於它最簡單,生成的類最少,並且相對是與VB編程最「像」的。在對話框程序裏,你能夠充分練習添加類和成員變量或者成員函數。……不過我有一點始終搞不明白,由易到難是對話框程序、單文檔程序、多文檔程序,在AppWizard裏微軟爲何不按這個順序排列,非要倒着來呢?成心跟咱們這些初學的作對!(國罵省去)……
……又是沒大寫……又是少分號……又是少一個等號……提醒VB轉過來的程序員,別總像我這麼沒記性哦!
……仍是提醒那些學習了VB或者是VB.NET/C#的DDMM,MFC的類雖然是面向對象的,但它沒有「屬性」這個概念地!不要期望有Me.TextBox1.Text="Hello World!"這樣的語法,C/C++是函數型的語言,類已經把「屬性」封裝成了成員變量,那些私有的成員變量你看不到,只能經過函數來更改——this->myTextBox.SetWindowText("Hello World!");……
……暈,原來Win32程序和MFC程序不是一回事呀(看看,這就是一本爛書帶給個人,讓我一直覺得Win32程序就是MFC程序,直到拜讀《深刻淺出MFC》時才恍然大悟)……
……VC好仍是VB好?(拜託,別再問這種無聊的問題了)……
……VC的確能作底層,但不是最底層;VC的確功能強大,但不是萬能的——拿手術刀切西瓜或者用菜刀動手術都不對……
……VC高手都是用記事本寫程序的:笑不笑由你……
……VC程序員比VB程序員強:呵呵,毛主席說過,武器不是戰爭勝利的決定因素……
……在快速開發工具(RAD)中,控件與後臺代碼是捆綁在一塊兒的,而MFC的「控件類」不同,它的「資源」(或者說是皮)與「類」(或者說是瓤)是分開的,要經過ClassWizard把它們「粘」起來……
……若是說C++是一種程序設計語言,那麼Visual C++中的C++語言不如叫「Windows語言」更合適——Visual C++就是在編程Windows,用到的宏或者Windows數據類型和Windows結構數不勝數,作好心理準備哦!……
……個人天,那麼長的函數或者結構都要一個字母一個字母寫呀!呵呵,按一下Ctrl+J看看發生了什麼?我就奇怪了,幾乎沒看到有書上提醒咱們的初學者要這樣去作。這但是着實嚇跑了很多初學者呢!(至少我就被嚇跑過)。器利工善,咱們要把IDE用熟哦,微軟送的好禮物可不能浪費……
……不少書在添加完對新話框類以後都寫着要在主對話框類裏手動添加對這個新類頭文件的引用,何須呢?用添加成員變量的方法添加這個新對話框類的實例,頭文件自動引用,一箭雙鵰。一句話:儘可能多用Class Wizard,能不手寫的地方就不手寫……
五.virtual BOOL LongWayToGo(void){ //頭一次寫文章,其中Bug確定少不了,你們一塊兒來DeBug。 //因爲是入門級文章,若是有錯誤,極可能影響初學者學習,恐誤人子弟,有錯必糾! //但願你們多提寶貴意見,幫助我前進,謝謝先! //這是虛函數,留待有所得時續之後文。我還有很長的路…… return TRUE; }