關(guān)于我們
書單推薦
新書推薦
|
C++語言程序設(shè)計(jì)(第5版)(清華大學(xué)計(jì)算機(jī)系列教材) 本書以面向?qū)ο蟮某绦蛟O(shè)計(jì)思想為主線,以通俗易懂的方法介紹C++語言,引導(dǎo)讀者以最自然的方式,將人類習(xí)慣的面向?qū)ο蟮乃季S方法運(yùn)用到程序設(shè)計(jì)中。主要內(nèi)容包括程序設(shè)計(jì)基礎(chǔ)知識、類與對象的基本概念、繼承與多態(tài)、輸入輸出流,以及泛型程序設(shè)計(jì)。此外,本教材還介紹了一些常用數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識,使得讀者學(xué)習(xí)本書后,能夠解決一些簡單的實(shí)際問題。整套教材語言生動(dòng)、流暢,深入淺出。適用于各類學(xué)校的C++語言程序設(shè)計(jì)課程。 前言 一、 版本說明 本書第1版于1999年出版,第2版于2001年出版,第3版于2003年出版,第4版于2010年出版。第5版是在前4版的基礎(chǔ)上,廣泛聽取了讀者和同行的建議,參考了最新的資料,并根據(jù)作者本人在授課過程中的經(jīng)驗(yàn)修訂而成。第5版的主要修改是增加了C++11、C++14的部分語法,并按照新的C++標(biāo)準(zhǔn)重新修訂更新了原有內(nèi)容。 本書第1版于2001年獲得中國高?茖W(xué)技術(shù)獎(jiǎng)二等獎(jiǎng);第3版于2005年獲得北京市高等教育精品教材獎(jiǎng)、2008年獲得清華大學(xué)優(yōu)秀教材特等獎(jiǎng);第4版于2011年獲得教育部普通高等教育國家級精品教材獎(jiǎng)。同時(shí),本書也是國家級教學(xué)成果二等獎(jiǎng)、北京市教學(xué)成果一等獎(jiǎng)和二等獎(jiǎng)成果的重要組成部分。該書于2008年和2011年分別獲評教育部“普通高等教育‘十一五’國家級規(guī)劃教材”和“‘十二五’普通高等教育本科國家級規(guī)劃教材”。該書英文版于2019年由德國德古意特公司正式出版。 二、 本書的編寫背景 C++語言是從C語言發(fā)展演變而來的一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。C++語言的主要特點(diǎn)表現(xiàn)在兩方面: 一是兼容C語言,二是支持面向?qū)ο蟮姆椒ā?/p> 面向?qū)ο蟮某绦蛟O(shè)計(jì)(ObjectOriented Programming,OOP)方法將數(shù)據(jù)及對數(shù)據(jù)的操作方法封裝在一起,作為一個(gè)相互依存、不可分離的整體——對象。對同類型對象抽象出其共性,形成類。類中的大多數(shù)數(shù)據(jù),只能用本類的方法進(jìn)行處理。類通過一個(gè)簡單的外部接口,與外界發(fā)生關(guān)系,對象與對象之間通過消息進(jìn)行通信。這樣,程序模塊間的關(guān)系簡單,程序模塊的獨(dú)立性、數(shù)據(jù)的安全性具有良好的保障,通過繼承與多態(tài)性,使程序具有很強(qiáng)的可重用性,使得軟件的開發(fā)和維護(hù)都更為方便。 由于面向?qū)ο蠓椒ǖ耐怀鰞?yōu)點(diǎn),目前它已經(jīng)成為開發(fā)大型軟件時(shí)所采用的主要方法。而C++語言是應(yīng)用最廣泛的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言之一。 長期以來,C++語言被認(rèn)為是較難使用的專業(yè)開發(fā)語言,所以有很多老師和學(xué)生也都認(rèn)為C++語言作為大學(xué)第一門程序設(shè)計(jì)課是很難的。C++語言與面向?qū)ο蟮某绦蛟O(shè)計(jì)方法真的很難嗎?不是的! 其實(shí)C語言產(chǎn)生的初期,也只被少數(shù)專業(yè)開發(fā)人員使用。但隨著計(jì)算機(jī)科學(xué)的發(fā)展,計(jì)算機(jī)技術(shù)已滲透到各學(xué)科的研究和應(yīng)用中,C語言已經(jīng)被各專業(yè)的工程技術(shù)人員廣泛應(yīng)用于本專業(yè)的科研開發(fā),也被很多學(xué)校作為第一門程序設(shè)計(jì)語言來講授。C++語言兼容了C語言的主要語法和特點(diǎn),同時(shí)提供了比C語言更嚴(yán)格、更安全的語法,更適合開發(fā)大型復(fù)雜程序。從這個(gè)意義上講,C++語言首先是一個(gè)更好的C語言。 C++語言是一個(gè)面向?qū)ο蟮木幊陶Z言,而面向?qū)ο蟮木幊谭椒ㄒ欢缺豢醋魇且婚T比較高深的技術(shù)。這是因?yàn)樵诿嫦驅(qū)ο蠓治觯∣bjectOriented Analysis,OOA)和面向?qū)ο笤O(shè)計(jì)(ObjectOriented Design,OOD)理論出現(xiàn)之前,程序員要寫一個(gè)好的面向?qū)ο蟮某绦,首先要學(xué)會(huì)運(yùn)用面向?qū)ο蟮姆椒▉碚J(rèn)識問題和描述問題。現(xiàn)在,OOP的工作比較簡單了,認(rèn)識問題域與設(shè)計(jì)系統(tǒng)成分的工作已經(jīng)在系統(tǒng)分析和設(shè)計(jì)階段完成,OOP工作就是用一種面向?qū)ο蟮木幊陶Z言把OOD模型中的每個(gè)成分書寫出來。 面向?qū)ο蠓椒ǖ某霈F(xiàn),實(shí)際上是程序設(shè)計(jì)方法發(fā)展的一個(gè)返璞歸真的過程。軟件開發(fā)從本質(zhì)上講,就是對軟件所要處理的問題域進(jìn)行正確的認(rèn)識,并把這種認(rèn)識正確地描述出來。面向?qū)ο蠓椒ㄋ鶑?qiáng)調(diào)的基本原則,就是直接面對客觀存在的事物來進(jìn)行軟件開發(fā),將人們在日常生活中習(xí)慣的思維方式和表達(dá)方式應(yīng)用在軟件開發(fā)中,使軟件開發(fā)從過分專業(yè)化的方法、規(guī)則和技巧中回到客觀世界,回到人們通常的思維。 那么,學(xué)習(xí)C++語言是否應(yīng)該首先學(xué)習(xí)C語言呢?不是的,雖然C++語言是從C語言發(fā)展而來的,但是C++語言本身是一個(gè)完整的程序設(shè)計(jì)語言,完全適合作為程序設(shè)計(jì)的入門語言來學(xué)習(xí)。 三、 本書的特色 本書的特色是內(nèi)容全面、深入淺出、靈活剪裁、立體配套。在學(xué)堂在線平臺(https://next.xuetangx.com)上,有與本書配套的國家精品在線開放課程“C++語言程序設(shè)計(jì)基礎(chǔ)”和“C++語言程序設(shè)計(jì)進(jìn)階”,這兩門在線課程合起來是清華大學(xué)本科生“C++語言程序設(shè)計(jì)”課程的在線版,包括了校內(nèi)授課的全部內(nèi)容、與校內(nèi)學(xué)生作業(yè)相同的在線自動(dòng)評測的編程練習(xí)題,可下載PDF格式的講稿、全部例題的源代碼。 對于使用本書作為教材的老師,可以聯(lián)系清華大學(xué)出版社向教師提供參考講稿(pptx格式和PDF格式的演示文稿,含課堂練習(xí)題)、課堂討論題目和參考答案(可用于混合式教學(xué)的翻轉(zhuǎn)課堂)。 使用本書的教師、學(xué)生和自學(xué)讀者,可以同時(shí)使用配套的《C++語言程序設(shè)計(jì)(第5版)學(xué)生用書》,其中有習(xí)題的參考解答、實(shí)驗(yàn)指導(dǎo)。 本書是面向廣大初學(xué)者的教材,也是為大學(xué)的“計(jì)算機(jī)程序設(shè)計(jì)”課程教學(xué)量身定制的,這類課在多數(shù)學(xué)校一般只有32~48講課學(xué)時(shí)和同等的實(shí)驗(yàn)學(xué)時(shí),所以本書包含了標(biāo)準(zhǔn)C++的主要內(nèi)容,但是C++的語法并沒有100%涵蓋,對泛型程序設(shè)計(jì)和STL庫只做了簡單介紹。 自1999年第1版出版以來,本書已經(jīng)在清華大學(xué)等100多所學(xué)校的不同專業(yè)中使用,取得了良好的教學(xué)效果。 本書將C++語言作為大學(xué)生的計(jì)算機(jī)編程入門語言,不僅詳細(xì)介紹了語言本身,而且介紹了常用的數(shù)據(jù)結(jié)構(gòu)和算法、面向?qū)ο蟮脑O(shè)計(jì)思想和編程方法、UML建模語言。全書以面向?qū)ο蟮某绦蛟O(shè)計(jì)方法貫穿始終,每章都是首先闡述面向?qū)ο蟮某绦蛟O(shè)計(jì)思想和方法,由實(shí)際問題入手,然后引出必要的語法知識,在講解語法時(shí)著重從程序設(shè)計(jì)方法學(xué)的角度講述其意義和用途。編寫本書的宗旨是,不僅要使讀者掌握C++語言本身,而且要能夠?qū)ΜF(xiàn)實(shí)世界中較簡單的問題及其解決方法用計(jì)算機(jī)語言進(jìn)行描述。當(dāng)然,要達(dá)到能夠描述較復(fù)雜的問題域還需要學(xué)習(xí)“面向?qū)ο蟮能浖こ獭钡绕渌n程。 針對初學(xué)者和自學(xué)讀者的特點(diǎn),本書力求做到深入淺出,將復(fù)雜的概念用簡潔淺顯的語言娓娓道來。不同學(xué)?梢葬槍ψ陨淼慕虒W(xué)特點(diǎn),選擇不同的章節(jié)組合進(jìn)行教學(xué)。如果學(xué)時(shí)較少,可以只選擇第1~8章、第11章。每章的深度探索也是選學(xué)內(nèi)容,可以根據(jù)不同專業(yè)的教學(xué)需求進(jìn)行選擇。 作者本人使用本書講授的清華大學(xué)本科生課程,有講課32學(xué)時(shí)和48學(xué)時(shí)兩種,實(shí)驗(yàn)課學(xué)時(shí)數(shù)均為32學(xué)時(shí),課外學(xué)時(shí)數(shù)為32學(xué)時(shí),每學(xué)時(shí)45分鐘。建議講課學(xué)時(shí)數(shù)至少32學(xué)時(shí),分配如下: 第1章2學(xué)時(shí),第2章4學(xué)時(shí),第3章2學(xué)時(shí),第4章4學(xué)時(shí),第5章2學(xué)時(shí),第6章 4學(xué)時(shí),第7章 2學(xué)時(shí),第8章 2學(xué)時(shí),第9章4學(xué)時(shí),第10章 2學(xué)時(shí),第11章2學(xué)時(shí),第12章2學(xué)時(shí)。 如果課程安排的講課學(xué)時(shí)超過32學(xué)時(shí),可以酌情在課上穿插安排課堂練習(xí)、課堂討論等。 實(shí)驗(yàn)學(xué)時(shí)數(shù)的分配請參考配套的《C++語言程序設(shè)計(jì)(第5版)學(xué)生用書》。 四、 內(nèi)容摘要 第1章緒論。從發(fā)展的角度概要介紹了面向?qū)ο蟪绦蛟O(shè)計(jì)語言的產(chǎn)生和特點(diǎn);面向?qū)ο蠓椒ǖ挠蓙砗椭饕幕靖拍;并簡單介紹了什么是面向?qū)ο蟮能浖こ。最后,介紹了信息在計(jì)算機(jī)中的表示和存儲以及程序的開發(fā)過程。 第2章C++語言簡單程序設(shè)計(jì)。講述C++語言程序設(shè)計(jì)的基礎(chǔ)知識。首先簡要介紹C++語言的發(fā)展歷史及其特點(diǎn);接著學(xué)習(xí)構(gòu)成C++語句的基本部分:字符集、關(guān)鍵字、標(biāo)識符、操作符等。還有C++語言的基本數(shù)據(jù)類型和自定義數(shù)據(jù)類型,以及算法的控制結(jié)構(gòu):順序、選擇和循環(huán)結(jié)構(gòu)!吧疃忍剿鳌苯榻B變量的實(shí)現(xiàn)機(jī)制和C++語言表達(dá)式的執(zhí)行原理。 第3章函數(shù)。講述C++語言的函數(shù)。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,函數(shù)對處理問題過程的基本抽象單元,是對功能的抽象。同時(shí),使用函數(shù)也為代碼的重用提供了技術(shù)上的支持。我們主要從應(yīng)用的角度講述各種函數(shù)的定義和使用方法!吧疃忍剿鳌苯榻B運(yùn)行棧與函數(shù)調(diào)用的執(zhí)行、函數(shù)聲明與類型安全。 第4章類與對象。首先介紹面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想及其主要特點(diǎn):抽象、封裝、繼承和多態(tài)。接著圍繞數(shù)據(jù)封裝這一特點(diǎn),著重講解面向?qū)ο笤O(shè)計(jì)方法的核心概念——類。其中包括類的定義、實(shí)現(xiàn)以及如何利用類來解決具體問題。最后,簡單介紹了如何用UML描述類的特性。“深度探索”介紹位域、用構(gòu)造函數(shù)定義類型轉(zhuǎn)換,以及對象作為函數(shù)參數(shù)和返回值的傳遞方式。 第5章數(shù)據(jù)的共享與保護(hù)。講述標(biāo)識符的作用域和可見性及變量、對象的生存期;使用局部變量、全局變量、類的數(shù)據(jù)成員、類的靜態(tài)成員和友元來實(shí)現(xiàn)數(shù)據(jù)共享,共享數(shù)據(jù)的保護(hù),以及使用多文件結(jié)構(gòu)來組織和編寫程序,解決較為復(fù)雜的問題!吧疃忍剿鳌苯榻B常成員函數(shù)的聲明原則,代碼的編譯、連接與執(zhí)行過程。 第6章數(shù)組、指針與字符串。討論數(shù)組、指針與字符串。數(shù)組和指針是C++語言中最常用的復(fù)合(構(gòu)造)類型數(shù)據(jù),是數(shù)據(jù)和對象組織、表示的最主要手段,也是組織運(yùn)算的有力工具。本章首先介紹數(shù)組、指針的基本概念,動(dòng)態(tài)內(nèi)存分配以及動(dòng)態(tài)數(shù)組對象。接著圍繞數(shù)據(jù)和對象組織這一問題,著重講解如何通過使用數(shù)組和指針解決數(shù)據(jù)、函數(shù)以及對象之間的聯(lián)系和協(xié)調(diào)。對于字符串及其處理,本章重點(diǎn)介紹string類。“深度探索”介紹指針與引用的聯(lián)系、指針的安全性隱患及其應(yīng)對方案,以及const_cast的應(yīng)用。 第7章類的繼承。講述類的繼承特性。圍繞派生過程,著重討論不同繼承方式下的基類成員的訪問控制問題、添加構(gòu)造函數(shù)和析構(gòu)函數(shù)。接著討論在較為復(fù)雜的繼承關(guān)系中,類成員的唯一標(biāo)識和訪問問題!吧疃忍剿鳌苯榻B組合與繼承的區(qū)別與聯(lián)系、派生類對象的內(nèi)存布局,以及基類向派生類的轉(zhuǎn)換及其安全性問題。 第8章多態(tài)性。講述類的另一個(gè)重要特性——多態(tài)性。多態(tài)是指同樣的消息被不同類型的對象接收時(shí)導(dǎo)致完全不同的行為,是對類的特定成員函數(shù)的再抽象。C++語言支持的多態(tài)有多種類型,重載(包括函數(shù)重載和運(yùn)算符重載)和虛函數(shù)是其中主要的方式!吧疃忍剿鳌苯榻B多態(tài)類型與非多態(tài)類型的區(qū)別、運(yùn)行時(shí)類型識別機(jī)制,以及虛函數(shù)動(dòng)態(tài)綁定的實(shí)現(xiàn)原理。 第9章模板與群體數(shù)據(jù)。群體是指由多個(gè)數(shù)據(jù)元素組成的集合體。群體可以分為兩大類:線性群體和非線性群體。本章介紹模板的基礎(chǔ)語法和幾種常用的群體類模板。 本章討論的群體的組織問題,指的是對數(shù)組元素的排序與查找方法。排序(sorting)又稱分類或整理,是將一個(gè)無序序列調(diào)整為有序序列的過程。查找(searching)是在一個(gè)序列中,按照某種方式找出需要的特定數(shù)據(jù)元素的過程。 最后“深度探索”介紹模板的實(shí)例化機(jī)制、為模板定義特殊的實(shí)現(xiàn)、模板元編程簡介和可變參數(shù)模板簡介。 第10章泛型程序設(shè)計(jì)與C++語言標(biāo)準(zhǔn)模板庫。泛型程序設(shè)計(jì)就是要將程序?qū)懙帽M可能通用,同時(shí)并不損失效率。本章簡單介紹C++語言標(biāo)準(zhǔn)模板庫(STL)中涉及的一些概念、術(shù)語,以及它的結(jié)構(gòu)、主要組件的使用方法。重點(diǎn)介紹容器、迭代器、算法和函數(shù)對象的基本應(yīng)用。目的是使讀者對STL與泛型程序設(shè)計(jì)方法有一個(gè)概要性的了解。“深度探索”深入介紹深層復(fù)制與淺層復(fù)制的問題;還介紹了STL組件的類型特征與STL的擴(kuò)展問題;以及Boost庫。 第11章流類庫與輸入輸出。講述流的概念,然后介紹流類庫的結(jié)構(gòu)和使用。就像C語言一樣,C++語言中也沒有輸入輸出語句。但C++編譯系統(tǒng)帶有一個(gè)面向?qū)ο蟮腎/O軟件包,它就是I/O流類庫。“深度探索”介紹寬字符、寬字符串與寬流,以及對象的串行化問題。 第12章異常處理。講述異常處理問題。異常是一種程序定義的錯(cuò)誤,在C++語言中,異常處理是對所能預(yù)料的運(yùn)行錯(cuò)誤進(jìn)行處理的一套實(shí)現(xiàn)機(jī)制。try、throw和catch語句就是C++語言中用于實(shí)現(xiàn)異常處理的機(jī)制。有了C++異常處理,程序可以向上層模塊傳遞異常事件,這樣程序能更好地從這些異常事件中恢復(fù)過來!吧疃忍剿鳌苯榻B異常安全性問題和避免異常發(fā)生時(shí)的資源泄露。 五、 作者分工 本書前4版的合作作者董淵、何江舟編寫的內(nèi)容仍繼續(xù)作為本版的重要內(nèi)容。另外,王勇、梁嘉駿參與了本版教材的編寫工作,對全部例題按照C++11、C++14標(biāo)準(zhǔn)進(jìn)行了重新調(diào)試,補(bǔ)充了部分新的語法內(nèi)容。 感謝讀者選擇使用本書,歡迎您對本書內(nèi)容提出意見和建議,我們將不勝感激。作者的電子郵件地址為zhengli@tsinghua.edu.cn,來信標(biāo)題請包含“C++ book”。 作者2020年8月于清華大學(xué) 鄭莉,清華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系教授;主講MOOC“C++語言程序設(shè)計(jì)”、“Java程序設(shè)計(jì)”;國家精品資源共享課負(fù)責(zé)人;全國高等學(xué)校計(jì)算機(jī)教育研究會(huì)副理事長;全國高等院校計(jì)算機(jī)基礎(chǔ)教育研究會(huì)副會(huì)長;全國信息技術(shù)標(biāo)準(zhǔn)化技術(shù)委員會(huì)教育技術(shù)分技術(shù)委員會(huì)秘書長。主要研究方向:計(jì)算機(jī)教育、教育信息化、軟件工程,主持和參加多項(xiàng)國家863、支撐計(jì)劃課題和教育部課題。 主編出版教材20余部,其中《C++語言程序設(shè)計(jì)》獲教育部自然科學(xué)獎(jiǎng)和國j級精品教材稱號!禖++語言程序設(shè)計(jì)》、《Java語言程序設(shè)計(jì)》(本MOOC配套教材)為“十二五”普通高等教育本科國家級規(guī)劃教材 起草教育信息化相關(guān)國家標(biāo)準(zhǔn)5部、國際標(biāo)準(zhǔn)1部。 獲國j家級教學(xué)成果獎(jiǎng)、北京市教學(xué)成果獎(jiǎng)、教育部自然科學(xué)獎(jiǎng)、教育部科技進(jìn)步獎(jiǎng)、北京市科技進(jìn)步獎(jiǎng)、電子學(xué)會(huì)科技進(jìn)步獎(jiǎng)等9項(xiàng)國j級、教育部、北京市獎(jiǎng)勵(lì)。 目錄 第1章緒論1 1.1計(jì)算機(jī)程序設(shè)計(jì)語言的發(fā)展1 1.1.1機(jī)器語言與匯編語言1 1.1.2高級語言2 1.1.3面向?qū)ο蟮恼Z言2 1.2面向?qū)ο蟮姆椒? 1.2.1面向?qū)ο蠓椒ǖ挠蓙? 1.2.2面向?qū)ο蟮幕靖拍? 1.3面向?qū)ο蟮能浖_發(fā)5 1.3.1分析5 1.3.2設(shè)計(jì)5 1.3.3編程5 1.3.4測試6 1.3.5維護(hù)6 1.4信息的表示與存儲6 1.4.1計(jì)算機(jī)的數(shù)字系統(tǒng)6 1.4.2幾種進(jìn)位記數(shù)制之間的轉(zhuǎn)換8 1.4.3信息的存儲單位10 1.4.4二進(jìn)制數(shù)的編碼表示11 1.4.5定點(diǎn)數(shù)和浮點(diǎn)數(shù)14 1.4.6數(shù)的表示范圍14 1.4.7非數(shù)值信息的表示15 1.5程序開發(fā)的基本概念15 1.5.1基本術(shù)語15 1.5.2完整的程序過程16 1.6小結(jié)17 習(xí)題17 第2章C++語言簡單程序設(shè)計(jì)18 2.1C++語言概述18 2.1.1C++語言的產(chǎn)生18 2.1.2C++語言的特點(diǎn)19 2.1.3C++語言程序?qū)嵗?9 2.1.4字符集20 2.1.5詞法記號20 2.2基本數(shù)據(jù)類型和表達(dá)式22 2.2.1基本數(shù)據(jù)類型23 2.2.2常量24 2.2.3變量26 2.2.4符號常量28 2.2.5constexpr與常量表達(dá)式28 2.2.6運(yùn)算符與表達(dá)式29 2.2.7語句38 2.3數(shù)據(jù)的輸入與輸出38 2.3.1I/O流38 2.3.2預(yù)定義的插入符和提取符38 2.3.3簡單的I/O格式控制39 2.4算法的基本控制結(jié)構(gòu)40 2.4.1用if語句實(shí)現(xiàn)選擇結(jié)構(gòu)40 2.4.2多重選擇結(jié)構(gòu)42 2.4.3循環(huán)結(jié)構(gòu)45 2.4.4循環(huán)結(jié)構(gòu)與選擇結(jié)構(gòu)的嵌套51 2.4.5其他控制語句53 2.5類型別名與類型推斷53 2.5.1類型別名53 2.5.2auto類型與decltype類型54 2.6深度探索55 2.6.1變量的實(shí)現(xiàn)機(jī)制55 2.6.2C++語言表達(dá)式的執(zhí)行原理58 2.7小結(jié)59 習(xí)題60 第3章函數(shù)64 3.1函數(shù)的定義與使用64 3.1.1函數(shù)的定義64 3.1.2函數(shù)的調(diào)用65 3.1.3函數(shù)的參數(shù)傳遞77 3.2內(nèi)聯(lián)函數(shù)82 3.3constexpr函數(shù)83 3.4帶默認(rèn)形參值的函數(shù)84 3.5函數(shù)重載86 3.6使用C++語言系統(tǒng)函數(shù)88 3.7深度探索90 3.7.1運(yùn)行棧與函數(shù)調(diào)用的執(zhí)行90 3.7.2函數(shù)聲明與類型安全94 3.8小結(jié)95 習(xí)題96 第4章類與對象98 4.1面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特點(diǎn)98 4.1.1抽象98 4.1.2封裝99 4.1.3繼承99 4.1.4多態(tài)100 4.2類和對象100 4.2.1類的定義101 4.2.2類成員的訪問控制102 4.2.3對象103 4.2.4類的成員函數(shù)104 4.2.5程序?qū)嵗?05 4.3構(gòu)造函數(shù)和析構(gòu)函數(shù)107 4.3.1構(gòu)造函數(shù)107 4.3.2默認(rèn)構(gòu)造函數(shù)109 4.3.3委托構(gòu)造函數(shù)110 4.3.4復(fù)制構(gòu)造函數(shù)110 4.3.5析構(gòu)函數(shù)114 4.3.6移動(dòng)構(gòu)造函數(shù)115 4.3.7default、delete函數(shù)116 4.3.8程序?qū)嵗?17 4.4類的組合119 4.4.1組合119 4.4.2前向引用聲明123 4.5UML圖形標(biāo)識124 4.5.1UML簡介125 4.5.2UML類圖125 4.6結(jié)構(gòu)體和聯(lián)合體131 4.6.1結(jié)構(gòu)體131 4.6.2聯(lián)合體132 4.7枚舉類型——enum135 4.8綜合實(shí)例——個(gè)人銀行賬戶管理程序138 4.8.1類的設(shè)計(jì)138 4.8.2源程序及說明139 4.9深度探索141 4.9.1位域141 4.9.2用構(gòu)造函數(shù)定義類型轉(zhuǎn)換144 4.9.3對象作為函數(shù)參數(shù)和返回值的傳遞方式145 4.10小結(jié)148 習(xí)題148 第5章數(shù)據(jù)的共享與保護(hù)150 5.1標(biāo)識符的作用域與可見性150 5.1.1作用域150 5.1.2可見性153 5.2對象的生存期153 5.2.1靜態(tài)生存期153 5.2.2動(dòng)態(tài)生存期154 5.3類的靜態(tài)成員156 5.3.1靜態(tài)數(shù)據(jù)成員157 5.3.2靜態(tài)函數(shù)成員159 5.4類的友元161 5.4.1友元函數(shù)163 5.4.2友元類164 5.5共享數(shù)據(jù)的保護(hù)165 5.5.1常對象165 5.5.2用const修飾的類成員166 5.5.3常引用169 5.6多文件結(jié)構(gòu)和編譯預(yù)處理命令170 5.6.1C++程序的一般組織結(jié)構(gòu)170 5.6.2外部變量與外部函數(shù)173 5.6.3標(biāo)準(zhǔn)C++庫174 5.6.4編譯預(yù)處理175 5.7綜合實(shí)例——個(gè)人銀行賬戶管理程序179 5.8深度探索182 5.8.1常成員函數(shù)的聲明原則182 5.8.2代碼的編譯、連接與執(zhí)行過程184 5.9小結(jié)187 習(xí)題187 第6章數(shù)組、指針與字符串189 6.1數(shù)組189 6.1.1數(shù)組的聲明與使用189 6.1.2數(shù)組的存儲與初始化191 6.1.3數(shù)組作為函數(shù)參數(shù)194 6.1.4對象數(shù)組195 6.1.5程序?qū)嵗?97 6.2指針200 6.2.1內(nèi)存空間的訪問方式200 6.2.2指針變量的聲明201 6.2.3與地址相關(guān)的運(yùn)算——“”和“&”201 6.2.4指針的賦值202 6.2.5指針運(yùn)算204 6.2.6用指針處理數(shù)組元素206 6.2.7指針數(shù)組208 6.2.8用指針作為函數(shù)參數(shù)210 6.2.9指針型函數(shù)211 6.2.10指向函數(shù)的指針213 6.2.11對象指針215 6.3動(dòng)態(tài)內(nèi)存分配220 6.4用vector創(chuàng)建數(shù)組對象226 6.5深層復(fù)制與淺層復(fù)制228 6.6字符串231 6.6.1用字符數(shù)組存儲和處理字符串231 6.6.2string類232 6.7綜合實(shí)例——個(gè)人銀行賬戶管理程序236 6.8深度探索242 6.8.1指針與引用242 6.8.2指針的安全性隱患及其應(yīng)對方案244 6.8.3const_cast的應(yīng)用247 6.9小結(jié)249 習(xí)題250 第7章類的繼承252 7.1基類與派生類252 7.1.1繼承關(guān)系舉例252 7.1.2派生類的定義253 7.1.3派生類生成過程255 7.2訪問控制256 7.2.1公有繼承257 7.2.2私有繼承259 7.2.3保護(hù)繼承261 7.3類型兼容規(guī)則263 7.4派生類的構(gòu)造和析構(gòu)函數(shù)265 7.4.1構(gòu)造函數(shù)265 7.4.2復(fù)制構(gòu)造函數(shù)269 7.4.3析構(gòu)函數(shù)269 7.4.4刪除delete構(gòu)造函數(shù)271 7.5派生類成員的標(biāo)識與訪問271 7.5.1作用域分辨符272 7.5.2虛基類277 7.5.3虛基類及其派生類構(gòu)造函數(shù)279 7.6程序?qū)嵗酶咚瓜シń饩性方程組280 7.6.1算法基本原理281 7.6.2程序設(shè)計(jì)分析282 7.6.3源程序及說明282 7.6.4運(yùn)行結(jié)果與分析287 7.7綜合實(shí)例——個(gè)人銀行賬戶管理程序288 7.7.1問題的提出289 7.7.2類設(shè)計(jì)289 7.7.3源程序及說明290 7.7.4運(yùn)行結(jié)果與分析295 7.8深度探索296 7.8.1組合與繼承296 7.8.2派生類對象的內(nèi)存布局298 7.8.3基類向派生類的轉(zhuǎn)換及其安全性問題302 7.9小結(jié)303 習(xí)題304 第8章多態(tài)性306 8.1多態(tài)性概述306 8.1.1多態(tài)的類型306 8.1.2多態(tài)的實(shí)現(xiàn)306 8.2運(yùn)算符重載307 8.2.1運(yùn)算符重載的規(guī)則307 8.2.2運(yùn)算符重載為成員函數(shù)308 8.2.3運(yùn)算符重載為非成員函數(shù)312 8.3虛函數(shù)315 8.3.1一般虛函數(shù)成員316 8.3.2虛析構(gòu)函數(shù)320 8.4純虛函數(shù)與抽象類321 8.4.1純虛函數(shù)322 8.4.2抽象類322 8.5程序?qū)嵗儾介L梯形積分算法求解函數(shù)的定積分324 8.5.1算法基本原理324 8.5.2程序設(shè)計(jì)分析326 8.5.3源程序及說明327 8.5.4運(yùn)行結(jié)果與分析329 8.6綜合實(shí)例——對個(gè)人銀行賬戶管理程序的改進(jìn)329 8.7深度探索336 8.7.1多態(tài)類型與非多態(tài)類型336 8.7.2運(yùn)行時(shí)類型識別337 8.7.3虛函數(shù)動(dòng)態(tài)綁定的實(shí)現(xiàn)原理340 8.8小結(jié)343 習(xí)題344 第9章模板與群體數(shù)據(jù)345 9.1函數(shù)模板與類模板346 9.1.1函數(shù)模板346 9.1.2類模板349 9.2線性群體353 9.2.1線性群體的概念353 9.2.2直接訪問群體——數(shù)組類353 9.2.3順序訪問群體——鏈表類362 9.2.4棧類367 9.2.5隊(duì)列類373 9.3群體數(shù)據(jù)的組織376 9.3.1插入排序376 9.3.2選擇排序377 9.3.3交換排序378 9.3.4順序查找380 9.3.5折半查找380 9.4綜合實(shí)例——對個(gè)人銀行賬戶管理程序的改進(jìn)381 9.5深度探索384 9.5.1模板的實(shí)例化機(jī)制384 9.5.2為模板定義特殊的實(shí)現(xiàn)387 9.5.3模板元編程簡介392 9.5.4可變參數(shù)模板簡介394 9.6小結(jié)396 習(xí)題396 第10章泛型程序設(shè)計(jì)與C++語言標(biāo)準(zhǔn)模板庫399 10.1泛型程序設(shè)計(jì)及STL的結(jié)構(gòu)399 10.1.1泛型程序設(shè)計(jì)的基本概念399 10.1.2STL簡介400 10.2迭代器403 10.2.1輸入流迭代器和輸出流迭代器404 10.2.2迭代器的分類406 10.2.3迭代器的區(qū)間408 10.2.4迭代器的輔助函數(shù)410 10.3容器的基本功能與分類410 10.4順序容器413 10.4.1順序容器的基本功能413 10.4.25種順序容器的特性417 10.4.3順序容器的插入迭代器424 10.4.4順序容器的適配器425 10.5關(guān)聯(lián)容器429 10.5.1關(guān)聯(lián)容器的分類及基本功能429 10.5.2集合432 10.5.3映射433 10.5.4多重集合與多重映射436 10.5.5無序容器437 10.6函數(shù)對象438 10.6.1函數(shù)對象的概念438 10.6.2lambda表達(dá)式442 10.6.3函數(shù)對象參數(shù)綁定444 10.7算法445 10.7.1STL算法基礎(chǔ)446 10.7.2不可變序列算法447 10.7.3可變序列算法449 10.7.4排序和搜索算法452 10.7.5數(shù)值算法457 10.8綜合實(shí)例——對個(gè)人銀行賬戶管理程序的改進(jìn)459 10.9深度探索464 10.9.1swap464 10.9.2STL組件的類型特征與STL的擴(kuò)展466 10.9.3Boost簡介471 10.10小結(jié)474 習(xí)題474 第11章流類庫與輸入輸出477 11.1I/O流的概念及流類庫結(jié)構(gòu)477 11.2輸出流479 11.2.1構(gòu)造輸出流對象479 11.2.2使用插入運(yùn)算符和操縱符480 11.2.3文件輸出流成員函數(shù)484 11.2.4二進(jìn)制輸出文件486 11.2.5字符串輸出流487 11.3輸入流488 11.3.1構(gòu)造輸入流對象488 11.3.2使用提取運(yùn)算符489 11.3.3輸入流操縱符489 11.3.4輸入流相關(guān)函數(shù)489 11.3.5字符串輸入流492 11.4輸入輸出流493 11.5綜合實(shí)例——對個(gè)人銀行賬戶管理程序的改進(jìn)494 11.6深度探索499 11.6.1寬字符、寬字符串與寬流499 11.6.2對象的串行化502 11.7小結(jié)505 習(xí)題505 第12章異常處理507 12.1異常處理的基本思想507 12.2C++異常處理的實(shí)現(xiàn)508 12.2.1異常處理的語法508 12.2.2異常接口聲明510 12.3異常處理中的構(gòu)造與析構(gòu)510 12.4標(biāo)準(zhǔn)程序庫異常處理512 12.5綜合實(shí)例——對個(gè)人銀行賬戶管理程序的改進(jìn)515 12.6深度探索518 12.6.1異常安全性問題518 12.6.2避免異常發(fā)生時(shí)的資源泄露520 12.6.3noexcept異常說明523 12.7小結(jié)523 習(xí)題524 參考文獻(xiàn)525
你還可能感興趣
我要評論
|