關(guān)于我們
書單推薦
新書推薦
|
白話C++之練功
《白話C 》分練功和練武兩冊(cè)。練功主講編程基礎(chǔ)知識(shí)、C 語(yǔ)言語(yǔ)法(含C 11、14等)及多種編程范式。具體包括:大白話講解計(jì)算機(jī)架構(gòu)、進(jìn)程、內(nèi)存、二進(jìn)制等編程概念;手把手教復(fù)雜編程環(huán)境的安裝應(yīng)用;快速感受C 語(yǔ)言概貌及圖形界面、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、多線程等功能庫(kù);深入淺出地講解C 語(yǔ)法、標(biāo)準(zhǔn)庫(kù)常用組件及面向過(guò)程、基于對(duì)象、面向?qū)ο、泛型等四種編程范式的演化與對(duì)比。
本書借助生活概念幫助用戶理解編程,巧妙安排知識(shí)交叉,讓讀者不受限于常見的控制臺(tái)下編程,快速感受C 編程的樂(lè)趣,提升學(xué)習(xí)動(dòng)力。本書適合作為零基礎(chǔ)C 編程學(xué)習(xí)從入門到深造的課程教材。本書也是《白話C 之練武》的學(xué)習(xí)基礎(chǔ)。練武的重點(diǎn)內(nèi)容有:標(biāo)準(zhǔn)庫(kù)(STL)、準(zhǔn)標(biāo)庫(kù)(boost)、圖形界面庫(kù)編程(wxWidgets)、數(shù)據(jù)庫(kù)編程、緩存系統(tǒng)編程、網(wǎng)絡(luò)庫(kù)編程和多媒體游戲編程等。
作者以講故事的形式展開教學(xué),內(nèi)容生動(dòng)有趣,簡(jiǎn)單易懂。書中源碼全可下載,方便讀者學(xué)習(xí)。
(一)
2000年的時(shí)候我開始寫《白話C 》。那時(shí)候流行個(gè)人主頁(yè),就在搜狐網(wǎng)站上申請(qǐng)了一個(gè)域名:mywlbcyl,取沒(méi)有彎路,編程搖籃的拼音首字母,主要發(fā)表自己寫的C 入門課程。 然后,就走了10多年的彎路,當(dāng)年要有搖籃里的寶寶跟我學(xué)C ,現(xiàn)在都該讀大學(xué)了,F(xiàn)實(shí)比這更殘酷,跟著我的課程學(xué)習(xí)的人,當(dāng)年多數(shù)是風(fēng)華正茂的小鮮肉,現(xiàn)在都成大叔了。就說(shuō)和我簽訂出書合同的胡編輯,轉(zhuǎn)眼成了兩個(gè)娃的爹。 可我的書還一直在搖籃里。 所以我肯定是一個(gè)拖延癥加完美臆想癥的嚴(yán)重綜合患者,但我還是想找客觀原因:C 的教程真的好難寫,特別是結(jié)合我的想法和目標(biāo)時(shí)。 (二) 十幾年寫一本書,要說(shuō)是好事也可以。比如這十幾年來(lái),無(wú)論是C 還是我,都成熟了好多。 先說(shuō)C 。新標(biāo)準(zhǔn)的制定與出臺(tái),各家編譯器的進(jìn)化,越來(lái)越多的開源C 項(xiàng)目、基于C 新標(biāo)準(zhǔn)的優(yōu)秀書籍的出現(xiàn),都是C 長(zhǎng)足發(fā)展的標(biāo)志。還有一點(diǎn),那就是人,當(dāng)然我想特指中國(guó)人,前面提到的標(biāo)準(zhǔn)、編譯器的實(shí)現(xiàn)、開源項(xiàng)目等,都有越來(lái)越多的中國(guó)C 程序員參與其中。從人的因素出發(fā)很容易又能發(fā)現(xiàn):C 編程的氛圍也在變好。想當(dāng)年有一個(gè)奇怪的氛圍:說(shuō)到C 就是VC,說(shuō)VC就是MFC。2000年前后我曾在某論壇上發(fā)表了有關(guān)MFC設(shè)計(jì)不足之處的一些淺見,立刻淹沒(méi)在一大波網(wǎng)友唾棄的口水中,F(xiàn)在,盡管C 早已不是編程語(yǔ)言上的一哥,但受益于多本經(jīng)典C 書籍的流行,以及發(fā)達(dá)的網(wǎng)絡(luò)和時(shí)間的沉淀,甚至也受益于更多其他編程語(yǔ)言的流行,使用者對(duì)這門語(yǔ)言的認(rèn)識(shí)越趨成熟了(相信對(duì)其他語(yǔ)言也是)。 再說(shuō)說(shuō)我的成長(zhǎng)。從二十多歲到四十多歲;從寫幾萬(wàn)行C 代碼到幾十萬(wàn)行代碼;從只玩C/C 到在工作中用PHP、Java、C#、Delphi和Python,還學(xué)習(xí)了D語(yǔ)言、Go語(yǔ)言和JavaScript(Node)等;從嵌入式工控程序到Office桌面軟件;從C/S結(jié)構(gòu)到B/S結(jié)構(gòu),甚至偶爾充當(dāng)全棧工程師。大約就是,周一寫JavaScript HTML CSS,周二寫后臺(tái)分布式服務(wù),周三改數(shù)據(jù)庫(kù)結(jié)構(gòu),周四換了一套相對(duì)整潔的衣服去拜訪客戶、講PPT,周五人事和我說(shuō):幫忙面試個(gè)人吧?周末?就像今天一樣,白天補(bǔ)覺,晚上改《白話C 》書稿。 東忙西忙的日子里,我偶爾也回想起大學(xué)畢業(yè)剛走上社會(huì)的那幾年,覺得自己懂人生、懂社會(huì)、也懂編程,現(xiàn)在才發(fā)現(xiàn)這三樣我哪樣都沒(méi)能參透。所以我覺得自己應(yīng)該是成熟了一些,并且覺得幸虧因?yàn)橥涎影Y或者就是懶惰,沒(méi)有在10年或更早前寫完本書!栋自扖 》的目的是幫助他人學(xué)習(xí)C ,而那時(shí)我對(duì)目標(biāo)中的幫助他人學(xué)習(xí)和C 的理解都流于淺顯粗鄙,這樣子寫出來(lái)的書對(duì)讀者真有幫助嗎? (三) 十?dāng)?shù)年過(guò)去了,中間有近一年的時(shí)間,我安排自己到培訓(xùn)機(jī)構(gòu)兼職教C 編程,非常辛苦也沒(méi)什么錢可賺。學(xué)習(xí)上,我自己買的以C 為主的編程書籍近百本,閱讀網(wǎng)絡(luò)下載幾十個(gè)開源C/C 項(xiàng)目源代碼;實(shí)踐上,我在許多軟件項(xiàng)目中掉進(jìn)去、爬出來(lái)的坑,大大小小感覺像是青春期永不消停的痘,有一天突然全被填平了。不管怎樣,根據(jù)一項(xiàng)技能你學(xué)習(xí)5000(或者更多點(diǎn),8000)小時(shí)就能成為業(yè)界專家的定律,我覺得自己對(duì)程序員、對(duì)編程技術(shù)以及程序員怎么學(xué)習(xí)和應(yīng)用編程技術(shù)的認(rèn)識(shí),都上了新的臺(tái)階。我慢慢地將這些認(rèn)識(shí)寫進(jìn)這本書里,一稿、二稿、三稿不斷興奮地寫下,又不斷沮喪地推翻;大家百度白話C ,應(yīng)該可以找到數(shù)個(gè)版本。 在反復(fù)改寫的過(guò)程中,最重要的一個(gè)認(rèn)識(shí)是:學(xué)習(xí)C 應(yīng)該既練功又練武。沒(méi)錯(cuò),我把學(xué)習(xí)C 語(yǔ)言分成練功和練武兩件事。 習(xí)武之人說(shuō)的武功,功通常是身體素質(zhì)、內(nèi)氣外力;而武是招式(可以外延到十八般武藝)。關(guān)于這二者,有句老話叫練武不練功,到老一場(chǎng)空,意思是光練把式,不練氣力,就容易止于花拳繡腿,一生難成高手。但在另外一個(gè)方向上,我記得霍元甲在創(chuàng)建迷蹤拳時(shí)曾經(jīng)說(shuō)(電視里的):練功不練武,都是白辛苦。說(shuō)的是另一個(gè)極端:你苦練內(nèi)功,馬步一扎特別穩(wěn)實(shí),卻什么拳法招式都不練,什么兵器也不學(xué),就會(huì)變成空有一身力氣使不出來(lái),白辛苦。轉(zhuǎn)了個(gè)笑話加深大家對(duì)這種尷尬局面的理解,說(shuō)是一個(gè)練鐵布衫的和一個(gè)練金鐘罩的比武,兩人都一動(dòng)不動(dòng)地呈現(xiàn)入定狀態(tài),裁判在邊上哭著說(shuō),你倆扛得住,我扛不住啊! 那么編程行業(yè)中,什么是功呢?廣義上講,計(jì)算機(jī)原理、網(wǎng)絡(luò)協(xié)議、算法、語(yǔ)言語(yǔ)法、編譯原理、設(shè)計(jì)模式都可以歸為功。而類似如何創(chuàng)建一個(gè)窗口如何提交一個(gè)網(wǎng)頁(yè)的表單網(wǎng)頁(yè)局部刷新的AJAX技術(shù)怎么用某某語(yǔ)言解析XML用哪個(gè)類怎么實(shí)現(xiàn)JSON和對(duì)象的互換如何訪問(wèn)MySQL數(shù)據(jù)庫(kù)如何在數(shù)據(jù)鏈路上加入緩存哪家的短信服務(wù)器好用又便宜安卓系統(tǒng)如何實(shí)現(xiàn)消息推送以及Linux下的進(jìn)程掛掉時(shí)怎么快速重啟等這些問(wèn)題的答案,統(tǒng)統(tǒng)是武。 再進(jìn)一步限定范圍到編程新人如何學(xué)習(xí)C ,我將功限定在C 語(yǔ)言語(yǔ)法和編程范式(面向過(guò)程、基于對(duì)象、面向?qū)ο、泛型編程)等基礎(chǔ)知識(shí)上,但凡對(duì)C 有一定了解的人,都清楚這已經(jīng)可以寫成厚厚的一本書了。以語(yǔ)言為主要教學(xué)內(nèi)容的《C Primer》或《C 程序設(shè)計(jì)語(yǔ)言》的厚度便是佐證。武的方面則挑選來(lái)自標(biāo)準(zhǔn)庫(kù)STL及準(zhǔn)標(biāo)準(zhǔn)庫(kù)boost中的常用工具,桌面GUI編程、并發(fā)編程、數(shù)據(jù)庫(kù)(MySQL)訪問(wèn)、緩存(Redis)訪問(wèn)、網(wǎng)絡(luò)編程以及僅限于自?shī)首詷?lè)的簡(jiǎn)單多媒體游戲編程等。 武強(qiáng)功弱的C 工程師,通常解決實(shí)際問(wèn)題的能力還不弱。項(xiàng)目要用到網(wǎng)絡(luò),就找個(gè)網(wǎng)絡(luò)框架照著搭起來(lái);項(xiàng)目要用到視頻處理就找些視頻代碼改改用。C 語(yǔ)言的特點(diǎn)是一方面很復(fù)雜很龐大,一方面只需學(xué)習(xí)一小部分(比如帶類的C語(yǔ)言)就可以寫程序,甚至可以一招鮮、走遍天。這就造成部分人在學(xué)習(xí)階段就急于動(dòng)手出成績(jī)甚至上崗賺錢。如此情況下,當(dāng)他們面對(duì)復(fù)雜問(wèn)題時(shí),往往采用堆砌代碼等方式完成,一個(gè)人做到底看似很快,想要在團(tuán)隊(duì)分工中讓別人看懂他的代碼就很困難了。并且所寫的代碼往往缺少合理的設(shè)計(jì),在需求變化幾次之后,整個(gè)代碼就膨脹得像生氣的河豚。 再說(shuō)說(shuō)那些練功不練武,都是白辛苦的同學(xué)。C 語(yǔ)言還有個(gè)特點(diǎn),就是它的標(biāo)準(zhǔn)庫(kù)僅為有高度共性、高度抽象的邏輯提供功能,許多實(shí)際項(xiàng)目經(jīng)常用到的業(yè)務(wù)功能統(tǒng)統(tǒng)沒(méi)有。想象丁小明(本書中的重要人物)捧了一本厚厚的C 書籍辛苦學(xué)了一年,上班時(shí)才發(fā)現(xiàn)老板是這么要求的:聽說(shuō)QQ是C 寫的,你來(lái)寫個(gè)類似的窗口。聽說(shuō)C 寫的程序性能好,你寫個(gè)網(wǎng)絡(luò)服務(wù)端,要求不高,1秒鐘撐1萬(wàn)次訪問(wèn)就好。聽說(shuō)游戲引擎基本是C 寫的,你開發(fā)個(gè)萬(wàn)人在線游戲吧。聽說(shuō)Photoshop也是C 寫的,你寫個(gè)程序批量美化下公司年會(huì)上的照片吧。難嗎?不好說(shuō),只是丁小明清楚地記得學(xué)習(xí)所用的那本C 書籍快1 000頁(yè)了,但從頭到尾沒(méi)出現(xiàn)過(guò)網(wǎng)絡(luò)、窗口創(chuàng)建、游戲和圖片處理等。丁小明很郁悶。 本書是《白話C 》上冊(cè),重點(diǎn)負(fù)責(zé)功的部分。講C 基本語(yǔ)法也講二進(jìn)制,講編程環(huán)境如何搭建也講面向過(guò)程基于過(guò)程和面向?qū)ο蟮染幊谭妒,等等。下?cè)負(fù)責(zé)武,講解如何用C 寫窗口圖形界面程序、多線程并發(fā)程序、網(wǎng)絡(luò)通信程序、數(shù)據(jù)庫(kù)程序和小游戲程序等具體技能。 (四) 關(guān)于如何學(xué)習(xí)C ,我的第二個(gè)認(rèn)識(shí)是:你沒(méi)辦法學(xué)一遍就能精通C 。事實(shí)上學(xué)習(xí)再多遍恐怕也精通不了,但請(qǐng)相信:剛開始學(xué)習(xí)時(shí),通讀一遍,練習(xí)一遍,再回頭重新學(xué)習(xí)一遍,會(huì)比一節(jié)節(jié)死摳過(guò)去,結(jié)果一年時(shí)間未能讀完一冊(cè)的效果要好。C 中有許多知識(shí)點(diǎn)是交叉的,比如指針和數(shù)組,指針可以指向數(shù)組,數(shù)組的元素可以是指針,數(shù)組作為函數(shù)入?yún)r(shí)會(huì)退化成指針。因此二者誰(shuí)放前誰(shuí)放后都有合理之處,學(xué)習(xí)完前面的有利于學(xué)習(xí)后面的,但學(xué)習(xí)了后面的同樣有利于進(jìn)一步理解前面的。拉長(zhǎng)鏡頭看《白話C 》,許多篇章之間,甚至跨越上下冊(cè)之間,都存在后面內(nèi)容對(duì)前面內(nèi)容進(jìn)行驗(yàn)證或補(bǔ)充的安排。另一方面,許多復(fù)雜的知識(shí),在靠前的章節(jié)就簡(jiǎn)略提及,這是刻意地對(duì)知識(shí)點(diǎn)做交叉學(xué)習(xí)的安排。最典型的如下冊(cè)中的許多內(nèi)容,在上冊(cè)一開始就會(huì)有不求甚解的快速涉獵,讓學(xué)習(xí)者感受C 的能量,避免一直埋頭在黑乎乎的控制臺(tái)窗口,誤以為自己只能用C 寫一些玩具代碼。 以30天背30個(gè)英語(yǔ)單詞為例,若一天就背30個(gè),連續(xù)背30天;其效果通常要比第一天背第1個(gè),第二天背第2個(gè),一直背到第30個(gè)要好。機(jī)械記憶尚且如此,更何況是充滿有機(jī)關(guān)聯(lián)的編程語(yǔ)言呢? 作為一個(gè)極端的反例,學(xué)習(xí)編程語(yǔ)言一定不要過(guò)早追求100%精確,更不要沉迷于當(dāng)語(yǔ)言律師。網(wǎng)上流傳一個(gè)小視頻,說(shuō)是一位幼兒園老師想教會(huì)小朋友關(guān)于小鳥聽到槍聲會(huì)受驚嚇飛走的知識(shí),于是設(shè)計(jì)了一個(gè)問(wèn)題:樹上停著七只鳥,獵人打了一槍后,樹上剩下幾只鳥?沒(méi)想到所有小朋友都很冷靜,第一個(gè)問(wèn):有沒(méi)有耳聾的鳥?第二個(gè)問(wèn):有沒(méi)有膽子大、神經(jīng)大條的鳥?第三個(gè)問(wèn):有沒(méi)有哪只鳥和死去的那只鳥的感情深厚,堅(jiān)決要留下殉情的?好嘛,為了回答老師那個(gè)看似簡(jiǎn)單的問(wèn)題,這一下涉及到生理、心理和鳥類感情等方方面面的知識(shí),這樣的教學(xué)還如何進(jìn)行呢? 《白話C 》第一章為讀者圈出學(xué)習(xí)的最低起點(diǎn),書的課程以該起點(diǎn)逐步推演。因此,許多知識(shí)點(diǎn)會(huì)反復(fù)出現(xiàn),而且在不同的出現(xiàn)階段會(huì)有不同的解釋。靠后的解釋相對(duì)全面、規(guī)范、簡(jiǎn)潔、深刻;靠前的解釋就難免片面、粗淺、啰嗦甚至牽強(qiáng)很可能低于您已有的水平,此時(shí)請(qǐng)各位一笑而過(guò)。 當(dāng)然,以上有關(guān)不求甚解的說(shuō)法,并非鼓勵(lì)大家蜻蜓點(diǎn)水、囫圇吞棗般地學(xué)習(xí)。正確的方法應(yīng)當(dāng)是:遇上問(wèn)題,加以思考;一時(shí)思考不出答案,應(yīng)善于上網(wǎng)搜索;勤于編寫程序測(cè)試或驗(yàn)證結(jié)果以及與人交流請(qǐng)教;如果還是不能解疑,也沒(méi)必要卡在原地,可以做上標(biāo)記,繼續(xù)往下學(xué)習(xí)。 (五) 書中除了普通正文之外,還設(shè)置了課堂作業(yè)小提示重要危險(xiǎn)和輕松一刻等小段落。各自的作用和學(xué)習(xí)的要點(diǎn)如下: 課程作業(yè):一定要現(xiàn)場(chǎng)做,所謂現(xiàn)場(chǎng)就是不往后看新內(nèi)容,立馬做。出于排版需求,有一些作業(yè)并未單獨(dú)成段,而是直接寫在普通段落中。另外,更為重要的是,只要課程中出現(xiàn)示例代碼,基本上要求讀者親自動(dòng)手寫程序并編譯、測(cè)試通過(guò)。 小提示:和當(dāng)前課程內(nèi)容有一定的相關(guān)性,用于輔助解釋當(dāng)前課程的部分內(nèi)容。碰上時(shí)能看懂最好,但如果個(gè)別無(wú)法理解也不用放在心上,通常并不影響繼續(xù)閱讀后文。 重要:長(zhǎng)遠(yuǎn)看都是重要的知識(shí)點(diǎn),雖然現(xiàn)在一時(shí)讀不懂不會(huì)影響繼續(xù)學(xué)習(xí),但長(zhǎng)遠(yuǎn)看會(huì)影響關(guān)鍵知識(shí)的運(yùn)用。因此應(yīng)努力閱讀,如果不懂應(yīng)做標(biāo)記,以期下一次閱讀能理解、掌握。 危險(xiǎn):如果現(xiàn)在搞不懂,很可能往下(特別是需要寫代碼時(shí))沒(méi)多長(zhǎng)時(shí)間就要出問(wèn)題的知識(shí)點(diǎn)。 輕松一刻:主要用于調(diào)節(jié)學(xué)習(xí)氛圍,讓大家偶爾放松,但也存在部分內(nèi)容同時(shí)發(fā)揮小提示的作用,可當(dāng)成相對(duì)有趣的小提示來(lái)看。當(dāng)然出于行文的需要,也有大量輕松一刻的內(nèi)容會(huì)以更加一本正經(jīng)的方式躲在正文中。 (六) 希望《白話C 》能幫到正在或正要學(xué)習(xí)C 的廣大讀者。感謝購(gòu)買本書。限于個(gè)人能力,加上篇幅大,前后反復(fù)修改大,請(qǐng)讀者多提寶貴意見,以期持續(xù)改進(jìn)。 感謝一直信任我,也一直在為本書努力的編輯。 感謝我的父母。未能在我的父親離世之前完稿,是我今生至憾。感謝我的妻女,是你們一直在鞭策和鼓勵(lì)我。我一直以為《白話C 》會(huì)是我的二女兒,可是書還沒(méi)面市,家里二寶出生了,都上幼兒園了,這書要屈居老三。 幫助我完成本書的還有我的同事、朋友、同行、老師以及學(xué)生,一并感謝。以下是致謝名單:涂祺招、劉弘釗、胡海、王嫣琪、盧淼先、吳宸勖、顏閩輝、肖華、林起柄、揭英杰、陳婷婷、張曉曉、陳曉鋒、白偉能、林柏年、盧毅、楊文、羅海翔、莊淵、賴錦波、潘代淦。 請(qǐng)?jiān)诒本┖娇蘸教齑髮W(xué)出版社官網(wǎng)的下載專區(qū)或者在第2學(xué)堂網(wǎng)下載本書源碼。
莊嚴(yán),筆名南郁;20年IT從業(yè)經(jīng)歷,從一線研發(fā)人員到企業(yè)副總工、技術(shù)總監(jiān)。雖然不同崗位有不同職責(zé),但從未放棄過(guò)編程。編寫過(guò)嵌入式、字處理軟件、語(yǔ)言解釋器、手機(jī)應(yīng)用、大型分布式網(wǎng)絡(luò)服務(wù)和互聯(lián)網(wǎng)商城等軟件系統(tǒng)。
現(xiàn)為程知信息公司創(chuàng)始人,致力于將自身的技術(shù)、學(xué)習(xí)過(guò)程、成長(zhǎng)歷程、對(duì)內(nèi)對(duì)外的技術(shù)培訓(xùn)、大學(xué)院校培訓(xùn)課程以及常年參與技術(shù)員面試的心得體會(huì)、經(jīng)驗(yàn)教訓(xùn)形成相關(guān)課程。
第1章啟蒙1
1.1開始1 1.2什么是計(jì)算機(jī)4 1.2.1馮·諾依曼版4 1.2.2白話 C 版5 1.3什么是硬件、軟件6 1.4什么是程序7 1.4.1什么是指令7 1.4.2指令兼容8 1.4.3程序=指令的邏輯組合8 1.4.4程序vs軟件9 1.5什么是編程語(yǔ)言9 1.5.1機(jī)器語(yǔ)言10 1.5.2機(jī)器語(yǔ)言的字母10 1.5.3二進(jìn)制(基礎(chǔ))11 1.5.4匯編語(yǔ)言11 1.5.5高級(jí)語(yǔ)言12 1.5.6編程思維13 1.5.7從C到C 14 1.6什么是IDE15 1.7你是程序員17 1.8出發(fā)贈(zèng)言19 第2章準(zhǔn)備20 2.1基礎(chǔ)知識(shí)20 2.1.1開源協(xié)議20 2.1.2庫(kù)是什么20 2.1.3庫(kù)長(zhǎng)什么樣子21 2.1.4學(xué)習(xí)哪些庫(kù)22 2.1.5準(zhǔn)備安裝目錄22 2.1.6更多支持22 2.2安裝IDECode::Blocks23 2.2.1檢查MinGW環(huán)境23 2.2.2安裝Code::Blocks23 2.2.3升級(jí)Code::Blocks24 2.2.4安裝MinGWw6424 2.2.5試運(yùn)行25 2.2.6配置IDE26 2.3系統(tǒng)編譯環(huán)境變量29 2.4安裝wxWidgets30 2.4.1下載31 2.4.2編譯31 2.4.3檢查32 2.5安裝boost33 2.5.1下載33 2.5.2輔助工具34 2.5.3編譯34 2.5.4檢查35 2.6安裝MySQL35 2.6.1搞清楚位數(shù)36 2.6.2安裝MySQL37 2.6.3安裝MySQL管理客戶端38 2.6.4安裝MySQL 32位C語(yǔ)言客戶端庫(kù)39 2.7安裝MySQL 39 2.7.1輔助工具39 2.7.2下載39 2.7.3編譯39 2.7.4安裝40 2.8配置Code::Blocks全局變量41 2.8.1新建全局變量集:d2school42 2.8.2全局路徑變量wx42 2.8.3全局路徑變量boost43 2.8.4全局路徑變量mysql44 2.8.5全局路徑變量mysqlpp44 第3章感受(一)45 3.1Hello world經(jīng)典版45 3.1.1向?qū)Э刂婆_(tái)項(xiàng)目45 3.1.2初識(shí)代碼47 3.1.3頭文件48 3.1.4標(biāo)準(zhǔn)輸出cout50 3.1.5名字空間51 3.1.6函數(shù)52 3.1.7主函數(shù)54 3.1.8注釋55 3.2Hello world中文版56 3.2.1字符集和編碼56 3.2.2問(wèn)題與解決56 3.3Hello world函數(shù)版58 3.3.1定義函數(shù)58 3.3.2調(diào)用函數(shù)58 3.3.3重復(fù)調(diào)用59 3.3.4帶參函數(shù)59 3.4Hello world交互版61 3.4.1變量61 3.4.2常量63 3.4.3數(shù)據(jù)類型63 3.4.4定義變量64 3.4.5完成交互64 3.5Hello world分支版65 3.5.1流程控制ifelse66 3.5.2修改Hello函數(shù)區(qū)別對(duì)待66 3.5.3多級(jí)ifelse67 3.5.4常見關(guān)系、邏輯操作符67 3.6Hello world循環(huán)版68 3.6.1流程控制while68 3.6.2修改main函數(shù)反復(fù)操作69 3.7Hello Object生死版70 3.7.1定義對(duì)象類型71 3.7.2創(chuàng)建對(duì)象72 3.7.3構(gòu)造函數(shù)73 3.7.4析構(gòu)函數(shù)74 3.7.5對(duì)象生命周期74 3.7.6對(duì)象與內(nèi)存78 3.7.7對(duì)象可見區(qū)域80 3.8Hello Object成員版81 3.8.1成員數(shù)據(jù)84 3.8.2成員函數(shù)85 3.9Hello Object派生版86 3.9.1使用分支86 3.9.2為何派生87 3.9.3如何派生88 3.9.4定義美人類88 3.9.5使用美人類89 3.9.6變和不變89 3.9.7派生類的生死過(guò)程90 3.10Hello Object多態(tài)版92 3.10.1虛函數(shù)93 3.10.2虛析構(gòu)函數(shù)95 3.10.3應(yīng)用虛函數(shù)96 3.10.4多態(tài)vs.非多態(tài)99 3.11Hello Object封裝版99 3.11.1什么是封裝99 3.11.2類型即封裝101 3.11.3公開、保護(hù)、私有102 3.11.4class vs struct104 3.11.5封裝應(yīng)用示例105 3.11.6常量成員函數(shù)109 3.12Hello STL向量篇110 3.12.1基礎(chǔ)111 3.12.2常用接口112 3.12.3遍歷113 3.12.4實(shí)例:選美大賽管理系統(tǒng)115 3.13Hello STL鏈表篇123 3.13.1基礎(chǔ)124 3.13.2迭代器/iterator概念124 3.13.3常用函數(shù)1126 3.13.4常用函數(shù)2128 3.13.5常量迭代器130 3.13.6遍歷list容器131 3.13.7實(shí)例:成績(jī)管理系統(tǒng)1132 3.14Hello STL算法篇137 3.14.1函數(shù)對(duì)象139 3.14.2自定義查找算法141 3.14.3泛化查找算法143 3.14.4標(biāo)準(zhǔn)庫(kù)查找算法146 3.14.5標(biāo)準(zhǔn)庫(kù)排序算法147 3.14.6實(shí)例:成績(jī)管理系統(tǒng)2148 3.15Hello STL文件篇160 3.15.1寫文件161 3.15.2讀文件163 3.15.3帶格式讀取164 3.15.4實(shí)例:成績(jī)管理系統(tǒng)3165 第4章感受(二)170 4.1Hello GUI基礎(chǔ)篇170 4.1.1C::B文件默認(rèn)編碼170 4.1.2wxWidgets項(xiàng)目向?qū)?71 4.1.3界面設(shè)計(jì)172 4.1.4編譯運(yùn)行174 4.1.5發(fā)布程序174 4.2Hello GUI布局篇175 4.2.1wxSmith基礎(chǔ)175 4.2.2wxBoxSizer基礎(chǔ)179 4.2.3布局修改實(shí)例180 4.2.4掛接事件183 4.3Hello Internet184 4.3.1創(chuàng)建項(xiàng)目185 4.3.2界面設(shè)計(jì)185 4.3.3編寫代碼186 4.4Hello Database188 4.4.1基本需求189 4.4.2準(zhǔn)備數(shù)據(jù)189 4.4.3創(chuàng)建工程190 4.4.4編寫代碼192 第5章基礎(chǔ)198 5.1從代碼到程序198 5.1.1編譯機(jī)制198 5.1.2解釋機(jī)制200 5.1.3虛擬機(jī)機(jī)制201 5.2構(gòu)建C 程序202 5.2.1預(yù)編譯202 5.2.2編譯205 5.2.3鏈接206 5.2.4手工構(gòu)建208 5.3項(xiàng)目/Project209 5.3.1項(xiàng)目文件209 5.3.2源文件、頭文件210 5.3.3使用頭文件211 5.3.4庫(kù)文件215 5.4進(jìn)程與內(nèi)存216 5.4.1什么叫進(jìn)程217 5.4.2進(jìn)程的內(nèi)存空間217 5.4.3內(nèi)存分配測(cè)試程序218 5.5內(nèi)存分段220 5.5.1代碼段221 5.5.2數(shù)據(jù)段和全局?jǐn)?shù)據(jù)221 5.5.3棧內(nèi)存223 5.5.4堆內(nèi)存224 5.6CPU、寄存器225 5.7線程227 5.8數(shù)據(jù)與內(nèi)存230 5.8.1地址、尺寸、值、類型230 5.8.2取址、取尺寸、取值、取類型233 5.8.3指針裝著地址的變量235 5.8.4堆數(shù)據(jù)與內(nèi)存237 5.8.5數(shù)組數(shù)據(jù)239 5.8.6堆數(shù)組與內(nèi)存240 5.8.7常量與內(nèi)存245 5.8.8二維數(shù)組與內(nèi)存247 5.8.9數(shù)組綜合練習(xí)248 5.8.10聲明、定義、實(shí)現(xiàn)251 5.9進(jìn)制(一)258 5.9.1初識(shí)二進(jìn)制258 5.9.2正整數(shù)和零259 5.9.3負(fù)整數(shù)(原碼、反碼、補(bǔ)碼)259 5.9.4無(wú)符號(hào)數(shù)vs有符號(hào)數(shù)262 5.10進(jìn)制(二)263 5.10.1十六進(jìn)制263 5.10.2八進(jìn)制265 5.10.3進(jìn)制換算266 5.10.4浮點(diǎn)數(shù)267 第6章IDECode::Blocks271 6.1窗口布局271 6.1.1邊欄271 6.1.2工具欄272 6.1.3布局保存273 6.2環(huán)境設(shè)置273 6.2.1常規(guī)設(shè)置/General Settings273 6.2.2視圖/View274 6.2.3多頁(yè)面板/Notebooks appearance274 6.2.4禁用的對(duì)話框/Disabled dialogs275 6.2.5內(nèi)置游戲/C::B Games275 6.2.6自動(dòng)保存/Autosave275 6.2.7環(huán)境變量/Environment variables276 6.2.8頭文件自動(dòng)引入/HeaderFixup configuration276 6.2.9幫助文件/Help files277 6.2.10待辦事件/Todo list278 6.3編輯器設(shè)置279 6.3.1常規(guī)設(shè)置/General Settings279 6.3.2代碼折疊/Folding282 6.3.3邊界和光標(biāo)符/Margins and caret282 6.3.4語(yǔ)法高亮/Syntax highlighting282 6.3.5簡(jiǎn)寫詞/Abbreviations282 6.3.6代碼格式化工具/Source formatter283 6.3.7代碼完成/Code completion284 6.3.8快捷鍵/Keyboard shortcuts284 6.3.9拼寫檢查/Spell Checker287 6.3.10wxSmith配置287 6.4編譯器全局設(shè)置287 6.4.1編譯器選項(xiàng)/Compiler settings288 6.4.2其他設(shè)置/Other settings288 6.4.3構(gòu)建配置/Build options288 6.5調(diào)試器全局設(shè)置288 6.6全局路徑變量289 6.7項(xiàng)目管理290 6.7.1項(xiàng)目組織290 6.7.2項(xiàng)目向?qū)?92 6.7.3項(xiàng)目文件293 6.8項(xiàng)目構(gòu)建選項(xiàng)294 6.8.1公共配置和目標(biāo)配置294 6.8.2項(xiàng)目編譯器設(shè)置/Compiler Settings295 6.8.3項(xiàng)目鏈接器設(shè)置/Linker settings296 6.8.4項(xiàng)目搜索路徑/Search directories298 6.8.5項(xiàng)目構(gòu)建附加步驟/Prepost build steps300 6.8.6項(xiàng)目定制變量/Custom variables300 6.9項(xiàng)目屬性300 6.9.1項(xiàng)目設(shè)置/Project settings300 6.9.2構(gòu)建目標(biāo)/Build targets301 6.10項(xiàng)目實(shí)踐303 6.10.1構(gòu)建動(dòng)態(tài)庫(kù)303 6.10.2構(gòu)建靜態(tài)庫(kù)304 6.10.3主項(xiàng)目可執(zhí)行程序305 6.10.4配置依賴庫(kù)305 6.10.5設(shè)置項(xiàng)目間依賴關(guān)系306 6.11調(diào)試307 6.11.1啟動(dòng)調(diào)試307 6.11.2設(shè)置斷點(diǎn)308 6.11.3單步運(yùn)行309 6.11.4觀察數(shù)據(jù)309 6.11.5單步進(jìn)入310 6.11.6單步跳出311 6.11.7其他步進(jìn)指令311 6.11.8定位錯(cuò)誤311 6.11.9中止調(diào)試312 第7章語(yǔ)言313 7.1字面量313 7.1.1整數(shù)字面量314 7.1.2浮點(diǎn)數(shù)字面量315 7.1.3空指針字面量315 7.1.4布爾值字面量316 7.1.5字符字面量317 7.1.6字符串字面量322 7.1.7枚舉字面量323 7.1.8宏替換325 7.1.9自定義字面量326 7.2類型327 7.2.1基本概念327 7.2.2整型329 7.2.3浮點(diǎn)型330 7.2.4字符類型331 7.2.5布爾類型332 7.2.6空類型333 7.2.7類/結(jié)構(gòu)334 7.2.8枚舉類型338 7.2.9類型別名344 7.3類型基礎(chǔ)行為345 7.3.1定義345 7.3.2初始化行為348 7.3.3初始化類成員356 7.3.4復(fù)制構(gòu)造行為361 7.3.5賦值行為366 7.3.6轉(zhuǎn)換行為371 7.3.7轉(zhuǎn)移行為380 7.3.8析構(gòu)行為384 7.4變量和常量385 7.4.1變或不變385 7.4.2常量成員數(shù)據(jù)386 7.4.3常量成員函數(shù)387 7.5引用388 7.5.1定義引用390 7.5.2常量引用392 7.5.3引用傳遞393 7.5.4右值引用395 7.6指針401 7.6.1定義指針401 7.6.2初始化指針401 7.6.3取值與成員訪問(wèn)403 7.6.4釋放指針404 7.6.5常量指針406 7.6.6指針的指針408 7.7數(shù)組409 7.7.1初始化數(shù)組410 7.7.2常量數(shù)組410 7.7.3數(shù)組間復(fù)制數(shù)據(jù)411 7.7.4數(shù)組退化411 7.7.5字符數(shù)組和字符串413 7.7.6多維數(shù)組415 7.7.7指針和數(shù)組417 7.7.8數(shù)組類型的別名420 7.8STL常用類型420 7.8.1std::string/wstring422 7.8.2std::list424 7.8.3std::vector426 7.8.4std::array430 7.8.5std::map433 7.8.6std::ofstream437 7.8.7std::ifstream439 7.8.8std::stringstream441 7.8.9智能指針442 7.9生存期、作用域、可見性、訪問(wèn)限定451 7.9.1基本概念451 7.9.2聲明453 7.9.3名字空間455 7.9.4類型定義作用域469 7.10函數(shù)477 7.10.1函數(shù)作用域477 7.10.2自由函數(shù)、成員函數(shù)478 7.10.3函數(shù)聲明與定義478 7.10.4函數(shù)入?yún)?79 7.10.5函數(shù)返回值489 7.10.6函數(shù)靜態(tài)數(shù)據(jù)503 7.10.7遞歸調(diào)用504 7.10.8函數(shù)重載505 7.10.9操作符重載509 7.10.10內(nèi)聯(lián)函數(shù)512 7.10.11主函數(shù)514 7.10.12函數(shù)指針515 7.11Lambda函數(shù)519 7.11.1基本概念519 7.11.2入?yún)⑴c返回522 7.11.3捕獲/capture523 7.12操作符與表達(dá)式527 7.12.1算術(shù)操作528 7.12.2基礎(chǔ)操作529 7.12.3關(guān)系操作530 7.12.4邏輯操作531 7.12.5位操作533 7.12.6自運(yùn)算536 7.12.7逗號(hào)操作符538 7.12.8取址、取值539 7.12.9成員訪問(wèn)540 7.12.10指針偏移計(jì)算540 7.12.11數(shù)組運(yùn)算543 7.13語(yǔ)句與流程544 7.13.1簡(jiǎn)單語(yǔ)句544 7.13.2復(fù)合語(yǔ)句544 7.13.3if545 7.13.4switch549 7.13.5while553 7.13.6dowhile556 7.13.7for562 7.13.8break/continue567 7.13.9goto569 7.13.10綜合練習(xí)570 7.14模板580 7.14.1基本概念580 7.14.2函數(shù)模板581 7.14.3顯式指定模板參數(shù)582 7.14.4函數(shù)模板示例583 7.14.5類模板585 7.14.6成員函數(shù)模板587 7.14.7標(biāo)準(zhǔn)庫(kù)函數(shù)模板示例588 7.14.8模板代碼編譯591 7.15異常593 7.15.1斧頭幫的異常594 7.15.2錯(cuò)誤VS異常594 7.15.3基本語(yǔ)法599 7.15.4示例:斧頭幫行動(dòng)異常版601 7.15.5異常再拋出603 7.15.6捕獲任意類型異常606 7.15.7函數(shù)異常規(guī)格607 7.15.8函數(shù)自我捕獲異常608 7.15.9構(gòu)建異常家族610 7.15.10標(biāo)準(zhǔn)庫(kù)異常類613 7.16并行流程615 7.16.1多線程615 7.16.2線程同步互斥體619 7.16.3規(guī)避死鎖622 7.16.4使用守護(hù)鎖623 7.16.5實(shí)例:并行累加5千萬(wàn)個(gè)數(shù)624 第8章面向?qū)ο?34 8.1抽象634 8.1.1概念635 8.1.2難點(diǎn)637 8.1.3要素639 8.2封裝643 8.2.1不變式645 8.2.2原則647 8.2.3不變式實(shí)例649 8.2.4從關(guān)系到狀態(tài)655 8.2.5類型即封裝656 8.2.6類型默認(rèn)行為658 8.2.7this指針660 8.2.8訪問(wèn)控制664 8.2.9冗余保護(hù)664 8.2.10構(gòu)造與資源初始化666 8.2.11析構(gòu)與資源釋放673 8.2.12復(fù)制行為定制675 8.2.13特定行為定制680 8.2.14定制類型轉(zhuǎn)換686 8.2.15轉(zhuǎn)移操作689 8.2.16靜態(tài)成員689 8.2.17常量成員693 8.2.18嵌套類694 8.2.19友元696 8.2.20回歸C的封裝702 8.2.21進(jìn)階思考709 8.3派生735 8.3.1語(yǔ)法基礎(chǔ)738 8.3.2受保護(hù)的741 8.3.3派生方式744 8.3.4派生類的構(gòu)造746 8.3.5派生類的析構(gòu)750 8.3.6多重派生751 8.3.7派生類與作用域755 8.4基于對(duì)象例程759 8.4.1INI文件簡(jiǎn)介760 8.4.2面向過(guò)程的設(shè)計(jì)761 8.4.3基于對(duì)象的設(shè)計(jì)767 8.4.4復(fù)用實(shí)現(xiàn)的派生775 8.5多態(tài)779 8.5.1什么和為什么779 8.5.2接口約定782 8.5.3虛函數(shù)785 8.5.4多態(tài)實(shí)例786 8.6OO設(shè)計(jì)原則792 8.6.1isa關(guān)系792 8.6.2抽象、抽象、再抽象795 8.6.3高內(nèi)聚低耦合797 8.6.4明確數(shù)據(jù)邊界800 8.6.5強(qiáng)化數(shù)據(jù)不變性803 8.6.6層次與模塊808 8.6.7框架型基類809 8.7綜合練習(xí)815 8.7.1工資發(fā)放練習(xí)815 8.7.2射擊游戲的需求815 8.7.3小小進(jìn)銷存的需求817 第9章泛型820 9.1泛型概念820 9.2基礎(chǔ)回顧820 9.2.1函數(shù)模板820 9.2.2類模板822 9.2.3成員函數(shù)模板823 9.3模板實(shí)例化825 9.3.1只幫一次忙825 9.3.2潛在匹配條件828 9.3.3顯式指定類型829 9.3.4類模板實(shí)例化831 9.3.5模板內(nèi)符號(hào)身份確定832 9.3.6非類型模板參數(shù)835 9.3.7模板參數(shù)默認(rèn)值838 9.4泛型應(yīng)用實(shí)例838 9.4.1CStyle類型轉(zhuǎn)換模板838 9.4.2Pair839 9.4.3AutoPtr842 9.4.4RangeArray849 9.4.5鏈表結(jié)構(gòu)856 9.5泛型特化872 9.5.1函數(shù)模板特化872 9.5.2類模板特化基礎(chǔ)876 9.5.3局部特化的花樣878 9.5.4全特化880 參考文獻(xiàn)881
你還可能感興趣
我要評(píng)論
|