新標(biāo)準(zhǔn)C++程序設(shè)計(jì)教程
定 價(jià):44.5 元
- 作者:郭煒 著
- 出版時(shí)間:2012/8/1
- ISBN:9787302283805
- 出 版 社:清華大學(xué)出版社
- 中圖法分類:TP312C++
- 頁碼:427
- 紙張:膠版紙
- 版次:1
- 開本:16開
《重點(diǎn)大學(xué)計(jì)算機(jī)專業(yè)系列教材:新標(biāo)準(zhǔn)C++程序設(shè)計(jì)教程》基于新的C++標(biāo)準(zhǔn)“C++11”,從全新的思路出發(fā),融合作者豐富的編程實(shí)踐經(jīng)驗(yàn),深入淺出地全面介紹C++程序設(shè)計(jì)的過程,包含豐富的樣例程序,強(qiáng)調(diào)實(shí)踐性和專業(yè)性。
《重點(diǎn)大學(xué)計(jì)算機(jī)專業(yè)系列教材:新標(biāo)準(zhǔn)C++程序設(shè)計(jì)教程》適合作為高等院校理工類專業(yè)程序設(shè)計(jì)課程的教材、學(xué)生自學(xué)和做畢業(yè)設(shè)計(jì)的參考書,也可供IT從業(yè)人員和編程愛好者參考。
《重點(diǎn)大學(xué)計(jì)算機(jī)專業(yè)系列教材:新標(biāo)準(zhǔn)C++程序設(shè)計(jì)教程》面向大學(xué)計(jì)算機(jī)專業(yè)的低年級學(xué)生或非計(jì)算機(jī)專業(yè)但對編程能力要求較高的學(xué)生。內(nèi)容深廣卻通俗易懂,入門與提高并重,覆蓋了C++語言的方方面面,尤其是全面介紹了標(biāo)準(zhǔn)模板庫STL的用法。 編者有十年的C++語言第一線教學(xué)經(jīng)驗(yàn),本書寫作時(shí),就已經(jīng)將對學(xué)生困惑的解答融入其中,用精簡的語言直指問題的重點(diǎn)、難點(diǎn)和本質(zhì),力圖使讀者能獨(dú)立自學(xué)本書。 本書程序?qū)嵗S富實(shí)用,貼近編程實(shí)踐,強(qiáng)調(diào)程序設(shè)計(jì)基本思路、面向?qū)ο蠡舅枷牒退惴ǖ呐囵B(yǎng),而不是僅僅羅列C++的語法規(guī)則。 本書書名中的“新標(biāo)準(zhǔn)”有兩層含義。一是指本書所有的講述和程序都是嚴(yán)格遵循C++標(biāo)準(zhǔn)的,而且介紹了一些最新C++11標(biāo)準(zhǔn)的內(nèi)容。第二層含義更為重要,指的是希望讀者通過對本書的學(xué)習(xí),對C++的掌握程度能夠達(dá)到更高的標(biāo)準(zhǔn),除了深入理解面向?qū)ο蟮某绦蛟O(shè)計(jì)外,還能夠進(jìn)行泛型程序設(shè)計(jì)并熟練使用STL。
一、 本書的寫作背景
C++功能強(qiáng)大、運(yùn)用廣泛,許多大學(xué)都將其作為入門的程序設(shè)計(jì)語言進(jìn)行教學(xué)。筆者在北京大學(xué)信息科學(xué)技術(shù)學(xué)院講授C++程序設(shè)計(jì)已有10年,隨著時(shí)間的推移,漸覺現(xiàn)有的教材已經(jīng)不能滿足教學(xué)的需要,于是萌生了自己編寫一本教材的想法。
C++有兩大特點(diǎn): 支持面向?qū)ο蟮某绦蛟O(shè)計(jì)和支持泛型程序設(shè)計(jì)。然而,國內(nèi)大部分教材往往對“泛型程序設(shè)計(jì)”這部分內(nèi)容基本忽略,或只是略作交待。這導(dǎo)致許多學(xué)過或準(zhǔn)備學(xué)C++的學(xué)生有如下印象:C++是為了編寫大型的程序而設(shè)計(jì)的,如果編寫一個(gè)十幾、幾十行的小程序,沒有必要用C++,用C語言就足夠了。實(shí)際上,編寫很小的程序用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法確無必要,但不等于用C++沒必要。C++中的標(biāo)準(zhǔn)模板庫(STL)是泛型程序設(shè)計(jì)的最成功應(yīng)用,其中包含許多常用的數(shù)據(jù)結(jié)構(gòu)(如動(dòng)態(tài)數(shù)組、棧等)和算法(如排序、二分查找等),STL即便應(yīng)用于十幾行的程序中,也能有效地提高編程效率。對熟練的C++程序員來說,編寫一個(gè)十幾行的程序多半不會考慮到面向?qū)ο蟮某绦蛟O(shè)計(jì),但會很自然地用到STL。在筆者看來,如果計(jì)算機(jī)專業(yè)的學(xué)生學(xué)了C++卻不會用STL,那么找工作面試的時(shí)候是會受影響的。C++標(biāo)準(zhǔn)委員會成員Andrew Koenig有句名言“庫設(shè)計(jì)就是語言設(shè)計(jì),語言設(shè)計(jì)就是庫設(shè)計(jì)!睂W(xué)了C++語言,卻不會用該語言的核心庫,對于計(jì)算機(jī)專業(yè)的學(xué)生來說,這樣的教學(xué)很難說是成功的。
國內(nèi)大多數(shù)C++教材對泛型程序設(shè)計(jì)和STL講述甚少,國外雖有幾部經(jīng)典教材,全面覆蓋了C++的兩大特點(diǎn),但是都卷帙浩繁,動(dòng)輒近千頁,不適合初學(xué)者。為解決這個(gè)矛盾,筆者編寫了本教材,篇幅適當(dāng),全面講述了C++面向?qū)ο蟮母鞣N特性,此外還覆蓋了標(biāo)準(zhǔn)模板庫90%以上的內(nèi)容。初學(xué)者通過本書的學(xué)習(xí),可以比較全面地掌握C++程序設(shè)計(jì)語言的精髓。
另外,大多數(shù)C++教材依據(jù)的是1998年的C++標(biāo)準(zhǔn)(一般稱為“C++98”)。而在1998年后,C++標(biāo)準(zhǔn)進(jìn)行了一些修訂,加入了一些新特性,2011年C++標(biāo)準(zhǔn)委員會又通過了新的C++標(biāo)準(zhǔn)“C++11”。這些變化在大多數(shù)教材中沒有體現(xiàn)。讓教材與時(shí)俱進(jìn),也是筆者編寫本教材的初衷之一。
二、 本書的特點(diǎn)
1. 內(nèi)容深廣卻通俗易懂,入門與提高并重
本書面向大學(xué)計(jì)算機(jī)專業(yè)的低年級學(xué)生,或非計(jì)算機(jī)專業(yè)但對編程能力要求較高的學(xué)生。本書可作為入門的程序設(shè)計(jì)語言教學(xué)之用,沒學(xué)過C語言的讀者可以直接學(xué)習(xí)本書。
本書內(nèi)容很廣,覆蓋了C++語言的方方面面,全面講述了標(biāo)準(zhǔn)模板庫STL的用法,幾乎可以作為C++語言的參考手冊來查閱。第4篇“C++高級主題”中的內(nèi)容更是大多數(shù)同等篇幅的教材所不曾涉及的。而且,由于本書的宗旨是讓讀者不但要知其然,還要知其所以然,因此對于C++的一些語法特性,不但介紹如何使用,還會講解C++為什么會有這個(gè)語法特性,甚至該特性是如何實(shí)現(xiàn)的,如“多態(tài)”的實(shí)現(xiàn)方法。
筆者有10年的C++語言第一線教學(xué)經(jīng)驗(yàn),非常清楚學(xué)生在學(xué)習(xí)C++時(shí)哪些地方不易掌握,會提出什么樣的問題,以及他們的問題應(yīng)該如何回答。因此,在本書寫作時(shí),就已經(jīng)將學(xué)生困惑的解答融入其中,用精簡的語言直指問題的重點(diǎn)、難點(diǎn)和本質(zhì),可以說將有限的文字都用在了刀刃上。筆者的目標(biāo)是力圖做到“讀者不用教師講授,也能獨(dú)立看懂本書”。
2. 緊扣C++標(biāo)準(zhǔn)
國內(nèi)大多數(shù)C++教材依據(jù)的是1998年的C++標(biāo)準(zhǔn)“C++98”。許多教材甚至都不能完全符合“C++98”的標(biāo)準(zhǔn),這從其聲稱“程序都在Visual C++ 6.0中編譯通過”就可看出——Visual C++ 6.0并不是嚴(yán)格遵循“C++98”標(biāo)準(zhǔn)的編譯器。目前,對C++標(biāo)準(zhǔn)支持最好的編譯器有GNU gcc和微軟的Visual C++ 10.0(包含在Visual Studio 2010中)等。本書中的所有程序除個(gè)別有特殊說明的以外,都同時(shí)在Visual C++ 10.0和Dev C++ 4.9.9.2(其內(nèi)核編譯器是gcc)中編譯通過,并且運(yùn)行結(jié)果相同,可以保證是符合C++標(biāo)準(zhǔn)的,而不是某種“C++方言”。
最新的“C++11”標(biāo)準(zhǔn)通過的時(shí)間很短,目前還沒有編譯器能完全支持它。因此,本書不可能完全以“C++11”作為依據(jù)。本書的主要依據(jù)依然是“C++98”,但是收錄了幾個(gè)“C++98”之后新引入的特性,如“l(fā)ong long”數(shù)據(jù)類型、無序容器(即哈希表)、智能指針shared_ptr等。本書中的頭文件都是C++風(fēng)格的,不像某些教材仍然使用C語言風(fēng)格的頭文件。另外,許多教材中的程序在用到字符串時(shí)往往使用C語言風(fēng)格的字符數(shù)組,而本書則盡量使用C++風(fēng)格的string對象處理字符串。
3. 程序?qū)嵗S富實(shí)用,貼近編程實(shí)踐
筆者不僅具有豐富的C++教學(xué)經(jīng)驗(yàn),還有著數(shù)十萬行的C++商業(yè)軟件開發(fā)經(jīng)驗(yàn)。筆者獨(dú)立開發(fā)了多種流行的英語學(xué)習(xí)軟件,如《我愛背單詞》、《我愛背句子》、《我愛學(xué)語法》、《我愛學(xué)音標(biāo)》、《角斗士超級復(fù)讀機(jī)》等,還開發(fā)了背單詞的網(wǎng)站“愛單詞網(wǎng)”。這些軟件大量使用C++語言進(jìn)行開發(fā),有的完全用C++寫成。因此,筆者自認(rèn)為在對C++語言的運(yùn)用和理解方面,比一般的教材作者多了一些心得,更能從實(shí)踐的角度闡述如何運(yùn)用C++的各種特性。本書中所有樣例程序都由筆者精心編寫,絕非網(wǎng)上復(fù)制所得。程序風(fēng)格優(yōu)美,貼近現(xiàn)實(shí),對實(shí)踐的指導(dǎo)意義很強(qiáng)。
4. 強(qiáng)調(diào)程序設(shè)計(jì)基本思想的培養(yǎng)
筆者擔(dān)任北京大學(xué)ACM國際大學(xué)生程序設(shè)計(jì)競賽隊(duì)教練已有8年,手下的隊(duì)員都是北京大學(xué)最出色的編程高手。他們的成長、求學(xué)、求職經(jīng)歷可以驗(yàn)證,算法才是程序設(shè)計(jì)的核心。學(xué)習(xí)程序設(shè)計(jì)決不是僅僅掌握一門語言的語法,更重要的是掌握算法。只掌握語言的語法,在碰到具體問題時(shí)往往還是不知道如何去編程解決。作為入門的程序設(shè)計(jì)語言教材,本書不可能講述太多的算法,但是程序設(shè)計(jì)的基本思想是必定要涉及的。為此,本書專門辟出一章,講述了枚舉、遞歸、二分3種基本的程序設(shè)計(jì)思想。此外,其他章節(jié)的一些例題和程序也能體現(xiàn)程序設(shè)計(jì)的基本思路。
三、 內(nèi)容編排
本書主要分為以下四篇。
第1篇結(jié)構(gòu)化程序設(shè)計(jì): 是對C語言的繼承以及在C語言基礎(chǔ)上的一些擴(kuò)充。學(xué)過C語言的讀者可以粗略閱讀甚至跳過此篇大部分內(nèi)容,但是需要學(xué)習(xí)目錄中帶“*”的章節(jié),這些章節(jié)仍然是C語言中沒有的內(nèi)容。
第2篇面向?qū)ο蟮某绦蛟O(shè)計(jì): 包含類和對象、運(yùn)算符重載、繼承、多態(tài)等內(nèi)容,是C++語言的學(xué)習(xí)重點(diǎn)。
第3篇泛型程序設(shè)計(jì): 包括如何編寫模板,以及如何使用標(biāo)準(zhǔn)模板庫STL。即便不想用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法編程,學(xué)習(xí)STL也是大有裨益的。
第4篇C++高級主題: 涉及了異常處理、名字空間、C++風(fēng)格的強(qiáng)制類型轉(zhuǎn)換等C++語言中比較深入的內(nèi)容,以及C++11標(biāo)準(zhǔn)引入的幾個(gè)新特性。
本書各章最后都有小結(jié)和習(xí)題。各章內(nèi)的講述中還穿插了許多思考題,思考題難度較大,很適合作為啟發(fā)式教學(xué)的討論話題。
四、 總結(jié)
總而言之,本書書名中的“新標(biāo)準(zhǔn)”有兩層含義: 第一層含義是指本書所有的講述和程序都是嚴(yán)格遵循 C++標(biāo)準(zhǔn)的,而且提及了一些新C++標(biāo)準(zhǔn)的內(nèi)容; 第二層含義更為重要,指的是希望讀者通過本書的學(xué)習(xí),對C++的掌握程度能夠達(dá)到更高的標(biāo)準(zhǔn),除了深入理解面向?qū)ο蟮某绦蛟O(shè)計(jì)外,還能夠進(jìn)行泛型程序設(shè)計(jì)并熟練使用STL。
本書的配套課件和書中的例題程序代碼可以從清華大學(xué)出版社網(wǎng)站(www.tup.com.cn)下載。如果在本書和課件的下載使用中遇到問題,請聯(lián)系fuhy@tup.tsinghua.edu.cn。
五、 鳴謝
編寫本書的動(dòng)力來自作者在北京大學(xué)信息學(xué)院“程序設(shè)計(jì)實(shí)習(xí)”課程的教學(xué)經(jīng)歷。感謝課程主持人李文新教授對作者在教學(xué)中的支持和指導(dǎo)。還要感謝多年來共同講授此課程的余華山老師、田永鴻老師,和他們的討論使我獲益良多。三位老師編寫的講義,也是本書的重要參考。
感謝您選用本書。由于筆者水平所限,不足之處在所難免,歡迎讀者及同仁們批評指正,筆者不勝感激。
郭煒2012年6月于北京大學(xué)
郭煒,北京大學(xué)信息科學(xué)技術(shù)學(xué)院教師,北京大學(xué)ACM國際大學(xué)生程序設(shè)計(jì)競賽隊(duì)教練。不僅具有十年的C++教學(xué)經(jīng)驗(yàn),還有著數(shù)十萬行的C++商業(yè)軟件開發(fā)經(jīng)驗(yàn),獨(dú)立開發(fā)了多種流行的英語學(xué)習(xí)軟件(如我愛背單詞、我愛學(xué)語法、我愛學(xué)音標(biāo)),創(chuàng)立了背單詞的網(wǎng)站——愛單詞網(wǎng)。精研算法,曾6次負(fù)責(zé)為ACM國際大學(xué)生程序設(shè)計(jì)競賽亞洲區(qū)預(yù)選賽命題,是國內(nèi)為此項(xiàng)賽事主持命題次數(shù)最多的人。
第1篇 結(jié)構(gòu)化程序設(shè)計(jì)
第1章 計(jì)算機(jī)基礎(chǔ)知識
1.1 信息在計(jì)算機(jī)中的表示和存儲
1.1.1 如何用0和1表示各種信息
1.1.2 二進(jìn)制和十六進(jìn)制
1.1.3 整數(shù)和小數(shù)的計(jì)算機(jī)表示
1.2 計(jì)算機(jī)程序設(shè)計(jì)語言
1.2.1 機(jī)器語言
1.2.2 匯編語言
1.2.3 高級語言
1.3 C++語言的歷史
1.4 小結(jié)
習(xí)題
第2章 C++語言的基本要素
2.1 C++的標(biāo)識符
2.2 C++的關(guān)鍵字
2.3 最簡單的C++程序
2.4 變量
2.4.1 變量的定義
2.4.2 變量的初始化
2.4.3 變量的賦值
2.4.4 常變量
2.5 C++的數(shù)據(jù)類型
2.5.1 C++基本數(shù)據(jù)類型
2.5.2 數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換
2.5.3 用cin讀人類型不同的變量
2.6 常量
2.6.1 整型常量
2.6.2 實(shí)數(shù)型常量
2.6.3 布爾型常量
2.6.4 字符型常量
2.6.5 字符串常量
2.6.6 符號常量
2.7 運(yùn)算符和表達(dá)式
2.7.1 算術(shù)運(yùn)算符
2.7.2 賦值運(yùn)算符
2.7.3 關(guān)系運(yùn)算符
2.7.4 邏輯運(yùn)算符和邏輯表達(dá)式
2.7.5 位運(yùn)算符
2.7.6 條件運(yùn)算符
2.7.7 sizeof運(yùn)算符
2.7.8 強(qiáng)制類型轉(zhuǎn)換運(yùn)算符
2.7.9 逗號運(yùn)算符
2.7.10 運(yùn)算符的優(yōu)先級和結(jié)合性
2.8 注釋
2.9 小結(jié)
習(xí)題
第3章 C++語言的控制結(jié)構(gòu)
3.1 用if語句實(shí)現(xiàn)選擇結(jié)構(gòu)
3.2 用switch語句實(shí)現(xiàn)選擇結(jié)構(gòu)
3.3 用for語句實(shí)現(xiàn)循環(huán)結(jié)構(gòu)
3.4 用while語句實(shí)現(xiàn)循環(huán)結(jié)構(gòu)
3.5 用dowhile語句實(shí)現(xiàn)循環(huán)結(jié)構(gòu)
3.6 用break語句跳出循環(huán)
3.7 continue語句
3.8 goto語句
3.9 使用freopen方便程序調(diào)試
3.10 小結(jié)
習(xí)題
第4章 函數(shù)
4.1 函數(shù)的定義和調(diào)用
4.1.1 函數(shù)的定義
……
第2篇 面向?qū)ο蟮某绦蛟O(shè)計(jì)
第3篇 泛型程序設(shè)計(jì)
第4篇 C++高級主題