學(xué)習(xí)C++從哪入手?
很多人把學(xué)習(xí)C++語(yǔ)言的過程和學(xué)習(xí)VC++的過程一樣,那就大錯(cuò)特錯(cuò)了,這樣會(huì)給大家?guī)碓S多彎路的,研究很久的VC++后,反過來還是得回過頭來學(xué)習(xí)C++語(yǔ)言,下面說一下學(xué)習(xí)C++感想。
在C#中雖然還沒有對(duì)泛型編程的支持,但是相信在將來也一定會(huì)加入這一功能),模板是C++中比較復(fù)雜的部分,但是作為一個(gè)真正的C++程序員,這部分很重要。尤其是對(duì)C++標(biāo)準(zhǔn)程序庫(kù)的掌握尤為重要。
剛開始的時(shí)候千萬不要直撲VC中的各種向?qū)Ш驮O(shè)計(jì)器。因?yàn)橐蕾囬_發(fā)環(huán)境生成的很多代碼會(huì)把我們搞糊涂,也不利于我們學(xué)習(xí)C++語(yǔ)言本身。我的建議就是生成一個(gè)空的控制臺(tái)工程,然后自己向里面添加文件。
- //robindy/list.cpp
- #include <iostream>
- #include <list>
- using namespace std;
- int main()
- {
- list<char> coll;
- for(char c = \'a\'; c <= \'z\'; ++c)
- {
- coll.push_back(c);
- }
- list::const_iterator pos;
- for(pos = coll.begin(); pos != coll.end(); ++pos)
- {
- cout << *pos << \' \';
- }
- cout << endl;
- return 0;
這段程序用到了標(biāo)準(zhǔn)模板庫(kù),在屏幕上打印字符a~z,其中main函數(shù)的標(biāo)記式只有兩種是被C++標(biāo)準(zhǔn)委員會(huì)接受的,只有以下兩種寫法是符合C++標(biāo)準(zhǔn)的,是可移植的。即:
- int main()
- {
- }
- 和
- int main(int argc, char* argv[])
- {
- }
我不建議初學(xué)者一開始就從模板庫(kù)入手,但是我建議應(yīng)該逐漸地有意識(shí)地學(xué)習(xí)模板庫(kù)。如我們應(yīng)該熟悉cout和cin的用法(位于iostream),而減少使用老式的C函數(shù)庫(kù)中printf和scanf等。
從控制臺(tái)入手的好處就是避免我們理解VC中向?qū)У裙ぞ呱傻钠渌a,整個(gè)程序的流程很清楚。新手學(xué)習(xí)VC的一大難點(diǎn)就是搞不清楚整個(gè)程序的流程(從那條語(yǔ)句開始執(zhí)行,然后從那條語(yǔ)句退出。MFC做了太多封裝,掩蓋了事實(shí)的真相。
通過控制臺(tái)我們可以很快地學(xué)習(xí)C++語(yǔ)言中的很多新特性。如類的封裝、繼承和多態(tài)等。通過這個(gè)時(shí)期的學(xué)習(xí),要能夠掌握三個(gè)東西:C++關(guān)鍵字、語(yǔ)法(重點(diǎn)是和面向?qū)ο笥嘘P(guān)的,以及模板)、學(xué)習(xí)C++感想(知道怎么使用即可,要徹底掌握需要很多時(shí)間和精力)。至于與界面有關(guān)的東東(MFC中很大一部分是與界面相關(guān)的類,所以我認(rèn)為MFC很臃腫而無聊!回頭看過以前用MFC寫的程序,有一種“垃圾”的感覺。)
自己做個(gè)測(cè)試:寫一個(gè)控制臺(tái)程序,在其中體現(xiàn)出類的繼承,函數(shù)重載,動(dòng)態(tài)多態(tài)(通過虛函數(shù)實(shí)現(xiàn)),數(shù)據(jù)封裝,C++標(biāo)準(zhǔn)庫(kù)的運(yùn)用。
如果你能夠輕松搞定,恭喜你,你已經(jīng)通過學(xué)習(xí)C++感想關(guān)了。不過C++實(shí)在是一個(gè)復(fù)雜的東東,其中有各種千奇百怪的語(yǔ)法現(xiàn)象,如果沒有三、五年的功力,千萬不要說自己懂C++。
【編輯推薦】