C++面向對象程式設計(第7版)

C++面向對象程式設計(第7版)

《C++面向對象程式設計(第7版)》是2010年清華大學出版社出版的圖書,作者是薩維奇。

基本介紹

  • 書名:C++面向對象程式設計(第7版)
  • 作者:[美] 薩維奇
  • 譯者:周靖 
  • ISBN:9787302215301
  • 頁數:715
  • 定價:79.00
  • 出版社:清華大學出版社
  • 出版時間:2010-1-1
  • 裝幀:平裝
  • 開本:16開
編輯推薦,內容簡介,作者簡介,目錄,

編輯推薦

《C++面向對象程式設計(第7版)》歷史悠久,在國內外已具有相當高的知名度,是深受師生好評的C++入門經典教材,在國內有近50多所高校採用,更有大量讀者用作自學教材,倍受讀者青睞和期待
《C++面向對象程式設計(第7版)》第4版,讀者好評,請查看
《C++面向對象程式設計(第7版)》第5版,讀者好評,請查看
《C++面向對象程式設計(第7版)》第6版,讀者好評,請查看,本版被評為“中國大學出版社圖書獎首屆優秀教材獎”
源遠流長,長銷十餘年的入門經典

內容簡介

本書是最優秀的C++入門教材,深受師生歡迎。作者結合自己多年的教學經驗,根據教學大綱精心設計並編寫了書中內容。與此同時,還採用了很多便於讀者鞏固所學知識的教學特徵,比如各章開始處的小節總覽,書中隨處可見的總結框、編程提示和編程陷阱,各章結尾處的小結、習題和編程項目等。這些非常適合初學者掌握重要的編程概念。
全書共18章,6個附錄。在講解C++基礎知識之後,直接引導學生深入函式、I/O流、類、控制流程、命名空間、數組、字元串、指針和動態數組、遞歸、模板、指針和鍊表、派生類、異常以及標準模板庫。
Walter Savitch教授的C++入門經典教材
結構嚴謹、清晰,行文詼諧幽默,妙趣橫生
80+技巧提示,30+生動有趣的編程實例
60+精彩視頻,410+自測題,220+編程項目

作者簡介

薩維奇(Walter Savitch),加州大學聖迭戈分校退休教授。1960年在加州大學伯克利分校獲得博士學位,曾擔任加州大學聖迭戈分校計算機科學系教授和認知科學跨學科博士項目主任。他在複雜性理論和並行計算模型方面做出了重要貢獻,研究領域包括形式語言理論和計算語言學等。除本書外,他還著有一系列編程類教材,深受師生好評,被譽為讀者最多的編程入門教材。
譯者簡介:
周靖,資深譯者,涉獵廣泛,具有深厚的技術功底和良好的文學素養。早期痴迷於硬體,《微型計算機》雜誌特約作者。繼而潛心鑽研程式設計,並在這方面積累了豐富的經驗。此後專職從事技術圖書的翻譯。其翻譯風格嚴謹、準確、樸實、流暢,深受讀者好評。代表譯著有《C++面向對象程式設計》《Windows核心編程(第5版)》、《Visual C# 2008從入門到精通》、《C# 3.0本質論》等。

目錄

第1章 計算機和C++編程入門 1
概述 2
1.1 計算機系統 2
1.1.1 硬體 2
1.1.2 軟體 5
1.1.3 高級語言 6
1.1.4 編譯器 7
1.1.5 歷史回顧 9
1.2 編程和問題求解 10
1.2.1 算法 10
1.2.2 程式設計 11
1.2.3 面向對象編程 12
1.2.4 軟體的生命周期 13
1.3 C++入門 14
1.3.1 C++語言的起源 14
1.3.2 一個C++示範程式 15
1.3.3 陷阱:在\n中錯誤地使用斜槓 17
1.3.4 編程提示:輸入和輸出語法 17
1.3.5 簡單C++程式的布局 18
1.3.6 陷阱:在include的檔案名稱前錯誤地添加一個空格 19
1.3.7 編譯和運行C++程式 20
1.3.8 編程提示:讓程式運行起來 20
1.4 測試和調試 23
1.4.1 程式錯誤的分類 23
1.4.2 陷阱:錯誤地假定程式正確 24
小結 25
自測題答案 25
編程項目 26
第2章 C++基礎知識 29
概述 30
預備知識 30
2.1 變數和賦值 30
2.1.1 變數 30
2.1.2 名稱:標識符 32
2.1.3 變數聲明 33
2.1.4 賦值語句 34
2.1.5 陷阱:未初始化的變數 35
2.1.6 編程提示:使用有意義的名稱 36
2.2 輸入和輸出 37
2.2.1 使用cout進行輸出 37
2.2.2 include預編譯指令和命名空間 38
2.2.3 轉義序列 39
2.2.4 編程提示:用\n或endl終止每一個程式 40
2.2.5 格式化帶小數點的數字 41
2.2.6 用cin進行輸入 42
2.2.7 設計輸入和輸出 43
2.2.8 編程提示:I/O中的換行 43
2.3 數據類型和表達式 45
2.3.1 int類型和double類型 45
2.3.2 其他數字類型 46
2.3.3 char類型 47
2.3.4 bool類型 48
2.3.5 string類簡介 48
2.3.6 類型的兼容性 50
2.3.7 算術操作符和表達式 51
2.3.8 陷阱:除法中的整數 53
2.3.9 更多賦值語句 54
2.4 簡單控制流程 55
2.4.1 一個簡單的分支機制 55
2.4.2 陷阱:連續的不等式 59
2.4.3 陷阱:在該用==的時候錯用了= 59
2.4.4 複合語句 60
2.4.5 簡單的循環機制 62
2.4.6 遞增操作符和遞減操作符 65
2.4.7 編程實例:信用卡餘額 65
2.4.8 陷阱:無限循環 66
2.5 程式風格 69
2.5.1 縮進 69
2.5.2 注釋 69
2.5.3 為常量命名 71
小結 73
自測題答案 73
編程項目 76
第3章 更多的控制流程 81
概述 82
預備知識 82
3.1 使用布爾表達式 82
3.1.1 布爾表達式求值 82
3.1.2 陷阱:將布爾表達式轉換成int值 85
3.1.3 枚舉類型(選讀) 87
3.2 多路分支 88
3.2.1 嵌套語句 88
3.2.2 編程提示:在嵌套語句中使用花括弧 88
3.2.3 多路if-else語句 90
3.2.4 編程實例:州收入稅 92
3.2.5 switch語句 94
3.2.6 陷阱:忘記在switch語句中添加break 97
3.2.7 為選單使用switch語句 97
3.2.8 語句塊 98
3.2.9 陷阱:疏忽局部變數 100
3.3 C++循環語句詳解 102
3.3.1 while語句回顧 102
3.3.2 再論遞增操作符和遞減操作符 103
3.3.3 for語句 105
3.3.4 陷阱:for語句中多餘的分號 109
3.3.5 應該使用哪種循環 109
3.3.6 陷阱:未初始化的變數和無限循環 111
3.3.7 break語句 111
3.3.8 陷阱:嵌套循環中的break語句 112
3.4 設計循環 113
3.4.1 求和與求乘積的循環 113
3.4.2 終止循環 114
3.4.3 嵌套循環 116
3.4.4 調試循環 118
小結 121
自測題答案 121
編程項目 125
第4章 過程抽象和返回一個值的函式 129
概述 130
預備知識 130
4.1 自頂向下設計 130
4.2 預定義函式 130
4.2.1 使用預定義函式 131
4.2.2 強制類型轉換 134
4.2.3 強制類型轉換的古老形式 136
4.2.4 陷阱:整數除法丟棄了小數部分 136
4.3 程式設計師自定義函式 138
4.3.1 函式定義 138
4.3.2 能返回布爾值的函式 142
4.3.3 另一種形式的函式聲明 142
4.3.4 陷阱:實參順序錯誤 143
4.3.5 函式定義語法總結 144
4.3.6 再論函式定義的位置 144
4.3.7 編程提示:在分支語句中使用函式調用 145
4.4 過程抽象 146
4.4.1 黑盒的比喻 146
4.4.2 編程提示:選擇形參名稱 147
4.4.3 編程提示:嵌套循環 148
4.4.4 案例分析:購買比薩 150
4.4.5 編程提示:使用偽代碼 155
4.5 局部變數 156
4.5.1 函式如同小程式 156
4.5.2 編程實例:豌豆試驗田 158
4.5.3 全局常量和全局變數 158
4.5.4 傳值調用形參是局部變數 160
4.5.5 再論命名空間 161
4.5.6 編程實例:階乘函式 163
4.6 重載函式名稱 165
4.6.1 重載入門 165
4.6.2 編程實例;購買比薩(修訂版) 167
4.6.3 自動類型轉換 169
小結 171
自測題答案 171
編程項目 174
第5章 所有子任務的函式 177
概述 178
預備知識 178
5.1 void函式 178
5.1.1 void函式的定義 178
5.1.2 編程實例:溫度換算 180
5.1.3 void函式中的return語句 181
5.2 傳引用調用形參 183
5.2.1 初探傳引用調用 183
5.2.2 傳引用調用詳解 185
5.2.3 編程實例:swap_values函式 187
5.2.4 混合的參數列表 188
5.2.5 編程提示:應該使用哪種參數 189
5.2.6 陷阱:疏忽造成的局部變數 190
5.3 使用過程抽象 192
5.3.1 由函式來調用函式 192
5.3.2 前條件和後條件 193
5.3.3 案例分析:超市定價系統 194
5.4 測試和調試函式 199
5.5 常規調試技術 203
5.5.1 不抱成見 203
5.5.2 檢查常見錯誤 203
5.5.3 定位錯誤 203
5.5.4 assert宏 204
小結 206
自測題答案 206
編程項目 209
第6章 I/O流——對象和類入門 213
概述 214
預備知識 214
6.1 流和基本檔案I/O 214
6.1.1 檔案之於I/O的重要性 215
6.1.2 檔案I/O 215
6.1.3 類與對象入門 218
6.1.4 編程提示:檢查檔案是否成功打開 220
6.1.5 檔案I/O技術 222
6.1.6 追加到檔案(選讀) 224
6.1.7 檔案名稱作為輸入(選讀) 225
6.2 流I/O工具 228
6.2.1 用流函式格式化輸出 228
6.2.2 操縱元 231
6.2.3 流作為函式實參 233
6.2.4 編程提示:檢查檔案尾 234
6.2.5 命名空間的問題 235
6.2.6 編程實例:整理檔案格式 236
6.3 字元I/O 238
6.3.1 get和put成員函式 238
6.3.2 putback成員函式(選讀) 241
6.3.3 編程實例:檢查輸入 241
6.3.4 陷阱:輸入中不期而遇的\n 243
6.3.5 eof成員函式 245
6.3.6 編程實例:編輯文本檔案 247
6.3.7 預定義的字元函式 248
6.3.8 陷阱:toupper和tolower返回值 249
小結 251
自測題答案 251
編程項目 255
第7章 數組 261
概述 262
預備知識 262
7.1 數組入門 262
7.1.1 聲明和引用數組 262
7.1.2 編程提示:為數組使用for循環 264
7.1.3 陷阱:數組索引總是從零開始 264
7.1.4 編程提示:為數組長度使用一個已定義常量 264
7.1.5 數組在記憶體中的表示 265
7.1.6 陷阱:數組索引越界 266
7.1.7 初始化數組 267
7.2 函式中的數組 269
7.2.1 索引變數作為函式參數 269
7.2.2 整個數組作為函式參數 270
7.2.3 const參數修飾符 273
7.2.4 陷阱:不一致地使用const參數 274
7.2.5 返回數組的函式 275
7.2.6 案例分析:產量圖 275
7.3 數組編程 285
7.3.1 部分填充數組 285
7.3.2 編程提示:不要吝嗇形參 287
7.3.3 編程實例:數組搜尋 287
7.3.4 編程實例:數組排序 289
7.4 多維數組 293
7.4.1 多維數組基礎 293
7.4.2 多維數組參數 294
7.4.3 編程實例:二維打分程式 295
7.4.4 陷阱:在數組索引之間使用逗號 297
小結 299
自測題答案 299
編程項目 302
第8章 字元串和向量 309
概述 310
預備知識 310
8.1 字元串的一種數組類型 310
8.1.1 C字元串值和C字元串變數 311
8.1.2 陷阱:為C字元串使用=和== 313
8.1.3 (cstring)中的其他函式 315
8.1.4 C字元串輸入和輸出 318
8.1.5 C字元串到數字的轉換和可靠輸入 320
8.2 標準string類 324
8.2.1 標準類string簡介 324
8.2.2 string類的I/O 326
8.2.3 編程提示:getline的其他版本 328
8.2.4 陷阱:混合使用“cin ))變數;”和getline 329
8.2.5 用string類進行字元串處理 330
8.2.6 編程實例:回文測試 333
8.2.7 string對象和C字元串之間的轉換 335
8.3 向量 337
8.3.1 向量基礎知識 337
8.3.2 陷阱:使用方括弧時超出向量長度 339
8.3.3 編程提示:向量賦值具有良好行為 340
8.3.4 效率問題 340
小結 342
自測題答案 342
編程項目 344
第9章 指針和動態數組 349
概述 350
預備知識 350
9.1 指針 350
9.1.1 指針變數 351
9.1.2 基本記憶體管理 356
9.1.3 陷阱:虛懸指針 356
9.1.4 靜態變數和自動變數 356
9.1.5 編程提示:定義指針類型 357
9.2 動態數組 359
9.2.1 數組變數和指針變數 359
9.2.2 創建和使用動態數組 360
9.2.3 指針運算(選讀) 363
9.2.4 多維動態數組(選讀) 364
小結 367
自測題答案 367
編程項目 368
第10章 定義類 371
概述 372
預備知識 372
10.1 結構 372
10.1.1 用於異種數據的結構 372
10.1.2 陷阱:結構定義中忘記添加分號 376
10.1.3 結構作為函式參數 376
10.1.4 編程提示:使用層次化結構 377
10.1.5 對結構進行初始化 378
10.2 類 381
10.2.1 定義類和成員函式 381
10.2.2 公共成員和私有成員 384
10.2.3 編程提示:將所有成員變數變成私有 389
10.2.4 編程提示:定義取值函式和賦值函式 390
10.2.5 編程提示:將賦值操作符用於對象 391
10.2.6 編程實例:BankAccount類(版本1) 391
10.2.7 總結類的一些特徵 395
10.2.8 用於初始化的構造函式 396
10.2.9 編程提示:總是包括一個默認構造函式 401
10.2.10 陷阱:無參數構造函式 402
10.3 抽象數據類型 404
10.3.1 用於生成抽象數據類型的類 404
10.3.2 編程實例:類的另一種實現 407
10.4 繼承 411
10.4.1 流類之間的繼承關係 411
10.4.2 編程實例:另一個new_line函式 414
10.4.3 函式的默認參數(選讀) 414
10.4.4 定義派生類 415
小結 419
自測題答案 419
編程項目 424
第11章 類中的友元函式、重載操作符和數組 429
概述 430
預備知識 430
11.1 友元函式 430
11.1.1 編程實例:一個相等性函式 430
11.1.2 友元函式 432
11.1.3 編程提示:定義取值函式和友元函式 434
11.1.4 編程提示:同時使用成員函式和非成員函式 434
11.1.5 編程實例:Money類(版本1) 435
11.1.6 實現digit_to_int(選讀) 440
11.1.7 陷阱:數字常量中的前置零 440
11.1.8 const參數修飾符 441
11.1.9 陷阱:不一致地使用const 443
11.2 重載操作符 446
11.2.1 重載操作符 446
11.2.2 用於自動類型轉換的構造函式 449
11.2.3 重載一元操作符 450
11.2.4 重載))和(( 451
11.3 數組和類 458
11.3.1 類數組 458
11.3.2 數組作為類成員 460
11.3.3 編程實例:用於部分填充數組的一個類 461
11.4 類和動態數組 464
11.4.1 編程實例:一個字元串變數類 464
11.4.2 析構函式 466
11.4.3 陷阱:指針作為傳值調用參數 468
11.4.4 拷貝構造函式 469
11.4.5 重載賦值操作符 473
小結 476
自測題答案 476
編程項目 482
第12章 獨立編譯和命名空間 489
概述 490
預備知識 490
12.1 獨立編譯 490
12.1.1 ADT回顧 490
12.1.2 案例分析:一個獨立編譯的類DigitalTime 491
12.1.3 使用#ifndef 498
12.1.4 編程提示:定義其他庫 500
12.2 命名空間 502
12.2.1 命名空間和using預編譯指令 502
12.2.2 創建命名空間 503
12.2.3 限定名稱 505
12.2.4 命名空間的微妙之處(選讀) 506
12.2.5 無名命名空間 507
12.2.6 編程提示:為命名空間選擇一個名稱 510
12.2.7 陷阱:混淆全局命名空間和無名命名空間 511
小結 513
自測題答案 513
編程項目 514
第13章 指針和鍊表 517
概述 518
預備知識 518
13.1 節點和鍊表 518
13.1.1 節點 518
13.1.2 鍊表 522
13.1.3 在表頭插入一個節點 523
13.1.4 陷阱:丟失節點 525
13.1.5 搜尋鍊表 526
13.1.6 指針作為疊代器 528
13.1.7 在列表中插入和移除節點 529
13.1.8 陷阱:為動態數據結構
使用賦值操作符 531
13.1.9 鍊表的變體 532
13.1.10 由類構成的鍊表 534
13.2 棧和佇列 537
13.2.1 棧 537
13.2.2 編程實例:一個棧類 537
13.2.3 佇列 541
13.2.4 編程實例:一個佇列類 541
小結 545
自測題答案 545
編程項目 547
第14章 遞歸 551
概述 552
預備知識 552
14.1 面向任務的遞歸函式 553
14.1.1 案例分析:垂直數字 553
14.1.2 深入遞歸 558
14.1.3 陷阱:無窮遞歸 559
14.1.4 用於遞歸的棧 560
14.1.5 陷阱:棧溢出 561
14.1.6 遞歸與疊代 561
14.2 面向值的遞歸函式 563
14.2.1 要返回值的遞歸函式的常規形式 563
14.2.2 編程實例:另一個Powers函式 563
14.3 遞歸思想 567
14.3.1 遞歸設計技術 567
14.3.2 案例分析:二叉搜尋(遞歸思想示例) 568
14.3.3 編程實例:一個遞歸成員函式 574
小結 577
自測題答案 577
編程項目 580
第15章 繼承 583
概述 584
預備知識 584
15.1 繼承基礎 584
15.1.1 派生類 585
15.1.2 派生類中的構造函式 590
15.1.3 陷阱:使用來自基類的私有成員變數 592
15.1.4 陷阱:私有成員函式根本不會繼承 593
15.1.5 protected限定符 593
15.1.6 重定義成員函式 595
15.1.7 重定義與重載的比較 597
15.1.8 訪問重定義的基函式 598
15.2 繼承細節 600
15.2.1 不繼承的函式 600
15.2.2 派生類中的賦值操作符和拷貝構造函式 600
15.2.3 派生類中的析構函式 601
15.3 多態性 603
15.3.1 晚期綁定 603
15.3.2 C++中的虛函式 604
15.3.3 虛函式和擴展類型兼容性 607
15.3.4 陷阱:切片問題 610
15.3.5 陷阱:不使用虛成員函式 610
15.3.6 陷阱:試圖對虛成員函式
定義不齊全的類進行編譯 611
15.3.7 編程提示:虛析構函式 611
小結 613
自測題答案 613
編程項目 616
第16章 異常處理 621
概述 622
預備知識 622
16.1 異常處理基礎 623
16.1.1 異常處理的一個玩具式
例子 623
16.1.2 定義自己的異常類 629
16.1.3 多個throw和catch 630
16.1.4 陷阱:首先捕捉較具體的異常 632
16.1.5 編程提示:異常類可能微不足道 633
16.1.6 在函式中拋出異常 633
16.1.7 異常規範 634
16.1.8 陷阱:派生類中的異常規範 636
16.2 用於異常處理的編程技術 637
16.2.1 拋出異常的時機 637
16.2.2 陷阱:未捕捉的異常 638
16.2.3 陷阱:嵌套的try-catch塊 638
16.2.4 陷阱:濫用異常 638
16.2.5 異常類層次結構 638
16.2.6 測試可用記憶體 639
16.2.7 重新拋出異常 639
小結 640
自測題答案 640
編程項目 641
第17章 模板 643
概述 644
預備知識 644
17.1 用於算法抽象的模板 644
17.1.1 函式模板 645
17.1.2 陷阱:編譯器的複雜性 648
17.1.3 編程實例:一個泛化的排序函式 649
17.1.4 編程提示:如何定義模板 652
17.1.5 陷阱:為不恰當的類型使用模板 652
17.2 用於數據抽象的模板 653
17.2.1 類模板的語法 653
17.2.2 編程實例:一個數組類 655
小結 659
自測題答案 659
編程項目 661
第18章 標準模板庫 663
概述 664
預備知識 664
18.1 疊代器 664
18.1.1 using聲明 665
18.1.2 疊代器的基礎知識 665
18.1.3 陷阱:編譯器問題 669
18.1.4 疊代器的種類 670
18.1.5 常量和可變疊代器 672
18.1.6 逆向疊代器 673
18.1.7 其他種類的疊代器 675
18.2 容器 676
18.2.1 順序容器 676
18.2.2 陷阱:疊代器和移除元素 679
18.2.3 編程提示:容器中的類型定義 679
18.2.4 容器配接器stack和queue 679
18.2.5 關聯容器set和map 682
18.2.6 效率問題 686
18.3 泛型算法 688
18.3.1 運行時間和大O表示法 688
18.3.2 容器訪問運行時間 691
18.3.3 不可修改的序列算法 692
18.3.4 容器修改算法 695
18.3.5 set算法 696
18.3.6 排序算法 697
小結 698
自測題答案 698
編程項目 699
附錄1 C++關鍵字 703
附錄2 操作符的優先權 704
附錄3 ASCII字元集 705
附錄4 部分庫函式 706
附錄5 內聯函式 710
附錄6 重載數據索引方括弧 711
附錄7 this指針 712
附錄8 將操作符重載為成員操作符 714

相關詞條

熱門詞條

聯絡我們