C++入門經典(第10版) ( 簡體 字) |
作者:[美]Walter Savitch著 | 類別:1. -> 程式設計 -> C++ -> C++ |
譯者:周靖譯 |
出版社:清華大學出版社 | 3dWoo書號: 48330 詢問書籍請說出此書號!【缺書】 NT售價: 690 元 |
出版日:1/1/2018 |
頁數:739 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787302486763 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: 本書適合C++程序設計和計算機科學入門課程。不要求讀者有任何編程經驗,也不要求掌握除中學代數之外的其他任何數學知識。 本書前幾版的讀者請閱讀關于第10版修訂內容的小節,前言其余內容可略過。新讀者請閱讀前言的全部內容以把握本書脈絡。 第10版修訂內容 第10版采用和第9版相同的體例。保留第9版全部內容,但進行了以下修訂。 * 統一采用camelCase拼寫法,不再采用C風格的下劃線連接。例如,set_name改為setName。 * 第10章討論了淺拷貝和深拷貝。 * 第12章和第17章討論了如何用頭文件引入編譯模板。 * 第18章討論了C++11的std::array類、正則表達式、線程和智能指針。 * 進行了大量勘誤和編輯,強調了文件I/O的首選方法,術語更規范,更好地定義了封裝,并不再討論已在C++11和更高版本中成為標準的一些東西。 * 新增10個編程項目。 * 新增5個視頻講解,總數達69個。這些視頻講解輔導學生解題和寫程序,有助于鞏固對關鍵編程概念的掌握。如書中某個主題有對應的視頻講解,就會出現一行特殊的注釋(視頻講解:……)。 用過第9版的教師可沿用以前的教案,幾乎不需要任何改動。 主題可以靈活排序 本書允許教師自由安排教學順序。為了演示這一靈活性,下面推薦了兩個額外的順序。采用任何順序都不會影響學習的連貫性。為了在改變順序時確保這種連貫性,可能需要移動個別小節而不是全章。但只有較大的、位置便利的小節才需移動。為了幫助您根據需要自定義一個教學/閱讀順序,圖P.1展示了一幅依賴圖。另外,每章都有“預備知識”小節,解釋學習那一章的每一節之前需掌握的內容。 重新排序1:提前學習類 為有效設計類,學生需要掌握一些基本工具,比如控制結構和函數定義。這些基礎知識在第1章∼第6章介紹。完成第6章后,學生就可開始寫自己的類了。如果想提前學習類的相關知識,可像下面這樣重新安排各章順序。 * 基礎知識 第1章∼第6章。這6章全面介紹控制結構、函數定義和基本文件I/O。第3章介紹幾種額外的控制結構,想提前學習類可考慮推遲這一章。 * 類和命名空間 第10章、第11章的11.1節和11.2節、第12章。這些章節全面介紹了如何定義類、友元、重載操作符和命名空間。 * 數組、字符串和向量 第7章和第8章。 * 指針和動態數組 第9章。 * 類中的數組 第11章的11.3節和11.4節。 * 繼承 第15章。 * 遞歸 第14章(可推遲)。 * 指針和鏈表 第13章。 可能還要用到以下各章的部分內容。 * 異常處理 第16章。 * 模板 第17章。 * 標準模板庫 第18章。 重新排序2:略微推遲類的學習 在“重新排序2”中,將先學完所有控制結構和數組的知識,然后才開始學習類。雖然對類的接觸要比“重新排序1”晚,但還是比本書的默認順序提前一些。 * 基礎知識 第1章到第6章。這6章全面介紹了控制結構、函數定義和基本文件I/O。 * 數組和字符串 第7章、第8章的8.1節和8.2節。 * 類和命名空間 第10章、第11章的11.1節、11.2節和第12章。這些章節全面介紹了如何定義類、友元、重載操作符和命名空間。 * 指針和動態數組 第9章。 * 類中的數組 第11章的11.3節和11.4節。 * 繼承 第15章。 * 遞歸 第14章(可推遲)。 * 向量 8.3節。 * 指針和鏈表 第13章。 可能還要用到以下各章的部分內容。 * 異常處理 第16章。 * 模板 第17章。 * 標準模板庫 第18章。 面向學生的易用性 一本書必須按恰當的順序來講解恰當的主題,這是最起碼的要求。另外,在老師和其他有經驗的程序員看來,書的內容必須清晰而正確,這是另一個最起碼的要求。但是不是符合這兩項要求的書都是好書呢?答案是否定的。書中的內容必須采取有利于初學者使用的方式來編排。在這本入門教科書中,我盡力讓學生覺得清楚和友好。本書以前版本的大量學生反饋證明,這種寫作風格確實使內容更清晰,能使學生充分享受到學習的樂趣。 ANSI/ISO C++標準 本書可順利使用符合最新ANSI/ISO C++標準的編譯器。寫作時最新標準是C++14。 高級主題 許多“高級主題”都已成為標準CS1課程的一部分。即使不是,以補充材料的形式提供也不錯。本書提供大量高級主題,它們既可集成到課程中,也可作為自學主題。本書全面講述了C++模板、繼承(包括虛函數)、異常處理和STL(Standard Template Library,標準模板庫)。雖然本書使用了庫,而且教給學生庫的重要性,但不要求任何非標準庫。本書只用所有C++實現都有的庫。 依賴圖 下面的依賴圖展示了各個章節可能的排序方式。連接兩個框的實線表明上部的框必須先于下部的框完成。只要符合這個條件,采用任何閱讀順序都無損連貫性。如果一個框中包含小節編號,表明該框只代表那些小節,不代表全章。
小結框 每個要點都用一個有底紋的方框來小結,它們散布于各章。 自測題 每章都在重要位置提供大量自測題。答案在章末提供。 視頻講解 視頻講解(Video Note)旨在講解關鍵編程概念和技術,演示了從設計到編碼來解決問題的過程。視頻講解使學生能方便地自學感興趣的主題,支持選擇、播放、倒退、快進和暫停。每當看到“ 視頻講解:……”,都表明當前主題有對應的視頻講解。 * 教師資源指南(Instructor’s Resource Guide):包括每一章的教學要點、課堂測驗/答案和大量編程項目的參考答案。 * Test Bank和Test Generator:用于生成試卷。 * PowerPoint幻燈片:包括本書的程序和插圖。 * Lab Manual(實驗手冊)。 致 謝 在準備本書素材期間,許多個人和團體提供了大量建議和幫助,并和我進行了廣泛而深入的探討。本書第1版大部分內容是我在科羅拉多大學(波德分校)計算機系擔任客座教授時寫就的。其余內容和后續版本則是在加州大學(圣地亞哥分校)計算機科學與工程系完成的。非常感謝兩所學校為本書寫作和教學所提供的良好氛圍。 特別感謝向這一版和之前各版提供意見或者編程項目的個人,以下人名按字母排序:Alex Feldman,Amber Settle,Andrew Burt,Andrew Haas,Anne Marchant,Barney MacCabe,Bob Holloway,Bob Matthews,Brian R. King,Bruce Johnston,Carol Roberts,Charles Dowling,Claire Bono,Cynthia Martincic,David Feinstein,David Teague,Dennis Heckman,Donald Needham,Doug Cosman,Dung Nguyen,Edward Carr,Eitan M. Gurari,Ethan Munson,Firooz Khosraviyani,Frank Moore,Gilliean Lee,Huzefa Kagdi,James Stepleton,Jeff Roach,Jeffrey Watson,Jennifer Perkins,Jerry Weltman,Joe Faletti,Joel Cohen,John J. Westman,John Marsaglia,John Russo,Joseph Allen,Joseph D. Oldham,Jerrold Grossman,Jesse Morehouse,Karla Chaveau,Ken Rockwood,Larry Johnson,Len Garrett,Linda F. Wilson,Mal Gunasekera,Marianne Lepp,Matt Johnson,Michael Keenan,Michael Main,Michal Sramka,Naomi Shapiro,Nat Martin,Noah Aydin,Nisar Hundewale,Paul J. Kaiser,Paul Kube,Paulo Franca,Richard Borie,Scot Drysdale,Scott Strong,Sheila Foster,Steve Mahaney,Susanne Sherba,Thomas Judson,Walter A. Manrique,Wei Lian Chen和Wojciech Komornicki。 還要感謝用過本書前幾版的許多老師,他們的建議相當有價值。最后感謝Kenrick Mock幫我實現了這一版的全部修訂。他的工作令我和編輯激賞!
|
內容簡介:作為C++入門經典教材,《C++入門經典(第10版)》結合作者多年的教學經驗,清楚梳理出一個有利于教與學的結構體系,從各章開頭的內容總覽,到隨處可見的自測題、小結框、編程提示和編程陷阱,再到章末的小結、習題、編程練習和編程項目,由淺入深,從簡到繁,可以幫助初學者漸入佳境,逐步理解并掌握重要的編程概念。 《C++入門經典(第10版)》共18章,8個附錄。在講解C++基礎知識之后,循序漸進地引導讀者深入函數、I/O流、類、控制流程、命名空間、數組、字符串、指針和動態數組、遞歸、模板、指針和鏈表、派生類、異常以及標準模板庫。本書前幾版被全國100多所高校選作C++程序設計課程的教材,很受師生歡迎。《C++入門經典(第10版)》也適合自學,不同層次的知識點和測試練習,可以幫助讀者以自己的節奏進入美妙的C++編程世界。 |
目錄:第1章計算機和C++編程入門 1 1.1計算機系統 2 硬件 2 軟件 5 高級語言 6 編譯器 7 歷史回顧 9 1.2編程和問題求解 9 算法 10 程序設計 11 面向對象編程 12 軟件生命周期 12 1.3C++入門 13 C++語言的起源 13 一個C++示范程序 14 陷阱:在\n中錯誤地使用斜杠 17 編程提示:輸入和輸出語法 17 簡單C++程序的布局 17 陷阱:在include的文件名前錯誤地 添加一個空格 19 編譯和運行C++程序 19 陷阱:編譯C++11程序 19 編程提示:讓程序運行起來 20 1.4測試和調試 22 各種程序錯誤 22 陷阱:錯誤地假定程序正確 23 小結 24 自測題答案 25 編程練習 26 編程項目 27 第2章C++基礎知識 29 2.1變量和賦值 30 變量 30 名稱:標識符 32 變量聲明 33 賦值語句 34 陷阱:未初始化的變量 35 編程提示:使用有意義的名稱 36 2.2輸入和輸出 37 使用cout進行輸出 37 include預編譯指令和命名空間 38 轉義序列 39 編程提示:用\n或endl終止 每一個程序 40 格式化帶小數點的數字 41 用cin進行輸入 42 設計輸入和輸出 43 編程提示:I/O中的換行 43 2.3數據類型和表達式 44 int類型和double類型 44 其他數值類型 45 C++11類型 46 char類型 47 bool類型 48 string類簡介 48 類型的兼容性 49 算術操作符和表達式 50 陷阱:除法中的整數 52 更多賦值語句 53 2.4簡單控制流程 54 一個簡單的分支機制 54 陷阱:連續的不等式 58 陷阱:該用==的時候用了= 58 復合語句 59 簡單的循環機制 61 遞增操作符和遞減操作符 63 編程實例:信用卡余額 64 陷阱:無限循環 65 2.5程序風格 67 縮進 67 注釋 67 為常量命名 69 小結 71 自測題答案 72 編程練習 75 編程項目 76 第3章更多的控制流程 81 3.1使用布爾表達式 82 布爾表達式求值 82 陷阱:將布爾表達式轉換成int值 85 枚舉類型(選讀) 87 3.2多路分支 87 嵌套語句 88 編程提示:在嵌套語句中使用 花括號 88 多路if-else語句 90 編程實例:州收入稅 91 switch語句 94 陷阱:忘記在switch語句中添加 break 96 為菜單使用switch語句 97 代碼塊 98 陷阱:疏忽局部變量 100 3.3C++循環語句詳解 101 while語句回顧 101 再論遞增操作符和遞減操作符 102 for語句 104 陷阱:for語句中多余的分號 108 應該使用哪種循環 108 陷阱:未初始化的變量和 無限循環 110 break語句 110 陷阱:嵌套循環中的break語句 111 3.4設計循環 111 求和與求乘積的循環 112 終止循環 113 嵌套循環 115 調試循環 116 小結 119 自測題答案 120 編程練習 123 編程項目 124 第4章過程抽象和返回值的函數 129 4.1自頂向下設計 130 4.2預定義函數 130 使用預定義函數 131 隨機數生成 134 強制類型轉換 135 強制類型轉換的古老形式 137 陷阱:整數除法丟棄了小數部分 137 4.3程序員自定義函數 138 函數定義 138 返回布爾值的函數 142 另一種形式的函數聲明 142 陷阱:實參順序錯誤 143 函數定義語法小結 144 再論函數定義的位置 144 編程提示:在分支語句中使用 函數調用 145 4.4過程抽象 146 黑盒的比喻 146 編程提示:選擇形參名稱 147 編程提示:嵌套循環 148 案例分析:購買比薩 150 編程提示:使用偽代碼 154 4.5作用域和局部變量 155 函數如同小程序 155 編程實例:豌豆試驗田 157 全局常量和全局變量 157 傳值形參是局部變量 158 塊作用域 160 再論命名空間 161 編程實例:階乘函數 163 4.6重載函數名稱 164 重載入門 164 編程實例:購買比薩(修訂版) 166 自動類型轉換 168 小結 170 自測題答案 171 編程練習 173 編程項目 174 第5章用函數完成所有子任務 177 5.1void函數 178 void函數的定義 178 編程實例溫度換算 180 void函數中的return語句 181 5.2傳引用參數 182 初探傳引用調用 182 傳引用調用詳解 184 編程實例:swapValues函數 187 混合的參數列表 188 編程提示:應該使用哪種參數 189 陷阱:疏忽造成的局部變量 190 5.3使用過程抽象 192 在函數中調用其他函數 192 前條件和后條件 193 案例分析:超市定價系統 194 5.4測試和調試函數 198 存根和驅動程序 198 5.5常規調試技術 201 不抱成見 201 檢查常見錯誤 202 定位錯誤 202 assert宏 203 小結 205 自測題答案 206 編程練習 208 編程項目 209 第6章I/O流——對象和類入門 213 6.1流和基本文件I/O 214 為什么要用文件來I/O 215 文件I/O 215 類與對象入門 218 編程提示:檢查文件是否成功 打開 219 文件I/O技術 222 追加到文件(選讀) 223 文件名作為輸入(選讀) 225 6.2流I/O工具 227 用流函數格式化輸出 227 操縱元 230 流作為函數實參 232 編程提示:檢查文件尾 233 命名空間的問題 234 編程實例:整理文件格式 235 6.3字符I/O 236 get和put成員函數 236 putback成員函數(選讀) 239 編程實例:檢查輸入 239 陷阱:輸入中不期而遇的\n 241 編程實例:另一個newLine函數 242 函數的默認實參(選讀) 243 eof成員函數 246 編程實例:編輯文本文件 247 預定義字符函數 249 陷阱:toupper和tolower返回值 250 小結 252 自測題答案 253 編程練習 257 編程項目 258 第7章數組 263 7.1數組入門 264 聲明和引用數組 264 編程提示:為數組使用for循環 266 陷阱:數組索引總是從零開始 266 編程提示:為數組長度使用已定義 常量 266 數組在內存中的表示 267 陷阱:數組索引越界 268 初始化數組 269 編程提示:C++11基于范圍的 for語句 270 7.2函數中的數組 272 索引變量作為函數參數 272 整個數組作為函數參數 274 const參數修飾符 276 陷阱:const參數修飾符的使用 不一致 277 返回數組的函數 278 案例分析:產量圖 278 7.3數組編程 287 部分填充數組 287 編程提示:不要吝嗇形參 289 編程實例:搜索數組 290 編程實例:數組排序 291 編程實例:冒泡排序 294 7.4多維數組 297 多維數組基礎 297 多維數組參數 298 編程實例:二維打分程序 299 陷阱:在數組索引之間使用逗號 302 小結 303 自測題答案 304 編程練習 306 編程項目 307 第8章字符串和向量 315 8.1字符串的數組類型 316 C字符串值和C字符串變量 317 陷阱:為C字符串使用=和== 319 <cstring>中的其他函數 321 陷阱:使用strcpy復制C字符串 越界 322 C字符串輸入和輸出 324 C字符串到數值的轉換和 可靠輸入 326 8.2標準string類 330 標準類string簡介 330 string類的I/O 332 編程提示:getline的其他版本 334 陷阱:混合使用cin>>變量;和 getline 335 用string類進行字符串處理 336 編程實例:回文測試 338 string對象和C字符串之間的轉換 341 字符串和數字之間的轉換 342 8.3向量 342 向量基礎知識 342 陷阱:使用方括號時超出向量 長度 345 編程提示:向量賦值具有良好 行為 345 效率問題 345 小結 347 自測題答案 348 編程練習 349 編程項目 350 第9章指針和動態數組 355 9.1指針 356 指針變量 357 基本內存管理 362 陷阱:虛懸指針 362 靜態變量和自動變量 362 編程提示:定義指針類型 363 9.2動態數組 364 數組變量和指針變量 365 創建和使用動態數組 366 指針運算(選讀) 370 多維動態數組(選讀) 371 小結 373 自測題答案 374 編程練習 374 編程項目 375 第10章定義類 379 10.1結構 380 用于異種數據的結構 380 陷阱:結構定義中忘記添加分號 383 結構作為函數參數 384 編程提示:使用層次化結構 384 對結構進行初始化 386 10.2類 388 定義類和成員函數 388 公共成員和私有成員 391 編程提示:將所有成員變量 設為私有 396 編程提示:定義取值函數和 賦值函數 397 編程提示:將賦值操作符用于 對象 398 編程實例:BankAccount類 (版本1) 398 總結類的一些特征 402 用于初始化的構造函數 403 編程提示:總是包括默認構造 函數 408 陷阱:無參構造函數 409 C++11的成員初始化器和構造 函數委托 410 10.3抽象數據類型 411 用于生成抽象數據類型的類 412 編程實例:類的另一種實現 414 10.4繼承 418 派生類 418 定義派生類 419 小結 423 自測題答案 424 編程練習 428 編程項目 428 第11章類中的友元函數、 重載操作符和數組 433 11.1友元函數 434 編程實例:一個相等性函數 434 友元函數 436 編程提示:定義取值函數和 友元函數 438 編程提示:同時使用成員函數和 非成員函數 439 編程實例:Money類(版本1) 439 實現digitToInt(選讀) 443 陷阱:數字常量中的前置零 444 const參數修飾符 445 陷阱:修飾符const的用法不一致 447 11.2重載操作符 449 重載操作符 449 用于自動類型轉換的構造函數 452 重載一元操作符 453 重載>>和<< 454 11.3數組和類 460 類數組 460 數組作為類成員 463 編程實例:用于部分填充 數組的類 463 11.4類和動態數組 465 編程實例:字符串變量類 466 析構函數 468 陷阱:指針作為傳值參數 469 拷貝構造函數 471 重載賦值操作符 474 小結 477 自測題答案 478 編程練習 484 編程項目 484 第12章獨立編譯和命名空間 491 12.1獨立編譯 492 ADT回顧 492 案例分析:獨立編譯的 DigitalTime類 493 使用#ifndef 500 編程提示:定義其他庫 502 12.2命名空間 503 命名空間和using預編譯指令 503 創建命名空間 504 限定名稱 506 命名空間的微妙之處(選讀) 507 無名命名空間 508 陷阱:混淆全局命名空間和 無名命名空間 512 小結 513 自測題答案 514 編程練習 515 編程項目 516 第13章指針和鏈表 517 13.1節點和鏈表 518 節點 519 nullptr 521 鏈表 522 在表頭插入節點 523 陷阱:丟失節點 525 搜索鏈表 526 指針作為迭代器 528 在列表中插入和刪除節點 528 陷阱:為動態數據結構使用賦值 操作符 531 鏈表的變體 531 類構成的鏈表 533 13.2棧和隊列 536 棧 536 編程實例:棧類 536 隊列 539 編程實例:隊列類 540 小結 544 自測題答案 545 編程練習 546 編程項目 547 第14章遞歸 553 14.1面向任務的遞歸函數 554 案例分析:垂直數字 555 深入遞歸 559 陷阱:無窮遞歸 560 用于遞歸的棧 562 陷阱:棧溢出 563 遞歸與迭代 563 14.2面向值的遞歸函數 564 要返回值的遞歸函數的常規形式 564 編程實例:另一個求乘方函數 564 14.3遞歸思想 567 遞歸設計技術 567 案例分析:二叉搜索 (遞歸思想示例) 569 編程實例:遞歸成員函數 574 小結 577 自測題答案 578 編程練習 581 編程項目 581 第15章繼承 585 15.1繼承基礎 586 派生類 588 派生類中的構造函數 593 陷阱:使用來自基類的私有 成員變量 595 陷阱:私有成員函數不會繼承 596 protected限定符 596 重定義成員函數 598 重定義與重載的比較 600 訪問重定義的基函數 601 15.2繼承細節 602 不繼承的函數 602 派生類中的賦值操作符和 拷貝構造函數 602 派生類中的析構函數 603 15.3多態性 604 晚期綁定 604 C++虛函數 605 虛函數和擴展類型兼容性 609 陷阱:不使用虛成員函數 612 陷阱:試圖對虛成員函數定義 不齊全的類進行編譯 612 編程提示:使析構函數成為 虛函數 613 小結 615 自測題答案 616 編程練習 619 編程項目 620 第16章異常處理 627 16.1異常處理基礎 628 異常處理的簡單例子 629 定義自己的異常類 635 多個throw塊和catch塊 636 陷阱:首先捕捉較具體的異常 638 編程提示:異常類可能很簡單 638 在函數中拋出異常 639 異常規范 640 陷阱:派生類中的異常規范 641 16.2用于異常處理的編程技術 642 拋出異常的時機 642 陷阱:未捕捉的異常 643 陷阱:嵌套try-catch塊 643 陷阱:濫用異常 644 異常類層次結構 644 測試可用內存 644 重新拋出異常 645 小結 646 自測題答案 647 編程練習 647 編程項目 649 第17章模板 651 17.1用于算法抽象的模板 652 函數模板 653 陷阱:編譯器的復雜性 656 編程實例:泛型排序函數 657 編程提示:如何定義模板 660 陷阱:為不恰當的類型使用模板 660 17.2用于數據抽象的模板 660 類模板的語法 660 編程實例:數組類 663 小結 668 自測題答案 669 編程練習 671 編程項目 671 第18章標準模板庫 675 18.1迭代器 676 using聲明 677 迭代器基礎 677 編程提示:使用auto簡化變量 聲明 681 陷阱:編譯器問題 681 迭代器的種類 682 常量和可變迭代器 684 逆向迭代器 685 其他種類的迭代器 687 18.2容器 687 順序容器 687 陷阱:迭代器和刪除元素 690 編程提示:容器中的類型定義 691 容器配接器stack和queue 691 關聯容器set和map 693 編程提示:為容器使用初始化、 基于范圍的for和auto 698 效率問題 699 18.3泛型算法 699 運行時間和大O表示法 700 容器訪問運行時間 703 不修改容器的算法 703 會修改容器的算法 706 set算法 707 排序算法 708 18.4不斷進化的C++ 708 std::array 709 正則表達式 710 線程 713 智能指針 717 小結 722 自測題答案 723 編程練習 724 編程項目 724 附錄AC++關鍵字 729 附錄B操作符的優先級 730 附錄CASCII字符集 731 附錄D部分庫函數 732 附錄E內聯函數 736 附錄F重載數組索引方括號 737 附錄Gthis指針 738 附錄H將操作符重載為成員操作符 740
|
序: |