作者 謝恩銘霹琼,公眾號「程序員聯(lián)盟」(微信號:coderhub)。
轉(zhuǎn)載請注明出處凉当。
原文:http://www.reibang.com/p/a8c3a44f57ef
《C++探索之旅》全系列
內(nèi)容簡介
- 前言
- 什么是 C++
- 什么是程序
- 編程語言
- C++ 與其他語言的比較
- C++ 的歷史
- C++ 經(jīng)典書籍
- 總結
- 第一部分第二課預告
1. 前言
親愛的讀者枣申,你是否對 C++ 感興趣,但因為 C++ 看起來很難看杭,或者別人對你說 C++ 挺難的忠藤,你不知道如何下口,哦楼雹,不模孩,是如何下手?
別擔心烘豹,這個系列教程就是為 C++ 初學者準備的瓜贾。當然了诺祸,此課程也適合進階携悯。
不可否認,C++ 是一門非常著名的語言筷笨。幾乎學計算機的同學都難免會接觸一下 C++憔鬼,中國的計算機編程課一般也是先學 C 語言入門,然后學 Java 或 C++胃夏。
當然了轴或,現(xiàn)在有的同學第一門編程語言也有直接學 Python 的⊙鲑鳎可以參看我的《Python探索之旅》 系列教程照雁。
C++ 這門語言的使用很廣泛,特別是在游戲開發(fā)領域答恶,C++ 的性能和無限可能性使得其幾乎獨占鰲頭饺蚊。
我們經(jīng)常聽到說 C++ 是 C 語言的后繼萍诱。實際上,這兩門語言雖然有點像污呼,但還是不一樣的裕坊。C++ 加入了很多新的特性,比如面向?qū)ο缶幊蹋∣bject-Oriented Programmation燕酷,縮寫為 OOP)籍凝。
我一直覺得:學編程,第一門語言最好是 C語言苗缩。我之前寫過一篇文章:第一門編程語言選什么好饵蒂? 。有興趣的朋友也可以學習我的 《C語言探索之旅》 系列教程挤渐。
當然有的朋友見解不同苹享,覺得 Python,Java 等相對比較好上手的語言更適合浴麻。
C得问,C++,Java 這三門語言是可以做到相輔相成软免,融會貫通的宫纬。事實上,C++ 的發(fā)明受了 C 語言的啟發(fā)膏萧,而 Java 的發(fā)明又受了 C++ 的啟發(fā)漓骚。
之后我也會寫Java探索之旅系列。
個人認為:
有了 C 語言的基礎榛泛,再去學 C++ 和 Java蝌蹂,會輕松很多。
當然曹锨,如果你有余力學一下匯編語言孤个,那會更有幫助,請參見我的 學習匯編對編程有什么幫助沛简?如何學習 齐鲤。
在這個系列課程中,我們不僅會一點點帶大家領略 C++ 的奇妙之處椒楣,后面還將帶大家來探索一個 C++ 的庫:Qt给郊。
Qt 這個庫非常強大,已經(jīng)超越了一個庫單純的范疇捧灰,甚至可以說是一套體系淆九。在嵌入式領域,Qt 也大有可為。Qt 開發(fā)也非常方便炭庙,獨有的“信號-槽”的機制可以大大加快開發(fā)速度跪另。
如果當年諾基亞沒有拋棄 Qt,用 Qt 設計的 Meego 系統(tǒng)來搭載手機而不是棄 Intel(英特爾)轉(zhuǎn)投入“霸道總裁” Microsoft(微軟)的懷抱煤搜,那也許 C++ 目前會更火免绿。
2. 什么是 C++
C++ 一般我們也可以寫成 CPP,或者 C Plus Plus( Plus 表示“加上擦盾,更多”的意思)嘲驾。所以從名字上我們就可以看出一點端倪。
既然我們有 C語言迹卢,那 C++ 豈不是意味著“在 C語言的基礎上再多加了一些東西”么辽故?
其實是可以這樣理解的,雖然我們一般還是會把 C 語言和 C++ 看成兩門不同的語言腐碱。但是確實 C++ 的發(fā)明受了 C 語言的啟發(fā)誊垢。
讀者朋友,如果你還有興趣繼續(xù)看下去症见,說明你對編程有一定熱情喂走,或者有興趣想學習編程試試。
幾年前網(wǎng)上有一個視頻谋作,是微軟創(chuàng)始人 比爾·蓋茨芋肠、Facebook 創(chuàng)始人馬克·扎克伯格、Twitter 聯(lián)合創(chuàng)始人杰克·多西以及 Dropbox 聯(lián)合創(chuàng)始人兼 CEO Drew Houston 和 Zappos CEO 謝家華 等遵蚜,同時也包括了體育界和政界的一些明星帖池,比如 NBA 邁阿密熱火隊球星 克里斯·波什 和美國前總統(tǒng) 克林頓 和副總統(tǒng) 戈爾 等聯(lián)合錄制的一個視頻,鼓勵全民學編程吭净。
編程其實沒有那么難睡汹,確實人人都可以學編程的,現(xiàn)在編程的門檻越來越低了寂殉,網(wǎng)上好的教程和資源太多囚巴。新的編程語言也設計得越來越符合人的思維,簡單易用不撑。
在這一課里文兢,我們會嘗試解答大家初遇 C++ 的一些問題晤斩。
不過不要忘了焕檬,這個課程是給初學者的,所以即使你從來沒有寫過一行代碼澳泵,也不知道編程和程序是什么实愚,你也不需要擔心,。
可以說這個系列課程不需要你預先有任何編程知識腊敲,只需要你有閱讀的能力击喂。
我們就是從零開始。當然碰辅,如果你有編程基礎懂昂,那這個 C++ 的課程會更容易學。
唯一需要大家做到的没宾,就是循序漸進地學習這個系列課程凌彬,并且認真獨立完成我們的各種練習題和項目。
準備好了么循衰?C++ 這座“太行王屋山”铲敛,我們來征服它吧!
3. 什么是程序
程序(英語是 program)是信息技術的基礎会钝。你在電腦上可以做各種操作伐蒋,就要歸功于運行在電腦里的各種程序。
在我的 C語言探索之旅 | 第一部分第一課:什么是編程迁酸? 里已經(jīng)做了比較詳細的介紹了先鱼,但是因為這個 C++ 的系列教程是面向初學者的,所以我不厭其煩地再講一遍奸鬓。我盡量不重復型型。
我們先看以下截圖:
上面的截圖,是我在 Windows 操作系統(tǒng)里截取的全蝶。
可以看到闹蒜,我們這里打開了三個不同的窗口,其實就對應了三個不同的程序:
- IE 瀏覽器:可以上網(wǎng)抑淫,我們打開了一個頁面(「程序員聯(lián)盟」的 CSDN 博客)绷落。
- 文件管理器:可以管理 Windows 系統(tǒng)里的各種文件。
- 記事本:Windows 下的基礎文本編輯器始苇。
我們可以看到砌烁,這三個程序設計的目的都是很明確的,各司其職:瀏覽器負責上網(wǎng)瀏覽網(wǎng)頁催式,文件管理器管理電腦的文件函喉,記事本使我們可以編輯文檔。
我們也可以舉一些大家熟悉的游戲荣月,比如超級瑪麗(SuperMario)管呵,百戰(zhàn)天蟲(Worms。非常好玩的游戲哺窄,初中時玩過)捐下,星際爭霸( StarCraft )枣接,等等蹂午。這些也都是程序侧蘸。
上面的截圖就是星際爭霸的游戲畫面配名。怎么樣?很酷炫吧婴程。是不是也想要學好編程去開發(fā)游戲了廓奕?
當然了,現(xiàn)在隨著 Unity 3D 的崛起档叔,開發(fā)游戲比以前容易多了懂从。
星際爭霸 2 的地圖編輯器就是用 C / C++ 來寫的。而一般編寫單機 PC / 主機游戲現(xiàn)在都是 C++ 加上一個腳本語言(比如 Lua蹲蒲,這地方不需要腳本引擎多么高性能番甩,夠用就好)。
所以届搁,是不是對于 C++ 的興趣又濃厚了一點呢缘薛?當然,游戲卡睦,我們開發(fā)是好宴胧,玩游戲喪志我們是絕對不推薦的。
我們上面舉了三個程序的例子表锻,又給大家看了一個星際爭霸(也是程序)的游戲截圖恕齐。可能大家會認為瞬逊,程序就是都能看得見的显歧。但其實并不盡然,并不是所有程序都是可見的确镊。
比如一些后臺運行的服務(service)士骤,或者很多系統(tǒng)程序(比如防火墻,等等)都是不可見的蕾域。雖然不可見拷肌,但是這些程序還是兢兢業(yè)業(yè)地為你工作噢。
雖然上面的星際爭霸的截圖可能讓你很想馬上學會 C++ 編程旨巷,然后開發(fā)屬于自己的游戲巨缘。但是不要急,一口氣是吃不成一個胖子的采呐,只能吹脹一頭牛若锁。
像星際爭霸這樣復雜的大型游戲,需要十多個人(不都是編程懈万,也需要美工拴清,動畫制作等)全時間工作幾年才能開發(fā)出來。所以一開始我們要有耐心会通,可以從一些小程序開始(游戲是一種程序)口予。
在這個系列課程中,我會帶大家一起開發(fā)一些 C++ 程序涕侈,也會有游戲沪停。
4. 編程語言
你的計算機(computer,也稱為“電腦”)真的是一個奇怪又復雜的家伙裳涛,這樣說已經(jīng)算很給它面子了木张。
我們給它傳遞命令,只能輸送給它 0 或 1(因為電腦里面有大大小小的數(shù)不勝數(shù)的晶體管端三,而它們被用來做“開關”舷礼,0 和 1 正好可以用來表示“關閉”或“開啟”這兩個狀態(tài),所以電腦最底層其實都是 0 和 1 這樣的二進制碼)郊闯。
打個比方妻献,我要讓電腦做以下的事:“為我打開一個文件夾”。我實際上輸給電腦的是(是我隨便寫的团赁,我并不知道怎么轉(zhuǎn)換這句話到二進制碼):
010100111011001100111101010
正如你看到的育拨,這就是你的電腦所會的語言,被稱為“二進制語言”欢摄。它也只會這門語言熬丧。可以看到怀挠,這門語言完全不容易理解析蝴。
所以,我們的第一個真正的問題來了:“怎么和電腦對話呢绿淋?難道只能用 0 和 1 嗎嫌变?”
你的電腦既不講中文也不講英語。難道我們也要學這門“二進制語言”嗎躬它?
幸虧不必腾啥。假如用這門語言編寫星際爭霸這樣的游戲,那大概需要一百年吧...
為了簡單起見冯吓,我們的計算機先驅(qū)們就想到:先用其他簡單一些倘待、便于理解的語言(有點像中間人那樣)編寫程序,之后再把它翻譯成電腦的二進制語言组贺。
這類語言就被統(tǒng)稱為“編程語言”凸舵。
當然最不容易的,就是要編寫這樣一個“翻譯”程序失尖。幸虧計算機先驅(qū)們已經(jīng)把這樣的翻譯程序?qū)懞昧税⊙伲覀円矝]必要重新做了(著實松了一口氣)渐苏。
所以我們要做的就是告訴電腦:“為我打開一個文件夾”,這句話會被翻譯成電腦的二進制碼:
010100111011001100111101010
今天菇夸,全球存在上百種編程語言琼富,如果你百度或者 Google 一下,就可以找到一個編程語言的列表庄新。
我們就不一一列舉了鞠眉。這些編程語言不盡相同,各有特色择诈,但是都有一個共同的目的:使我們可以用比二進制碼更簡單的方式和電腦“對話”械蹋。
一般的編程語言都是這樣工作的:
- 我們用一門編程語言(例如 C++ )的指令來寫我們的程序(源代碼)。
- 這些源代碼被一個“翻譯”程序翻譯成電腦能理解的二進制碼羞芍。
- 電腦就能讀取最終的二進制碼哗戈,來執(zhí)行我們要它執(zhí)行的事啦。
我們用一張圖來總結一下:
這個“翻譯”程序的正式名字是:編譯器(compiler)荷科。這是一個必不可少的工具(當然谱醇,對于解釋型語言,如 Python步做,就需要解釋器了副渴。我們暫不深究,大家可以百度一下:編譯型語言和解釋型語言全度。但其實最基本的原理是一樣的:都需要一個“翻譯”程序把源代碼翻譯成二進制碼)煮剧。
那么,我們?nèi)绾卧谶@上百種編程語言中選取一種來學習呢将鸵?哪一個是最好的呢勉盅?C++ 是好的選擇嗎?
其實顶掉,一個程序員通常會幾種編程語言草娜,很少有只會一種的。
就好像我們中國人會說中文痒筒,但一般也會英語吧宰闰。有的人更厲害,會好幾種語言簿透。
當然了移袍,初學編程,我們并不需要幾種語言同時一起學老充,那會分散注意力葡盗。
一開始,我們只要學一種就好了啡浊,等融會貫通了以后觅够,學其他的就簡便很多胶背。比如你英語好,那么學法語就會比只會中文的人更輕松喘先。
好消息是你可以隨自己喜歡钳吟,想先學哪種編程語言就先學哪種。雖然我個人推薦先從 C 語言開始苹祟,當然從 C++ 或 Java 開始也未嘗不可砸抛。你從 Python 開始也可以评雌。
不過既然這個系列課程是關于 C++ 的树枫,那么我們就來看看 C++ 相比于其他編程語言的獨有特色吧。
5. C++ 與其他語言的比較
在上百種編程語言中景东,不可諱言砂轻,有些確實比較著名,而有些卻幾乎無人問津斤吐。
這和人類的語言是類似的:總有那么幾種語言如英語搔涝,法語,西班牙語和措,德語庄呈,日語,中文派阱,是比較流行的诬留,而爪哇語,毛里求斯語贫母,或者非洲某部落的語言文兑,就很少有人學習了。
C++ 毫無疑問是最流行的編程語言之一腺劣,常年位于編程語言排行榜前五名绿贞。
著名的編程語言排行榜 TIOBE 在 2020 年 6 月的榜單:
TIOBE 排行榜是根據(jù)互聯(lián)網(wǎng)上有經(jīng)驗的程序員、課程和第三方廠商的數(shù)量橘原,并使用搜索引擎(如 Google籍铁、Bing、Yahoo!)以及Wikipedia趾断、Amazon寨辩、YouTube 統(tǒng)計出排名數(shù)據(jù),只是反映某個編程語言的熱門程度歼冰,并不能說明一門編程語言好不好靡狞,或者一門語言所編寫的代碼數(shù)量多少。
那么問題來了:是否應該將一門語言的流行程度作為編程首選語言的考慮因素呢隔嫡?
雖然并不是一定的甸怕,但確是一個考量因素甘穿。因為有些語言很有意思或者設計得很好,但使用得不是太多梢杭,比如 Lisp 語言温兼。
如果一門編程語言使用不廣泛,就有個缺點:“技術支持少武契,不容易找到能為你答疑解惑的人”募判。
這也是 C++ 適合作為首選的幾門語言之一的原因。你在這條學習路上不會孤單咒唆,有很多仁人志士都已經(jīng)“上了賊船”届垫,隨時為你保駕護航。
當然了全释,除了流行性装处,編程語言之間的比較還有另一個標準:高級語言還是低級語言。
我們說有些語言是高級語言浸船,另一些則是低級語言妄迁。
這里的“高級”與“低級”并不是好與不好的區(qū)別,而是偏離二進制碼(電腦的機器語言)越遠就越高級李命,越接近人類思維模式就越高級登淘。
一般來說,高級語言使用更簡便封字,編程更快捷黔州。而低級語言往往相對難一些,不過更易于控制電腦周叮。所以說這是雙刃劍辩撑。
那么 C++ 呢?
可以把 C++ 歸為“低級語言”仿耽。再聲明一次合冀,這決不是說它比較低等。你想把它歸為“高級語言”也沒有關系项贺。
“高級語言”和“低級語言”是一種比較而言君躺,如果和二進制碼或者匯編語言相比,那么 C 語言和 C++ 也算是高級語言了开缎。
雖然說 C++ 編程可以是很復雜的棕叫,但是 C++ 卻非常強大,而且運行速度很快奕删。
下圖是一個語言層次的展示:
可以看到俺泣,在上圖中,有一種語言最接近機器的二進制碼語言,那就是匯編(Assembly )伏钠,也是大家有空值得學習的語言横漏。
學習匯編不需要太深入,入門就好熟掂,可以使你更好地理解內(nèi)存機制缎浇,指針是怎么回事,還有電腦工作的一些原理赴肚。
推薦王爽老師的 《匯編語言》 這本書素跺,寫得很好。不枯燥誉券,而且由淺入深指厌。
C++ 的優(yōu)勢
很流行:我們從之前的圖表已經(jīng)看出,C++ 躋身全球最流行的編程語言前列横朋。所以我們可以很輕松地在網(wǎng)上找到很多 C++ 的技術文檔仑乌,編程實踐百拓,也有很多 C++ 的論壇琴锭,你可以提問,查找資料衙传。
運行速度快:算是運行速度非尘鎏快了。這從 C++ 是游戲領域熱門語言就可知曉蓖捶,因為很多大型游戲需要極快的運行速度地回。當然除了游戲,C++ 還被用于金融行業(yè)和軍事的程序俊鱼。
可移植性刻像,跨平臺性:一個同樣的 C++ 程序幾乎可以不加修改地運行在 Windows,Linux 和 macOS 操作系統(tǒng)上并闲,其他系統(tǒng)也類似细睡。我們省去了重寫程序的麻煩。
眾多第三方庫:第三方庫帝火,有點類似語言的插件溜徙,或者擴展。對于編程語言來說犀填,它一定自帶了標準的庫可供調(diào)用蠢壹。比如一些基本的輸入輸出函數(shù),是語言本身的標準庫里定義好的九巡。關于庫和函數(shù)图贸,我們之后的課程再討論。Qt 就是一個很著名的 C++ 第三方庫。我們可以用 Qt 來編寫圖形界面的各種程序疏日。
多種編程方式:我們可以用面向過程的方式編寫 C++ 程序乏盐,也可以用其面向?qū)ο蟮奶匦裕€有 STL 這樣的標準模板庫制恍。這些多樣的形式使得 C++ 異常靈活和強大父能,但是也比較復雜。之后我們都會學到净神。
當然何吝,說了這么多 C++ 的優(yōu)點,并不是說 C++ 就沒有缺陷鹃唯。它也有自己的缺點爱榕,特別是其復雜性∑禄牛可以說 C++ 是目前最復雜的編程語言黔酥。就像 C 語言有不少缺陷和陷阱一樣,建議閱讀 《C陷阱與缺陷》 一書洪橘。
正如上面所說跪者,C++ 算是和 C 語言一樣比較偏底層的語言,這也給了我們直接操作內(nèi)存的能力熄求。但是“能力越大渣玲,責任越大”。假如未能正確使用 C++弟晚,那么我們的程序很容易卡死或者潛伏危機忘衍。
但也沒什么好怕的,這個系列課程就是為了讓大家能夠很好地控制
C++ 這個很厲害的“熊孩子”卿城,讓它成為“功夫熊貓”枚钓。
C++ 程序之初見
為了給大家展示 C++ 程序到底大致是個啥樣子,我們就給出一段 C++ 代碼瑟押,是最基本的:在屏幕上顯示 Hello World
這兩個英文單詞(也就是“你好搀捷,世界”):
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
是不是和 C 語言的 Hello World
例程很像呢?
6. C++的歷史
要說 C++ 的歷史勉耀,就先要回顧一下編程的歷史指煎。編程的歷史雖然不是 long long time ago(很久很久以前),那也是 long time ago(很久以前)了便斥。
一開始至壤,計算機先驅(qū)們編程的時候,可沒有今天那么好的條件呀枢纠。那時候哪有鼠標和鍵盤像街,只能用“打孔卡”這樣的東西:
打孔卡是一塊紙板,在預先知道的位置利用打洞與不打洞(表示開和關,類似 0 和 1 的二進制碼)來表示數(shù)字消息镰绎。
摘自維基百科的小科普:
1801 年脓斩,法國人約瑟夫·瑪麗·雅卡爾發(fā)明了打孔卡用在控制織布機織出的圖案。
1880 年代畴栖,美國人口調(diào)查局職員霍列瑞斯發(fā)明了用于人口普查數(shù)據(jù)的穿孔卡片及機器随静,并用于 1890 年美國人口普查,僅 6 周就完成了統(tǒng)計吗讶。而此前 1880 年美國人口普查的數(shù)據(jù)全靠手工處理燎猛,歷時 7 年才得出最終結果≌战裕霍列瑞斯創(chuàng)建的公司重绷,發(fā)展為今日的 IBM。
1890 年代至 20 世紀初膜毁,穿孔卡廣泛運用在商業(yè)和相關文書昭卓。20 世紀期間,打孔卡應用在單位記錄機作為輸入端瘟滨、處理和計算機程序候醒。早期的數(shù)字電腦運用打孔機已輸入信息的打孔卡當做計算機程序和數(shù)據(jù)的主要輸入媒介。
1928 年室奏,IBM 發(fā)明的 80 列火焰、矩形孔卡片劲装,成為事實上的標準胧沫。其工作原理如下:編號為 0 至 9,總計 10 行占业;以及一塊區(qū)域绒怨,用于第
11、第 12 行(注意谦疾,沒有編號為第 10 的行)南蹂。每列的穿孔組合用于表示單個字符。
IBM 為計算機科學做出如此大貢獻念恍。不愧是“藍色巨人”六剥,百年老字號。
語言的演化史
打孔卡在今天看來當然是極為低效的工具了峰伙,但在當時確實是好發(fā)明疗疟。
時代在進步,我們的編程工具和編程語言也在進步瞳氓。
1958 年:那個時候的電腦可不像今天這么小巧策彤,最大的可以達到一間房子那么大,重達好幾噸,耗電好幾十千瓦店诗,耗資幾十萬美元裹刮。那個時候出現(xiàn)了一種叫做 Algol 的編程語言。
1960 至 1970 年:計算機先驅(qū)發(fā)明了新的語言庞瘸,叫做 CPL捧弃,后來又發(fā)展成為 BCPL。后來被稱為 B 語言擦囊。
1970 年:老爺子 Dennis Ritchie(丹尼斯.里奇)來“踢館”塔橡,發(fā)明了震驚世界的 C語言。C語言是目前絕大多數(shù)編程語言的鼻祖霜第,很多語言就是用 C語言來寫成的葛家,比如 C++,Java泌类,Python癞谒,PHP,等等刃榨。目前仍是使用最多的語言之一弹砚,而且在嵌入式領域舉足輕重。著名的操作系統(tǒng)里都有 C語言的代碼:Unix枢希,Linux桌吃,Windows,macOS苞轿,iOS茅诱,Android,等等搬卒。
1983 年:又過了十幾年瑟俭,我們本課程的主角:C++ 誕生了。C++ 其實是在 C 的基礎上加了很多新的東西契邀,使其變得更加強大摆寄,也能夠用更多的形式編程。
那么問題來了:如果 C++ 被稱為 C語言的一種“演化版本”坯门,那么為什么這么多人還仍舊使用 C語言呢微饥?為什么不直接選擇更完善的 C++ 呢?
因為不是每個人都需要 C++ 帶來的額外功能的古戴。C 語言更接近底層欠橘,所以 Windows,Linux 和 macOS 這樣的操作系統(tǒng)都是用 C 語言為基礎來設計的允瞧。
還有一個原因:C++ 確實比 C 語言更復雜一些简软。如果我可以用水果刀削蘋果蛮拔,那何必用青龍偃月刀呢。
C++ 的設計者
1983 年痹升,Bjarne Stroustrup(本賈尼·斯特勞斯特盧普建炫。這位前輩的名字好難記啊。不過他有個簡稱疼蛾,就是 B.S肛跌,還好不是倒過來... 還是我們 C 語言的發(fā)明人 -- 老爺子 Dennis Ritchie 的名字比較好記,哈哈)發(fā)明了 C++ 語言察郁。原因是他對 C 語言的局限性有些不滿意衍慎,想要發(fā)明一門有更多可能性的語言(結果就把自己搞禿頂了... 這是玩笑)。
摘自百度百科的介紹:
Bjarne Stroustrup 于 1950 年出生于丹麥皮钠,先后畢業(yè)于丹麥阿魯斯大學和英國劍橋大學稳捆,AT&T 大規(guī)模程序設計研究部門負責人,AT&T麦轰、貝爾實驗室和 ACM 成員乔夯,現(xiàn)任德州農(nóng)工大學計算機系首席教授。1979 年款侵,B. S 開始開發(fā)明一種語言末荐,當時稱為 “C with Classes”(帶類的 C ),后來演化為 C++新锈。1998 年甲脏,ANSI/ISO C++ 標準建立,同年妹笆,B. S 推出了其經(jīng)典著作《The C++ Programming Language》的第三版块请。
C++ 語言是以 C 語言為基礎的,支持 C 語言的所有語法和幾乎所有的技術晾浴,因此也有人把 C++ 語言看作是 C 語言的超集负乡。同時 C++ 語言支持面向?qū)ο蟪绦蛟O計方法的所有概念,它是一種非常實用的脊凰、功能極為強大的程序語言,相對而言較難掌握茂腥。
事實證明狸涌,他做到了,C++ 確實很豐富和強大最岗。這也使得很多后繼的編程語言受到 C++ 的啟發(fā)帕胆,比如 Java。
雖然 C++ 這門語言一把年紀了般渡,但是現(xiàn)在仍舊不斷在被更新懒豹。估計設計者們也知道 C++ 比較復雜芙盘,所以在新版本中有把它改簡單一些,也增加更多現(xiàn)代編程元素脸秽。不過我覺得儒老,不管怎么改,C++ 都擺脫不了其復雜性了记餐,哈哈驮樊。
7. C++ 經(jīng)典書籍
《The C++ Programming Language》(《C++程序設計語言》):C++ 之父 Bjarne Stroustrup 寫的書籍,還有比這更權威的么片酝?不過對初學者可能有點難囚衔,就好像 Dennis Ritchie 寫的《C程序設計語言》也是對初學者有點難。不僅對語言雕沿,而且對語言周邊的一些如發(fā)展史练湿、語義哲學都有比較詳細的描述。對語言的描述較為全面审轮,同時包含一部分和程序庫相關聯(lián)的知識鞠鲜,有一定深度,適合有一定編程語言基礎的初學者断国,翻譯質(zhì)量不錯贤姆,價格適中。
《C++ Primer Plus》:適合 C++ 初學者的書籍稳衬。和《C Primer Plus》類似都是不錯的入門教材霞捡。覆蓋面較全,章節(jié)安排比較合理薄疚,由淺入深碧信,也很容易,因此失去了一些深度街夭。價格比較便宜砰碴,但翻譯質(zhì)量略有不足。
《C++ Primer》:久負盛名的 C++ 經(jīng)典教程板丽,其內(nèi)容是 C++ 大師 Stanley B. Lippman 豐富的實踐經(jīng)驗和 C++ 標準委員會原負責人 Josée Lajoie 對 C++ 標準深入理解的完美結合呈枉,已經(jīng)幫助全球無數(shù)程序員學會了 C++。對 C++ 基本概念和技術全面而且權威的闡述埃碱,對現(xiàn)代 C++ 編程風格的強調(diào)猖辫,使本書成為 C++ 初學者的最佳指南;對于中高級程序員砚殿,本書也是不可或缺的參考書啃憎。比《C++ Primer Plus》難一些。
《Effective C++》:C++ 牛人的大手筆似炎,以條款的形式回答了程序員在使用 C++ 時經(jīng)常提出的“應該注意些什么辛萍?”悯姊,“應該避免什么?”贩毕,“應該怎樣去解決悯许?”,“為什么耳幢?” 等問題岸晦。C++ 程序員想要讓自己的水平上升到更高的檔次,此書必看睛藻。價格稍貴启上,有一定難度,不適合初學者店印。
就推薦這四本吧冈在,其他書籍還有很多。其實你能把這四本好好看完按摘、學懂包券,那你就是 C++ 牛人了。如果你英語好炫贤,推薦看原版溅固。
最后,不建議看譚浩強(不管是他的 C 語言書還是 C++ 書兰珍,都不推薦侍郭。學究味重,代碼風格和編碼思想不好(不良代碼風格毀一生)掠河,也常有錯誤亮元,總之越看越暈)。反正唠摹,我個人不推薦“老譚酸菜”的書爆捞。
讀完此文,是不是心中也激動不已勾拉,想要擼起袖子煮甥,好好學一門編程語言呢?其實我我撰寫此文時何嘗不是激動不已呢望艺。
當年我讀《觀止-微軟創(chuàng)建NT和未來的奪命狂奔》這樣的編程報告文學作品時也是心潮澎湃苛秕,對于成為編程大牛無比向往。
其實編程真的很有趣找默,有一種創(chuàng)造和掌控一切的小快感。當然吼驶,不要頭腦發(fā)熱就好惩激。
8. 總結
程序使我們可以在電腦上做很多事情:上網(wǎng)店煞,編輯文檔,操作文件风钻,玩游戲顷蟀,等等。
為了實現(xiàn)各種程序骡技,我們需要用計算機能懂得的指令來寫胰耗。而編程語言就是來做這個活的照瘾,對應的指令我們稱為源代碼(Source Code)。
每種編程語言的語法都不一樣,但是最終交給電腦執(zhí)行前突委,都要先“翻譯”成二進制碼,因為我們的電腦兄只認得 0 和 1 組成的二進制碼滞详。這個將編程語言翻譯成二進制碼的工具被稱為“編譯器”(compiler)暂筝,每種語言有對應的編譯器。
在眾多的編程語言中唆途,C++ 是很流行和執(zhí)行速度相對快的一門語言富雅。可以說 C++ 是 C語言的演進肛搬,因為在 C語言所提供的基礎編程概念上没佑,它還加入了面向?qū)ο蟮木幊棠P秃推渌兀覀冎蟮恼n程會介紹面向?qū)ο筮@一卓越的思想温赔。
9. 第一部分第二課預告
今天的課就到這里蛤奢,一起加油吧!
下一課:C++探索之旅 | 第一部分第二課:C++編程的必要軟件
我是 謝恩銘让腹,公眾號「程序員聯(lián)盟」(微信號:coderhub)運營者远剩,慕課網(wǎng)精英講師 Oscar 老師,終生學習者骇窍。
熱愛生活瓜晤,喜歡游泳,略懂烹飪腹纳。
人生格言:“向著標桿直跑”