關(guān)于我們
書單推薦
新書推薦
|
白話C++之練功
《白話C 》分練功和練武兩冊。練功主講編程基礎(chǔ)知識、C 語言語法(含C 11、14等)及多種編程范式。具體包括:大白話講解計(jì)算機(jī)架構(gòu)、進(jìn)程、內(nèi)存、二進(jìn)制等編程概念;手把手教復(fù)雜編程環(huán)境的安裝應(yīng)用;快速感受C 語言概貌及圖形界面、數(shù)據(jù)庫、網(wǎng)絡(luò)、多線程等功能庫;深入淺出地講解C 語法、標(biāo)準(zhǔn)庫常用組件及面向過程、基于對象、面向?qū)ο、泛型等四種編程范式的演化與對比。
本書借助生活概念幫助用戶理解編程,巧妙安排知識交叉,讓讀者不受限于常見的控制臺下編程,快速感受C 編程的樂趣,提升學(xué)習(xí)動力。本書適合作為零基礎(chǔ)C 編程學(xué)習(xí)從入門到深造的課程教材。本書也是《白話C 之練武》的學(xué)習(xí)基礎(chǔ)。練武的重點(diǎn)內(nèi)容有:標(biāo)準(zhǔn)庫(STL)、準(zhǔn)標(biāo)庫(boost)、圖形界面庫編程(wxWidgets)、數(shù)據(jù)庫編程、緩存系統(tǒng)編程、網(wǎng)絡(luò)庫編程和多媒體游戲編程等。
作者以講故事的形式展開教學(xué),內(nèi)容生動有趣,簡單易懂。書中源碼全可下載,方便讀者學(xué)習(xí)。
(一)
2000年的時候我開始寫《白話C 》。那時候流行個人主頁,就在搜狐網(wǎng)站上申請了一個域名:mywlbcyl,取沒有彎路,編程搖籃的拼音首字母,主要發(fā)表自己寫的C 入門課程。 然后,就走了10多年的彎路,當(dāng)年要有搖籃里的寶寶跟我學(xué)C ,現(xiàn)在都該讀大學(xué)了,F(xiàn)實(shí)比這更殘酷,跟著我的課程學(xué)習(xí)的人,當(dāng)年多數(shù)是風(fēng)華正茂的小鮮肉,現(xiàn)在都成大叔了。就說和我簽訂出書合同的胡編輯,轉(zhuǎn)眼成了兩個娃的爹。 可我的書還一直在搖籃里。 所以我肯定是一個拖延癥加完美臆想癥的嚴(yán)重綜合患者,但我還是想找客觀原因:C 的教程真的好難寫,特別是結(jié)合我的想法和目標(biāo)時。 (二) 十幾年寫一本書,要說是好事也可以。比如這十幾年來,無論是C 還是我,都成熟了好多。 先說C 。新標(biāo)準(zhǔn)的制定與出臺,各家編譯器的進(jìn)化,越來越多的開源C 項(xiàng)目、基于C 新標(biāo)準(zhǔn)的優(yōu)秀書籍的出現(xiàn),都是C 長足發(fā)展的標(biāo)志。還有一點(diǎn),那就是人,當(dāng)然我想特指中國人,前面提到的標(biāo)準(zhǔn)、編譯器的實(shí)現(xiàn)、開源項(xiàng)目等,都有越來越多的中國C 程序員參與其中。從人的因素出發(fā)很容易又能發(fā)現(xiàn):C 編程的氛圍也在變好。想當(dāng)年有一個奇怪的氛圍:說到C 就是VC,說VC就是MFC。2000年前后我曾在某論壇上發(fā)表了有關(guān)MFC設(shè)計(jì)不足之處的一些淺見,立刻淹沒在一大波網(wǎng)友唾棄的口水中,F(xiàn)在,盡管C 早已不是編程語言上的一哥,但受益于多本經(jīng)典C 書籍的流行,以及發(fā)達(dá)的網(wǎng)絡(luò)和時間的沉淀,甚至也受益于更多其他編程語言的流行,使用者對這門語言的認(rèn)識越趨成熟了(相信對其他語言也是)。 再說說我的成長。從二十多歲到四十多歲;從寫幾萬行C 代碼到幾十萬行代碼;從只玩C/C 到在工作中用PHP、Java、C#、Delphi和Python,還學(xué)習(xí)了D語言、Go語言和JavaScript(Node)等;從嵌入式工控程序到Office桌面軟件;從C/S結(jié)構(gòu)到B/S結(jié)構(gòu),甚至偶爾充當(dāng)全棧工程師。大約就是,周一寫JavaScript HTML CSS,周二寫后臺分布式服務(wù),周三改數(shù)據(jù)庫結(jié)構(gòu),周四換了一套相對整潔的衣服去拜訪客戶、講PPT,周五人事和我說:幫忙面試個人吧?周末?就像今天一樣,白天補(bǔ)覺,晚上改《白話C 》書稿。 東忙西忙的日子里,我偶爾也回想起大學(xué)畢業(yè)剛走上社會的那幾年,覺得自己懂人生、懂社會、也懂編程,現(xiàn)在才發(fā)現(xiàn)這三樣我哪樣都沒能參透。所以我覺得自己應(yīng)該是成熟了一些,并且覺得幸虧因?yàn)橥涎影Y或者就是懶惰,沒有在10年或更早前寫完本書。《白話C 》的目的是幫助他人學(xué)習(xí)C ,而那時我對目標(biāo)中的幫助他人學(xué)習(xí)和C 的理解都流于淺顯粗鄙,這樣子寫出來的書對讀者真有幫助嗎? (三) 十?dāng)?shù)年過去了,中間有近一年的時間,我安排自己到培訓(xùn)機(jī)構(gòu)兼職教C 編程,非常辛苦也沒什么錢可賺。學(xué)習(xí)上,我自己買的以C 為主的編程書籍近百本,閱讀網(wǎng)絡(luò)下載幾十個開源C/C 項(xiàng)目源代碼;實(shí)踐上,我在許多軟件項(xiàng)目中掉進(jìn)去、爬出來的坑,大大小小感覺像是青春期永不消停的痘,有一天突然全被填平了。不管怎樣,根據(jù)一項(xiàng)技能你學(xué)習(xí)5000(或者更多點(diǎn),8000)小時就能成為業(yè)界專家的定律,我覺得自己對程序員、對編程技術(shù)以及程序員怎么學(xué)習(xí)和應(yīng)用編程技術(shù)的認(rèn)識,都上了新的臺階。我慢慢地將這些認(rèn)識寫進(jìn)這本書里,一稿、二稿、三稿不斷興奮地寫下,又不斷沮喪地推翻;大家百度白話C ,應(yīng)該可以找到數(shù)個版本。 在反復(fù)改寫的過程中,最重要的一個認(rèn)識是:學(xué)習(xí)C 應(yīng)該既練功又練武。沒錯,我把學(xué)習(xí)C 語言分成練功和練武兩件事。 習(xí)武之人說的武功,功通常是身體素質(zhì)、內(nèi)氣外力;而武是招式(可以外延到十八般武藝)。關(guān)于這二者,有句老話叫練武不練功,到老一場空,意思是光練把式,不練氣力,就容易止于花拳繡腿,一生難成高手。但在另外一個方向上,我記得霍元甲在創(chuàng)建迷蹤拳時曾經(jīng)說(電視里的):練功不練武,都是白辛苦。說的是另一個極端:你苦練內(nèi)功,馬步一扎特別穩(wěn)實(shí),卻什么拳法招式都不練,什么兵器也不學(xué),就會變成空有一身力氣使不出來,白辛苦。轉(zhuǎn)了個笑話加深大家對這種尷尬局面的理解,說是一個練鐵布衫的和一個練金鐘罩的比武,兩人都一動不動地呈現(xiàn)入定狀態(tài),裁判在邊上哭著說,你倆扛得住,我扛不住! 那么編程行業(yè)中,什么是功呢?廣義上講,計(jì)算機(jī)原理、網(wǎng)絡(luò)協(xié)議、算法、語言語法、編譯原理、設(shè)計(jì)模式都可以歸為功。而類似如何創(chuàng)建一個窗口如何提交一個網(wǎng)頁的表單網(wǎng)頁局部刷新的AJAX技術(shù)怎么用某某語言解析XML用哪個類怎么實(shí)現(xiàn)JSON和對象的互換如何訪問MySQL數(shù)據(jù)庫如何在數(shù)據(jù)鏈路上加入緩存哪家的短信服務(wù)器好用又便宜安卓系統(tǒng)如何實(shí)現(xiàn)消息推送以及Linux下的進(jìn)程掛掉時怎么快速重啟等這些問題的答案,統(tǒng)統(tǒng)是武。 再進(jìn)一步限定范圍到編程新人如何學(xué)習(xí)C ,我將功限定在C 語言語法和編程范式(面向過程、基于對象、面向?qū)ο蟆⒎盒途幊蹋┑然A(chǔ)知識上,但凡對C 有一定了解的人,都清楚這已經(jīng)可以寫成厚厚的一本書了。以語言為主要教學(xué)內(nèi)容的《C Primer》或《C 程序設(shè)計(jì)語言》的厚度便是佐證。武的方面則挑選來自標(biāo)準(zhǔn)庫STL及準(zhǔn)標(biāo)準(zhǔn)庫boost中的常用工具,桌面GUI編程、并發(fā)編程、數(shù)據(jù)庫(MySQL)訪問、緩存(Redis)訪問、網(wǎng)絡(luò)編程以及僅限于自娛自樂的簡單多媒體游戲編程等。 武強(qiáng)功弱的C 工程師,通常解決實(shí)際問題的能力還不弱。項(xiàng)目要用到網(wǎng)絡(luò),就找個網(wǎng)絡(luò)框架照著搭起來;項(xiàng)目要用到視頻處理就找些視頻代碼改改用。C 語言的特點(diǎn)是一方面很復(fù)雜很龐大,一方面只需學(xué)習(xí)一小部分(比如帶類的C語言)就可以寫程序,甚至可以一招鮮、走遍天。這就造成部分人在學(xué)習(xí)階段就急于動手出成績甚至上崗賺錢。如此情況下,當(dāng)他們面對復(fù)雜問題時,往往采用堆砌代碼等方式完成,一個人做到底看似很快,想要在團(tuán)隊(duì)分工中讓別人看懂他的代碼就很困難了。并且所寫的代碼往往缺少合理的設(shè)計(jì),在需求變化幾次之后,整個代碼就膨脹得像生氣的河豚。 再說說那些練功不練武,都是白辛苦的同學(xué)。C 語言還有個特點(diǎn),就是它的標(biāo)準(zhǔn)庫僅為有高度共性、高度抽象的邏輯提供功能,許多實(shí)際項(xiàng)目經(jīng)常用到的業(yè)務(wù)功能統(tǒng)統(tǒng)沒有。想象丁小明(本書中的重要人物)捧了一本厚厚的C 書籍辛苦學(xué)了一年,上班時才發(fā)現(xiàn)老板是這么要求的:聽說QQ是C 寫的,你來寫個類似的窗口。聽說C 寫的程序性能好,你寫個網(wǎng)絡(luò)服務(wù)端,要求不高,1秒鐘撐1萬次訪問就好。聽說游戲引擎基本是C 寫的,你開發(fā)個萬人在線游戲吧。聽說Photoshop也是C 寫的,你寫個程序批量美化下公司年會上的照片吧。難嗎?不好說,只是丁小明清楚地記得學(xué)習(xí)所用的那本C 書籍快1 000頁了,但從頭到尾沒出現(xiàn)過網(wǎng)絡(luò)、窗口創(chuàng)建、游戲和圖片處理等。丁小明很郁悶。 本書是《白話C 》上冊,重點(diǎn)負(fù)責(zé)功的部分。講C 基本語法也講二進(jìn)制,講編程環(huán)境如何搭建也講面向過程基于過程和面向?qū)ο蟮染幊谭妒,等等。下冊?fù)責(zé)武,講解如何用C 寫窗口圖形界面程序、多線程并發(fā)程序、網(wǎng)絡(luò)通信程序、數(shù)據(jù)庫程序和小游戲程序等具體技能。 (四) 關(guān)于如何學(xué)習(xí)C ,我的第二個認(rèn)識是:你沒辦法學(xué)一遍就能精通C 。事實(shí)上學(xué)習(xí)再多遍恐怕也精通不了,但請相信:剛開始學(xué)習(xí)時,通讀一遍,練習(xí)一遍,再回頭重新學(xué)習(xí)一遍,會比一節(jié)節(jié)死摳過去,結(jié)果一年時間未能讀完一冊的效果要好。C 中有許多知識點(diǎn)是交叉的,比如指針和數(shù)組,指針可以指向數(shù)組,數(shù)組的元素可以是指針,數(shù)組作為函數(shù)入?yún)r會退化成指針。因此二者誰放前誰放后都有合理之處,學(xué)習(xí)完前面的有利于學(xué)習(xí)后面的,但學(xué)習(xí)了后面的同樣有利于進(jìn)一步理解前面的。拉長鏡頭看《白話C 》,許多篇章之間,甚至跨越上下冊之間,都存在后面內(nèi)容對前面內(nèi)容進(jìn)行驗(yàn)證或補(bǔ)充的安排。另一方面,許多復(fù)雜的知識,在靠前的章節(jié)就簡略提及,這是刻意地對知識點(diǎn)做交叉學(xué)習(xí)的安排。最典型的如下冊中的許多內(nèi)容,在上冊一開始就會有不求甚解的快速涉獵,讓學(xué)習(xí)者感受C 的能量,避免一直埋頭在黑乎乎的控制臺窗口,誤以為自己只能用C 寫一些玩具代碼。 以30天背30個英語單詞為例,若一天就背30個,連續(xù)背30天;其效果通常要比第一天背第1個,第二天背第2個,一直背到第30個要好。機(jī)械記憶尚且如此,更何況是充滿有機(jī)關(guān)聯(lián)的編程語言呢? 作為一個極端的反例,學(xué)習(xí)編程語言一定不要過早追求100%精確,更不要沉迷于當(dāng)語言律師。網(wǎng)上流傳一個小視頻,說是一位幼兒園老師想教會小朋友關(guān)于小鳥聽到槍聲會受驚嚇飛走的知識,于是設(shè)計(jì)了一個問題:樹上停著七只鳥,獵人打了一槍后,樹上剩下幾只鳥?沒想到所有小朋友都很冷靜,第一個問:有沒有耳聾的鳥?第二個問:有沒有膽子大、神經(jīng)大條的鳥?第三個問:有沒有哪只鳥和死去的那只鳥的感情深厚,堅(jiān)決要留下殉情的?好嘛,為了回答老師那個看似簡單的問題,這一下涉及到生理、心理和鳥類感情等方方面面的知識,這樣的教學(xué)還如何進(jìn)行呢? 《白話C 》第一章為讀者圈出學(xué)習(xí)的最低起點(diǎn),書的課程以該起點(diǎn)逐步推演。因此,許多知識點(diǎn)會反復(fù)出現(xiàn),而且在不同的出現(xiàn)階段會有不同的解釋?亢蟮慕忉屜鄬θ、規(guī)范、簡潔、深刻;靠前的解釋就難免片面、粗淺、啰嗦甚至牽強(qiáng)很可能低于您已有的水平,此時請各位一笑而過。 當(dāng)然,以上有關(guān)不求甚解的說法,并非鼓勵大家蜻蜓點(diǎn)水、囫圇吞棗般地學(xué)習(xí)。正確的方法應(yīng)當(dāng)是:遇上問題,加以思考;一時思考不出答案,應(yīng)善于上網(wǎng)搜索;勤于編寫程序測試或驗(yàn)證結(jié)果以及與人交流請教;如果還是不能解疑,也沒必要卡在原地,可以做上標(biāo)記,繼續(xù)往下學(xué)習(xí)。 (五) 書中除了普通正文之外,還設(shè)置了課堂作業(yè)小提示重要危險和輕松一刻等小段落。各自的作用和學(xué)習(xí)的要點(diǎn)如下: 課程作業(yè):一定要現(xiàn)場做,所謂現(xiàn)場就是不往后看新內(nèi)容,立馬做。出于排版需求,有一些作業(yè)并未單獨(dú)成段,而是直接寫在普通段落中。另外,更為重要的是,只要課程中出現(xiàn)示例代碼,基本上要求讀者親自動手寫程序并編譯、測試通過。 小提示:和當(dāng)前課程內(nèi)容有一定的相關(guān)性,用于輔助解釋當(dāng)前課程的部分內(nèi)容。碰上時能看懂最好,但如果個別無法理解也不用放在心上,通常并不影響繼續(xù)閱讀后文。 重要:長遠(yuǎn)看都是重要的知識點(diǎn),雖然現(xiàn)在一時讀不懂不會影響繼續(xù)學(xué)習(xí),但長遠(yuǎn)看會影響關(guān)鍵知識的運(yùn)用。因此應(yīng)努力閱讀,如果不懂應(yīng)做標(biāo)記,以期下一次閱讀能理解、掌握。 危險:如果現(xiàn)在搞不懂,很可能往下(特別是需要寫代碼時)沒多長時間就要出問題的知識點(diǎn)。 輕松一刻:主要用于調(diào)節(jié)學(xué)習(xí)氛圍,讓大家偶爾放松,但也存在部分內(nèi)容同時發(fā)揮小提示的作用,可當(dāng)成相對有趣的小提示來看。當(dāng)然出于行文的需要,也有大量輕松一刻的內(nèi)容會以更加一本正經(jīng)的方式躲在正文中。 (六) 希望《白話C 》能幫到正在或正要學(xué)習(xí)C 的廣大讀者。感謝購買本書。限于個人能力,加上篇幅大,前后反復(fù)修改大,請讀者多提寶貴意見,以期持續(xù)改進(jìn)。 感謝一直信任我,也一直在為本書努力的編輯。 感謝我的父母。未能在我的父親離世之前完稿,是我今生至憾。感謝我的妻女,是你們一直在鞭策和鼓勵我。我一直以為《白話C 》會是我的二女兒,可是書還沒面市,家里二寶出生了,都上幼兒園了,這書要屈居老三。 幫助我完成本書的還有我的同事、朋友、同行、老師以及學(xué)生,一并感謝。以下是致謝名單:涂祺招、劉弘釗、胡海、王嫣琪、盧淼先、吳宸勖、顏閩輝、肖華、林起柄、揭英杰、陳婷婷、張曉曉、陳曉鋒、白偉能、林柏年、盧毅、楊文、羅海翔、莊淵、賴錦波、潘代淦。 請?jiān)诒本┖娇蘸教齑髮W(xué)出版社官網(wǎng)的下載專區(qū)或者在第2學(xué)堂網(wǎng)下載本書源碼。
莊嚴(yán),筆名南郁;20年IT從業(yè)經(jīng)歷,從一線研發(fā)人員到企業(yè)副總工、技術(shù)總監(jiān)。雖然不同崗位有不同職責(zé),但從未放棄過編程。編寫過嵌入式、字處理軟件、語言解釋器、手機(jī)應(yīng)用、大型分布式網(wǎng)絡(luò)服務(wù)和互聯(lián)網(wǎng)商城等軟件系統(tǒng)。
現(xiàn)為程知信息公司創(chuàng)始人,致力于將自身的技術(shù)、學(xué)習(xí)過程、成長歷程、對內(nèi)對外的技術(shù)培訓(xùn)、大學(xué)院校培訓(xùn)課程以及常年參與技術(shù)員面試的心得體會、經(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什么是編程語言9 1.5.1機(jī)器語言10 1.5.2機(jī)器語言的字母10 1.5.3二進(jìn)制(基礎(chǔ))11 1.5.4匯編語言11 1.5.5高級語言12 1.5.6編程思維13 1.5.7從C到C 14 1.6什么是IDE15 1.7你是程序員17 1.8出發(fā)贈言19 第2章準(zhǔn)備20 2.1基礎(chǔ)知識20 2.1.1開源協(xié)議20 2.1.2庫是什么20 2.1.3庫長什么樣子21 2.1.4學(xué)習(xí)哪些庫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升級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語言客戶端庫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ū)Э刂婆_項(xiàng)目45 3.1.2初識代碼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問題與解決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ū)別對待66 3.5.3多級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定義對象類型71 3.7.2創(chuàng)建對象72 3.7.3構(gòu)造函數(shù)73 3.7.4析構(gòu)函數(shù)74 3.7.5對象生命周期74 3.7.6對象與內(nèi)存78 3.7.7對象可見區(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派生類的生死過程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í)例:成績管理系統(tǒng)1132 3.14Hello STL算法篇137 3.14.1函數(shù)對象139 3.14.2自定義查找算法141 3.14.3泛化查找算法143 3.14.4標(biāo)準(zhǔn)庫查找算法146 3.14.5標(biāo)準(zhǔn)庫排序算法147 3.14.6實(shí)例:成績管理系統(tǒng)2148 3.15Hello STL文件篇160 3.15.1寫文件161 3.15.2讀文件163 3.15.3帶格式讀取164 3.15.4實(shí)例:成績管理系統(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庫文件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)存分配測試程序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初識二進(jìn)制258 5.9.2正整數(shù)和零259 5.9.3負(fù)整數(shù)(原碼、反碼、補(bǔ)碼)259 5.9.4無符號數(shù)vs有符號數(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多頁面板/Notebooks appearance274 6.2.4禁用的對話框/Disabled dialogs275 6.2.5內(nèi)置游戲/C::B Games275 6.2.6自動保存/Autosave275 6.2.7環(huán)境變量/Environment variables276 6.2.8頭文件自動引入/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語法高亮/Syntax highlighting282 6.3.5簡寫詞/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)建動態(tài)庫303 6.10.2構(gòu)建靜態(tài)庫304 6.10.3主項(xiàng)目可執(zhí)行程序305 6.10.4配置依賴庫305 6.10.5設(shè)置項(xiàng)目間依賴關(guān)系306 6.11調(diào)試307 6.11.1啟動調(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定位錯誤311 6.11.9中止調(diào)試312 第7章語言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取值與成員訪問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生存期、作用域、可見性、訪問限定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逗號操作符538 7.12.8取址、取值539 7.12.9成員訪問540 7.12.10指針偏移計(jì)算540 7.12.11數(shù)組運(yùn)算543 7.13語句與流程544 7.13.1簡單語句544 7.13.2復(fù)合語句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)庫函數(shù)模板示例588 7.14.8模板代碼編譯591 7.15異常593 7.15.1斧頭幫的異常594 7.15.2錯誤VS異常594 7.15.3基本語法599 7.15.4示例:斧頭幫行動異常版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)庫異常類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千萬個數(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訪問控制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語法基礎(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基于對象例程759 8.4.1INI文件簡介760 8.4.2面向過程的設(shè)計(jì)761 8.4.3基于對象的設(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)符號身份確定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
你還可能感興趣
我要評論
|