出版時間:2010-7 出版社:清華大學(xué)出版社 作者:鄭莉,董江舟 編著 頁數(shù):529
Tag標簽:無
前言
一、版本說明本書第1版于1999年出版,第2版于2001年出版,第3版于2003年出版。第4版是在前三版的基礎(chǔ)上,廣泛聽取了讀者和同行的建議,參考了最新的資料,并根據(jù)作者在授課過程中的經(jīng)驗而形成的。第4版主要修改內(nèi)容如下。(1)刪除了原來的第13章。(2)在第2-12章中,每章增加了一節(jié)“深度探索”,作為選學(xué)內(nèi)容。(3)編寫了貫穿第4-10章的新的綜合實例“個人銀行賬戶管理程序”。(4)重新編寫了第10章。二、本書的編寫背景C++語言是從C語言發(fā)展演變而來的一種面向?qū)ο蟮某绦蛟O(shè)計語言。C++語言的主要特點表現(xiàn)在兩個方面:一是兼容C,二是支持面向?qū)ο蟮姆椒?。面向?qū)ο蟮某绦蛟O(shè)計(OOP)方法將數(shù)據(jù)及對數(shù)據(jù)的操作方法封裝在一起,作為一個相互依存、不可分離的整體一一對象。對同類型對象抽象出其共性,形成類。類中的大多數(shù)數(shù)據(jù),只能用本類的方法進行處理。類通過一個簡單的外部接口,與外界發(fā)生關(guān)系,對象與對象之間通過消息進行通信。這樣,程序模塊間的關(guān)系簡單,程序模塊的獨立性、數(shù)據(jù)的安全性具有良好的保障,通過繼承與多態(tài)性,使程序具有很高的可重用性,使得軟件的開發(fā)和維護都更為方便。
內(nèi)容概要
本書針對程序設(shè)計的初學(xué)者,以面向?qū)ο蟮某绦蛟O(shè)計思想為主線,以通俗易懂的方法介紹C++語言,引導(dǎo)讀者以最自然的方式,將人類習(xí)慣的面向?qū)ο蟮乃季S方法運用到程序設(shè)計中。主要內(nèi)容包括程序設(shè)計基礎(chǔ)知識、類與對象的基本概念、繼承與多態(tài)、輸入輸出流,以及泛型程序設(shè)計。此外,本教材還介紹了一些常用數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識,使得讀者學(xué)習(xí)本書后,能夠解決一些簡單的實際問題。整套教材語言生動、流暢,深入淺出。適用于各類學(xué)校的C++語言程序設(shè)計課程。
書籍目錄
第1章 緒論1 1.1 計算機程序設(shè)計語言的發(fā)展1 1.1.1 機器語言與匯編語言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è)計5 1.3.3 編程6 1.3.4 測試6 1.3.5 維護6 1.4 信息的表示與存儲6 1.4.1 計算機的數(shù)字系統(tǒng)6 1.4.2 幾種進位記數(shù)制之間的轉(zhuǎn)換8 1.4.3 信息的存儲單位10 1.4.4 二進制數(shù)的編碼表示11 1.4.5 定點數(shù)和浮點數(shù)15 1.4.6 數(shù)的表示范圍15 1.4.7 非數(shù)值信息的表示16 1.5 程序開發(fā)的基本概念16 1.5.1 基本術(shù)語16 1.5.2 完整的程序過程17 1.6 小結(jié)18 習(xí)題18第2章 C++簡單程序設(shè)計19 2.1 C++語言概述19 2.1.1 C++的產(chǎn)生19 2.1.2 C++的特點20 2.1.3 C++程序?qū)嵗?0 2.1.4 字符集21 2.1.5 詞法記號22 2.2 基本數(shù)據(jù)類型和表達式23 2.2.1 基本數(shù)據(jù)類型24 2.2.2 常量25 2.2.3 變量27 2.2.4 符號常量28 2.2.5 運算符與表達式28 2.2.6 語句37 2.3 數(shù)據(jù)的輸入與輸出37 2.3.1 I/O流37 2.3.2 預(yù)定義的插入符和提取符37 2.3.3 簡單的I/O格式控制38 2.4 算法的基本控制結(jié)構(gòu)39 2.4.1 用if語句實現(xiàn)選擇結(jié)構(gòu)39 2.4.2 多重選擇結(jié)構(gòu)41 2.4.3 循環(huán)結(jié)構(gòu)44 2.4.4 循環(huán)結(jié)構(gòu)與選擇結(jié)構(gòu)的嵌套49 2.4.5 其他控制語句52 2.5 自定義數(shù)據(jù)類型52 2.5.1 typedef聲明53 2.5.2 枚舉類型enum53 2.6 深度探索55 2.6.1 變量的實現(xiàn)機制55 2.6.2 C++表達式的執(zhí)行原理58 2.7 小結(jié)60 習(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ù)傳遞78 3.2 內(nèi)聯(lián)函數(shù)81 3.3 帶默認形參值的函數(shù)82 3.4 函數(shù)重載84 3.5 C++系統(tǒng)函數(shù)86 3.6 深度探索89 3.6.1 運行棧與函數(shù)調(diào)用的執(zhí)行89 3.6.2 函數(shù)聲明與類型安全94 3.7 小結(jié)95 習(xí)題96第4章 類與對象98 4.1 面向?qū)ο蟪绦蛟O(shè)計的基本特點98 4.1.1 抽象98 4.1.2 封裝99 4.1.3 繼承100 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ū)嵗?06 4.3 構(gòu)造函數(shù)和析構(gòu)函數(shù)107 4.3.1 構(gòu)造函數(shù)107 4.3.2 復(fù)制構(gòu)造函數(shù)109 4.3.3 析構(gòu)函數(shù)113 4.3.4 程序?qū)嵗?14 4.4 類的組合116 4.4.1 組合116 4.4.2 前向引用聲明120 4.5 UML圖形標識122 4.5.1 UML簡介122 4.5.2 UML類圖123 4.6 結(jié)構(gòu)體和聯(lián)合體129 4.6.1 結(jié)構(gòu)體129 4.6.2 聯(lián)合體130 4.7 綜合實例--個人銀行賬戶管理程序133 4.7.1 類的設(shè)計133 4.7.2 源程序及說明134 4.8 深度探索137 4.8.1 位域137 4.8.2 用構(gòu)造函數(shù)定義類型轉(zhuǎn)換139 4.8.3 對象作為函數(shù)參數(shù)和返回值的傳遞方式140 4.9 小結(jié)143 習(xí)題144第5章 數(shù)據(jù)的共享與保護146 5.1 標識符的作用域與可見性146 5.1.1 作用域146 5.1.2 可見性150 5.2 對象的生存期150 5.2.1 靜態(tài)生存期150 5.2.2 動態(tài)生存期151 5.3 類的靜態(tài)成員153 5.3.1 靜態(tài)數(shù)據(jù)成員154 5.3.2 靜態(tài)函數(shù)成員156 5.4 類的友元158 5.4.1 友元函數(shù)160 5.4.2 友元類161 5.5 共享數(shù)據(jù)的保護163 5.5.1 常對象163 5.5.2 用const修飾的類成員164 5.5.3 常引用166 5.6 多文件結(jié)構(gòu)和編譯預(yù)處理命令168 5.6.1 C++程序的一般組織結(jié)構(gòu)168 5.6.2 外部變量與外部函數(shù)170 5.6.3 標準C++庫172 5.6.4 編譯預(yù)處理173 5.7 綜合實例--個人銀行賬戶管理程序176 5.8 深度探索180 5.8.1 常成員函數(shù)的聲明原則180 5.8.2 代碼的編譯連接與執(zhí)行過程182 5.9 小結(jié)185 習(xí)題185第6章 數(shù)組、指針與字符串188 6.1 數(shù)組188 6.1.1 數(shù)組的聲明與使用188 6.1.2 數(shù)組的存儲與初始化190 6.1.3 數(shù)組作為函數(shù)參數(shù)193 6.1.4 對象數(shù)組194 6.1.5 程序?qū)嵗?96 6.2 指針199 6.2.1 內(nèi)存空間的訪問方式199 6.2.2 指針變量的聲明200 6.2.3 與地址相關(guān)的運算“?”和“&" 200 6.2.4 指針的賦值201 6.2.5 指針運算203 6.2.6 用指針處理數(shù)組元素205 6.2.7 指針數(shù)組206 6.2.8 用指針作為函數(shù)參數(shù)209 6.2.9 指針型函數(shù)210 6.2.10 指向函數(shù)的指針211 6.2.11 對象指針213 6.3 動態(tài)內(nèi)存分配218 6.4 用vector創(chuàng)建數(shù)組對象224 6.5 深復(fù)制與淺復(fù)制226 6.6 字符串229 6.6.1 用字符數(shù)組存儲和處理字符串230 6.6.2 string類230 6.7 綜合實例--個人銀行賬戶管理程序234 6.8 深度探索241 6.8.1 指針與引用241 6.8.2 指針的安全性隱患及其應(yīng)對方案243 6.8.3 const_cast的應(yīng)用246 6.9 小結(jié)248 習(xí)題248第7章 繼承與派生251 7.1 類的繼承與派生251 7.1.1 繼承關(guān)系舉例251 7.1.2 派生類的定義252 7.1.3 派生類生成過程254 7.2 訪問控制256 7.2.1 公有繼承256 7.2.2 私有繼承258 7.2.3 保護繼承260 7.3 類型兼容規(guī)則262 7.4 派生類的構(gòu)造和析構(gòu)函數(shù)264 7.4.1 構(gòu)造函數(shù)265 7.4.2 復(fù)制構(gòu)造函數(shù)267 7.4.3 析構(gòu)函數(shù)268 7.5 派生類成員的標識與訪問270 7.5.1 作用域分辨符270 7.5.2 虛基類276 7.5.3 虛基類及其派生類構(gòu)造函數(shù)278 7.6 程序?qū)嵗?-用高斯消去法解線性方程組279 7.6.1 算法基本原理279 7.6.2 程序設(shè)計分析280 7.6.3 源程序及說明281 7.6.4 運行結(jié)果與分析286 7.7 綜合實例--個人銀行賬戶管理程序287 7.7.1 問題的提出287 7.7.2 類設(shè)計288 7.7.3 源程序及說明289 7.7.4 運行結(jié)果與分析294 7.8 深度探索295 7.8.1 組合與繼承295 7.8.2 派生類對象的內(nèi)存布局298 7.8.3 基類向派生類的轉(zhuǎn)換及其安全性問題301 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)的實現(xiàn)306 8.2 運算符重載307 8.2.1 運算符重載的規(guī)則308 8.2.2 運算符重載為成員函數(shù)309 8.2.3 運算符重載為非成員函數(shù)313 8.3 虛函數(shù)315 8.3.1 一般虛函數(shù)成員316 8.3.2 虛析構(gòu)函數(shù)319 8.4 純虛函數(shù)與抽象類321 8.4.1 純虛函數(shù)321 8.4.2 抽象類322 8.5 程序?qū)嵗?-變步長梯形積分算法求解函數(shù)的定積分324 8.5.1 算法基本原理324 8.5.2 程序設(shè)計分析325 8.5.3 源程序及說明326 8.5.4 運行結(jié)果與分析329 8.6 綜合實例--對個人銀行賬戶管理程序的改進329 8.7 深度探索335 8.7.1 多態(tài)類型與非多態(tài)類型335 8.7.2 運行時類型識別337 8.7.3 虛函數(shù)動態(tài)綁定的實現(xiàn)原理340 8.8 小結(jié)343 習(xí)題344第9章 群體類和群體數(shù)據(jù)的組織346 9.1 函數(shù)模板與類模板347 9.1.1 函數(shù)模板347 9.1.2 類模板350 9.2 線性群體353 9.2.1 線性群體的概念353 9.2.2 直接訪問群體--數(shù)組類355 9.2.3 順序訪問群體--鏈表類363 9.2.4 棧類368 9.2.5 隊列類374 9.3 群體數(shù)據(jù)的組織377 9.3.1 插入排序377 9.3.2 選擇排序379 9.3.3 交換排序380 9.3.4 順序查找381 9.3.5 折半查找381 9.4 綜合實例--對個人銀行賬戶管理程序的改進382 9.5 深度探索385 9.5.1 模板的實例化機制385 9.5.2 為模板定義特殊的實現(xiàn)388 9.5.3 模板元編程簡介392 9.6 小結(jié)395 習(xí)題395第10章 泛型程序設(shè)計與C++標準模板庫398 10.1 泛型程序設(shè)計及STL的結(jié)構(gòu)398 10.1.1 泛型程序設(shè)計的基本概念398 10.1.2 STL簡介399 10.2 迭代器402 10.2.1 輸入流迭代器和輸出流迭代器403 10.2.2 迭代器的分類405 10.2.3 迭代器的區(qū)間407 10.2.4 迭代器的輔助函數(shù)409 10.3 容器410 10.3.1 容器的基本功能與分類410 10.3.2 順序容器412 10.3.3 關(guān)聯(lián)容器427 10.4 函數(shù)對象435 10.4.1 函數(shù)對象基本概念及分類436 10.4.2 函數(shù)適配器441 10.5 算法447 10.5.1 STL算法基礎(chǔ)448 10.5.2 不可變序列算法448 10.5.3 可變序列算法451 10.5.4 排序和搜索算法455 10.5.5 數(shù)值算法459 10.6 綜合實例--對個人銀行賬戶管理程序的改進461 10.7 深度探索467 10.7.1 swap467 10.7.2 STL組件的類型特征與STL的擴展469 10.7.3 Boost簡介476 10.8 小結(jié)478 習(xí)題478第11章 流類庫與輸入輸出481 11.1 I/O流的概念及流類庫結(jié)構(gòu)481 11.2 輸出流483 11.2.1 構(gòu)造輸出流對象483 11.2.2 使用插入運算符和操縱符484 11.2.3 文件輸出流成員函數(shù)488 11.2.4 二進制輸出文件490 11.2.5 字符串輸出流491 11.3 輸入流492 11.3.1 構(gòu)造輸入流對象492 11.3.2 使用提取運算符493 11.3.3 輸入流操縱符493 11.3.4 輸入流相關(guān)函數(shù)493 11.3.5 字符串輸入流497 11.4 輸入輸出流498 11.5 綜合實例--對個人銀行賬戶管理程序的改進498 11.6 深度探索503 11.6.1 寬字符、寬字符串與寬流503 11.6.2 對象的串行化507 11.7 小結(jié)510 習(xí)題510第12章 異常處理512 12.1 異常處理的基本思想512 12.2 C++異常處理的實現(xiàn)512 12.2.1 異常處理的語法513 12.2.2 異常接口聲明515 12.3 異常處理中的構(gòu)造與析構(gòu)516 12.4 標準程序庫異常處理517 12.5 綜合實例--對個人銀行賬戶管理程序的改進520 12.6 深度探索523 12.6.1 異常安全性問題523 12.6.2 避免異常發(fā)生時的資源泄漏525 12.7 小結(jié)528 習(xí)題529
章節(jié)摘錄
插圖:下面簡單介紹一下面向?qū)ο蠓椒ㄖ械膸讉€基本概念。當(dāng)然我們不能期望通過幾句話的簡單介紹就完全理解這些概念,在本書的后續(xù)章節(jié)中,會不斷幫助讀者加深對這些概念的理解,以達到熟練運用的目的。1.對象從一般意義上講,對象是現(xiàn)實世界中一個實際存在的事物,它可以是有形的(比如一輛汽車),也可以是無形的(比如一項計劃)。對象是構(gòu)成世界的一個獨立單位,它具有自己的靜態(tài)特征(可以用某種數(shù)據(jù)來描述)和動態(tài)特征(對象所表現(xiàn)的行為或具有的功能)。面向?qū)ο蠓椒ㄖ械膶ο?,是系統(tǒng)中用來描述客觀事物的一個實體,它是用來構(gòu)成系統(tǒng)的一個基本單位。對象由一組屬性和一組行為構(gòu)成。屬性是用來描述對象靜態(tài)特征的數(shù)據(jù)項,行為是用來描述對象動態(tài)特征的操作序列。2.類把眾多的事物歸納、劃分成一些類,是人類在認識客觀世界時經(jīng)常采用的思維方法。分類所依據(jù)的原則是抽象,即忽略事物的非本質(zhì)特征,只注意那些與當(dāng)前目標有關(guān)的本質(zhì)特征,從而找出事物的共性,把具有共同性質(zhì)的事物劃分為一類,得出一個抽象的概念。例如,石頭、樹木、汽車、房屋等都是人們在長期的生產(chǎn)和生活實踐中抽象出的概念。面向?qū)ο蠓椒ㄖ械摹邦悺保蔷哂邢嗤瑢傩院头?wù)的一組對象的集合。它為屬于該類的全部對象提供了抽象的描述,其內(nèi)部包括屬性和行為兩個主要部分。類與對象的關(guān)系猶如模具與鑄件之間的關(guān)系,一個屬于某類的對象稱為該類的一個實例。3.封裝封裝是面向?qū)ο蠓椒ǖ囊粋€重要原則,就是把對象的屬性和服務(wù)結(jié)合成一個獨立的系統(tǒng)單位,并盡可能隱蔽對象的內(nèi)部細節(jié)。這里有兩個含義:第一個含義是把對象的全部屬性和全部服務(wù)結(jié)合在一起,形成一個不可分割的獨立單位。第二個含義也稱做“信息隱蔽”,即盡可能隱蔽對象的內(nèi)部細節(jié),對外形成一個邊界(或者說一道屏障),只保留有限的對外接口使之與外部發(fā)生聯(lián)系。
編輯推薦
《C++語言程序設(shè)計(第4版)》:清華大學(xué)計算機系列教材,普通高等教育“十一五”國家級規(guī)劃教材,國家精品課程教材
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載