完美C++(第5版)(雙色)
完美C++(第5版)(雙色)
薛正華 沈庚 韋遠科 譯
ISBN 978-7-121-23198-8
2014年6月出版
定價:148.00元
788頁
16開
內容提要
《完美C++(第5版)》為讀者提供了一個學習、理解和掌握 C++程式語言的全面檢視,覆蓋面廣、實用性強。書中介紹了 C++的基本資料型別,如字串、陣列、指標、結構體、類等,同時也詳細描述了物件導向程式語言的特性:封裝、繼承和多型,以及這些特性在 C++語言中的具體使用方式。本書的後面章節還重點介紹了模板、鏈式資料結構、標準模板庫以及異常處理等C++語言的進階程式設計知識。這些知識在從事具體程式設計工作時會經常使用到。
《完美C++(第5版)》對C++的一些重點知識,輔以例項進行了重點講解,特別是對一些易混淆、易犯錯的知識點,專門以“陷阱”的組織方式進行深入分析和討論,幫助讀者更好地理解和掌握。《完美C++(第5版)》中各章均含有大量例子及完整的程式碼段和分析,幫助讀者強化對關鍵概念的理解,以及對主題的掌握。各章還配有豐富的自測習題以及答案,幫助讀者進一步提升對C++知識的理解以及實際動手程式設計能力。
原書由知名學者所著,歷經多個版本,根據C++技術的發展,內容不斷完善、豐富,體系完整、實踐性強。
《完美C++(第5版)》可以作為高等院校學習程式設計基本知識以及C++程式語言課程的教材,也可以作為有C++程式設計經驗者的參考書。
目錄
第1章 C++ 基礎 1
1.1 C++簡介 2
C++語言的起源 2
C++與物件導向程式設計 3
C++的特點 3
C++術語 3
C++程式示例 3
1.2 變數、表示式及賦值語句 5
識別符號 5
變數 6
賦值語句 8
string類簡介 9
陷阱:未初始化變數 9
提示:採用有意義的變數名 10
更多賦值語句 11
賦值相容性 11
字面值 12
轉義序列 14
命名常量 14
算數運算子和表示式 16
整數和浮點數除法 17
陷阱:全整數除法 17
型別轉換 18
自增和自減運算子 20
陷阱:求值順序 21
1.3 控制檯輸入/輸出 22
使用cout輸出 22
換行符 23
提示:以\n或endl結束程式 24
格式化浮點數 24
用cerr輸出 25
用cin輸入 25
提示:輸入/輸出中的換行 28
1.4 程式設計風格 28
註釋 28
1.5 庫與名稱空間 29
庫與include命令 29
名稱空間 29
陷阱:庫名的問題 30
第2章 流程控制 37
2.1 布林表示式 38
建立布林表示式 38
陷阱:不等式連寫 39
布林表示式求值 40
優先順序規則 41
陷阱:整數值用作布林值 44
2.2 分支機制 45
if-else語句 45
複合語句 47
陷阱:用=代替== 47
省略else 49
巢狀語句 49
多分支if-else語句 49
switch語句 50
陷阱:遺漏switch語句中的break 52
提示:在選單中使用switch語句 52
列舉型別 53
條件運算子 53
2.3 迴圈 54
while和do-while迴圈 54
再談自增和自減運算子 57
逗號運算子 58
for語句 59
提示:重複N次的迴圈 61
陷阱:for語句中額外的分號 62
陷阱:無限迴圈 62
break與continue語句 65
巢狀迴圈 67
2.4 檔案輸入簡介 67
透過ifstream讀取文字檔案內容 68
第3章 函式基礎 81
3.1 預定義函式 82
帶有返回值的預定義函式 82
預定義的void函式 86
隨機數生成器 88
3.2 自定義函式 91
定義帶有返回值的函式 91
函式宣告的另一種形式 93
陷阱:引數順序的錯誤 93
呼叫函式的函式 94
示例:一個四捨五入的函式 94
返回布林值的函式 96
定義void函式 96
void函式中的return語句 98
前提條件和執行結果 98
main函式 100
遞迴函式 100
3.3 作用域規則 101
區域性變數 101
過程抽象 103
全域性常量和全域性變數 104
語句塊 106
巢狀作用域 107
提示:在分支和迴圈語句中使用函式呼叫 107
for迴圈體中的變數宣告 107
第4章 函式與過載 117
4.1 引數 118
傳值引數 118
初識引用引數 120
引用傳遞呼叫機制詳解 122
常量引用引數 124
示例:函式swapValues 124
提示:一種操作,而不是程式碼 125
混合引數列表 126
提示:使用何種引數 126
陷阱:無意的區域性變數 128
提示:選擇形參的名字 129
示例:買比薩 129
4.2 過載與預設實參 132
過載簡介 132
陷阱:自動型別轉換與過載 134
過載解析的規則 135
示例:改寫“買比薩程式” 136
預設引數 138
4.3 函式的測試和除錯 140
assert宏 140
佔位程式和驅動程式 141
第5章 陣列 151
5.1 陣列簡介 152
陣列的宣告和引用 152
提示:對陣列使用for迴圈 154
陷阱:陣列的索引始終是從0開始的 154
提示:使用已定義的常量作為陣列的大小 154
記憶體中的陣列 155
陷阱:陣列越界 157
陣列的初始化 157
5.2 函式中的陣列 159
索引變數作為函式實參 159
整個陣列作為函式實參 160
const修飾符 163
陷阱:const引數的不一致使用 164
返回陣列的函式 164
示例:生產圖表 165
5.3 用陣列程式設計 169
部分填充的陣列 169
提示:不要吝嗇形參的使用 169
示例:查詢陣列 172
示例:給陣列排序 174
5.4 多維陣列 178
多維陣列基礎 178
多維陣列引數 179
示例:使用二維陣列的記分程式 179
第6章 結構體和類 195
6.1 結構體 196
結構體型別 198
陷阱:漏掉結構體定義末尾的分號 200
結構體作為函式引數 201
提示:使用多重結構體 201
結構體的初始化 204
6.2 類 206
定義類和成員函式 206
封裝 211
公有成員和私有成員 211
取值和賦值函式 214
提示:介面和實現的分離 216
提示:封裝的測試 216
結構體與類 217
提示:物件思考 217
第7章 建構函式及其他工具 225
7.1 建構函式 226
建構函式的定義 226
陷阱:無參建構函式 230
建構函式的顯式呼叫 230
提示:總是為類定義一個預設建構函式 231
示例:BankAccount類 233
類型別成員變數 238
7.2 其他工具 241
const修飾符 241
陷阱:const的不一致用法 243
行內函數 246
靜態成員 248
巢狀類和區域性類定義 251
7.3 向量——標準模板庫預覽 251
向量基礎 252
陷阱:方括號的索引超過向量的大小 253
提示:向量的賦值 254
效率問題 255
第8章 運算子過載、友元和引用 263
8.1 基本運算子的過載 264
過載基礎 264
提示:建構函式可以返回一個物件 269
返回常量型別 270
一元運算子的過載 272
作為成員函式的運算子過載 272
提示:類可以訪問其所有物件 275
過載函式呼叫符( ) 275
陷阱:過載 &&、||及逗號運算子 275
8.2 友元函式與自動型別轉換 276
建構函式的自動型別轉換 276
陷阱:成員運算子和自動型別轉換 277
友元函式 277
友元類 280
陷阱:不支援友元的編譯器 281
8.3 引用和其他運算子過載 282
引用 282
提示:返回類的成員變數 283
過載“>>”和“<
提示:應使用什麼樣的返回值型別 289
賦值運算子 291
過載自增和自減運算子 291
過載陣列運算子[ ] 294
基於左值和右值的過載 296
第9章 字串 303
9.1 字串型別陣列 304
C字串值和C字串變數 304
陷阱:對C字串使用 “=” 和 “==” 308
示例: 命令列引數 311
C字串的輸入/輸出 313
9.2 字元操作工具 315
字元的輸入/輸出 315
成員函式get和put 315
示例:使用換行函式檢查輸入 318
陷阱:輸入時沒有處理‘\n’ 319
成員函式putback、peek和ignore 320
字元操作函式 322
陷阱:函式toupper和tolower返回int型數值 324
9.3 標準string類 325
標準string類簡介 325
string類的輸入和輸出 327
提示:getline函式的其他版本 330
陷阱:對cin同時使用>>和getline 331
使用string類處理字串 331
示例: 迴文檢測 335
string類物件和C字串的轉換 338
第10章 指標和動態陣列 347
10.1 指標 348
指標變數 349
記憶體管理基礎 355
陷阱:懸空指標 357
動態變數和自動變數 358
提示:定義指標型別 358
陷阱:指標用作傳值引數 360
指標的應用 361
10.2 動態陣列 362
陣列變數和指標變數 362
建立並使用動態陣列 363
示例:一個返回陣列的函式 366
指標運算 368
多維動態陣列 368
10.3 類、指標和動態陣列 371
運算子-> 371
this指標 371
過載賦值運算子 372
示例:部分填充陣列的類 378
解構函式 380
複製建構函式 381
第11章 分散編譯和名稱空間 391
11.1 分散編譯 392
封裝回顧 392
標頭檔案和實現檔案 393
示例:DigitalTime類 399
提示:可重用的元件 401
使用#ifndef 401
提示:定義其他庫 403
11.2 名稱空間 404
名稱空間和using指令 404
建立一個名稱空間 406
using宣告 409
限定名稱 410
提示:為名稱空間取名 412
示例:一個定義在名稱空間中的類 412
無名稱的名稱空間 413
陷阱:混淆全域性名稱空間和無名稱名稱空間 418
提示:用無名稱名稱空間代替static修飾符 419
提示:隱藏幫助函式 419
巢狀名稱空間 420
提示:應該如何指明使用的名稱空間 420
第12章 流和檔案I/O操作 429
12.1 I/O流 430
檔案I/O 431
陷阱:流變數的使用限制 434
向檔案追加輸出內容 435
提示: 開啟檔案的另一種方法 436
提示:檢查一個檔案是否已被成功開啟 439
字元I/O 440
檔案結束檢查 440
12.2 I/O流工具 444
使用檔名輸入 444
使用流函式進行格式化輸出 444
控制符 447
儲存設定的標記 448
更多的輸出流成員函式 449
示例:整理檔案格式 450
示例:編輯文字檔案 452
12.3 流的繼承層次:繼承概述 455
流之間的繼承 455
示例:另一版本的newLine函式 457
使用類stringstream解析字串 460
12.4 隨機檔案存取 462
第13章 遞迴 477
13.1 遞迴void函式 478
示例:豎直排列的數字 479
跟蹤一個遞迴呼叫 481
深入理解遞迴 484
陷阱:無限遞迴 485
遞迴呼叫中的棧 487
陷阱:棧溢位 488
遞迴與迭代的比較 488
13.2 有返回值的遞迴函式 489
有返回值的遞迴函式的一般形式 489
示例:另一個冪函式 490
交叉遞迴 494
13.3 按遞迴方式思考問題 496
遞迴設計技巧 496
二分查詢 497
編碼 498
檢查遞迴是否正確 501
效率 502
第14章 繼承 513
14.1 繼承基礎 514
派生類 514
派生類的建構函式 522
陷阱:使用基類的私有成員變數 524
陷阱:私有成員函式是無法被有效繼承的 526
protected限定符 526
成員函式的重定義 529
重定義與過載 530
訪問被重定義過的基類函式 531
不可被繼承的函式 532
14.2 利用繼承程式設計 533
派生類中的賦值運算子和複製建構函式 533
派生類的解構函式 534
示例:可備份的部分填充的陣列 534
陷阱:賦值運算子兩邊是同一個物件 541
示例:PFArrayDBak的另一種實現 542
提示:一個類可以訪問本類所有物件的私有成員 544
提示:“是一個”和“有一個” 544
保護繼承和私有繼承 545
多繼承 546
第15章 多型與虛擬函式 555
15.1 虛擬函式基礎 556
延遲繫結 556
C++中的虛擬函式 557
提示:virtual屬性會被繼承 563
提示:什麼時候應該使用虛擬函式 563
陷阱:沒有對虛成員函式進行定義 564
抽象類與純虛擬函式 564
示例:抽象類 565
15.2 指標和虛擬函式 567
虛擬函式與擴充套件型別相容性 567
陷阱:切片問題 571
提示:使解構函式成為虛擬函式 572
向下型別轉換和向上型別轉換 573
C++如何實現虛擬函式 574
第16章 模板 585
16.1 函式模板 586
函式模板語法 587
陷阱:編譯器的複雜性 590
提示:如何定義模板 592
示例:一個通用的排序函式 592
陷阱:使用模板時誤用了不正確的資料型別 596
16.2 類别範本 597
類别範本語法 598
示例:一個陣列模板類 601
模板中的vector和 basic_string 606
16.3 模板和繼承 606
示例: 帶備份的部分填充陣列模板類 607
第17章 鏈式資料結構 617
17.1 節點和連結串列 619
節點 619
連結串列 623
在連結串列頭插入節點 625
陷阱:丟失節點 627
插入和刪除連結串列內的節點 628
陷阱:對動態資料結構使用賦值運算子 631
搜尋連結串列 631
搜尋函式虛擬碼 632
雙向連結串列 633
為雙向連結串列增加一個節點 635
從雙向連結串列中刪除一個節點 635
示例: 使用雙向連結串列實現的通用排序模板函式 641
17.2 連結串列的應用 644
示例:棧模板類 644
示例:佇列模板類 650
提示:名稱空間的註解 652
友元類以及類似的其他選擇 653
示例:包含節點鏈的雜湊表 655
字串雜湊函式 656
雜湊表的效率 660
示例:集合(set)模板類 661
集合的基本操作 662
連結串列建立的集合的效率 667
17.3 迭代器 668
指標作為迭代器 668
迭代器類 669
示例:迭代器類 670
17.4 樹 676
樹的屬性 676
示例:樹模板類 678
第18章 異常處理 695
18.1 異常處理基礎 696
異常處理的簡單樣例 697
定義自己的異常類 704
多個丟擲和捕獲 704
陷阱:首先捕獲比較明確的異常 707
提示:異常類可以很簡單 708
在函式中丟擲異常 708
異常說明 710
陷阱:派生類中的異常說明 712
18.2 異常處理的程式設計技術 713
丟擲異常的時機 713
陷阱:未被捕獲的異常 714
陷阱:巢狀try-catch塊 715
陷阱:過度使用異常 715
異常類層次結構 715
可用記憶體測試 716
再次丟擲異常 716
第19章 標準模板庫 721
19.1 迭代器 723
迭代器基礎 723
陷阱:編譯器問題 726
迭代器的種類 728
常量迭代器和可變迭代器 731
反向迭代器 732
其他種類的迭代器 733
19.2 容器 734
連續容器 734
陷阱:迭代器和刪除元素 738
提示:容器中的型別定義 739
容器介面卡棧和佇列 739
陷阱:底層容器 740
關聯式容器set和map 742
效率 747
19.3 泛型演算法 748
執行時間和大-O表示法 749
容器訪問執行時間 752
不改變序列的演算法 753
改變序列的演算法 757
集合演算法 758
排序演算法 7601
前言
本書是介紹C++ 程式語言的教科書,同時也是進行C++ 語言程式設計的參考書。儘管本書包含了一些程式設計的相關技巧,但主要還是圍繞C++ 語言的特徵進行組織的,而不是針對某些程式設計技術展開的技術教程。本書主要面向在C++ 程式語言方面還沒有豐富經驗的大學本科學生。因此,作為C++ 程式語言方面的教科書和參考書,本書適合不同層次的讀者。本書開始的章節專門為初學者而準備,其中方框中的內容是面向有經驗的程式設計師介紹的C++ 語言的基本語法。後續章節的編寫也考慮到了初學者,但主要是針對進階讀者介紹C++ 語言的一些高階主題。本書同樣適合那些想自學C++ 語言的讀者。(有些讀者或許希望能有一本包含更多教學內容和基本程式設計技巧的教科書,這些讀者可以參考我編寫的另一本書:Problem Solving with C++,第8 版,Pearson 公司出版。)
本書很全面地介紹了C++ 語言的相關知識,很多內容超出了初學者應該掌握的範圍。例如,本書詳細介紹了繼承、多型、異常處理和標準模板庫(STL)的相關知識。
新版變化
第5 版和第4 版採用了相同的程式設計哲學。對於教師而言,無須改變課程各主題的順序以及各主題對應的章節和具體內容。相比第4 版,此次更新的內容包括:
第1 章增加了字串類的簡單介紹;第2 章增加了文字檔案資料讀取的簡單介紹。增加這些內容後,教師可以很方便地從第2 章開始就向學生引入大規模的或者現實世界中存在的問題。
第12 章增加了對stringstream 的介紹,從而方便在string 型別和其他型別之間做型別轉換。
第13 章簡捷地介紹了尾遞迴的概念並且給出了一個相互遞迴的例子。增加了10 個自測練習題和25 個程式設計專案練習。同時,應讀者的要求,部分新增的題目更長且具有更少的限制,給學生留下了更多發揮的空間,可以讓他們設計程式設計方案的能力得到更好的鍛鍊。
更正了第4 版中出現的幾個錯誤。
ANSI/ISO C++ 標準
本書介紹的所有內容完全依照最新的ANSI/ISO C++ 語言標準進行。
標準模板庫
標準模板庫(STL)是一個預先編寫好的包含很多資料結構和演算法的程式設計庫。STL的相關知識和內容恐怕和C++ 核心知識不相上下,因此本書使用了足夠多的篇幅介紹它。書中有一整章的內容是介紹模板的,此外有一整章用來詳細介紹STL。除此之外,其他相關知識點中也包含對STL 相關內容的介紹。
物件導向程式設計
本書是按照C++ 語言的結構組織的。這樣一來,書中前面的幾章都是關於C++ 語言的基本知識,這與介紹其他高階程式語言的書大同小異,並沒有專門針對物件導向程式設計(OOP)。這使得本書適合成為一本參考書,或者用來學習第二門程式語言。考慮到C++ 是一門物件導向程式語言,如果讀者使用C++ 而不是C 來進行程式設計,還是得掌握C++ 語言的物件導向特性。基於此,本書的內容全面涵蓋了封裝、繼承和多型這些C++ 已經實現的物件導向特性。
章節順序的靈活性
本書允許教師自由安排教學內容的順序,對一本參考書而言,這一點是很重要的。作者不會強制教師們按照本書的知識順序安排自己的課程,這不符合自由靈活的設計哲學。為此,本書各章節的開頭都給出了學習本章節需要的知識準備。
讓學生更容易接受
作為一本參考書,只把章節順序安排好是不夠的,此外,確保書中內容的正確和讓教師能有清晰的理解也是不夠的。重點在於如何向初學者呈現書中的內容,從而讓他們容易理解。就像作者其他的書一樣,本書對學生非常友好,易於學習和理解。
要點總結框
書中的每個關鍵知識點都會出現在一個總結方框中。這些要點總結框貫穿了書中的各個章節,可以作為知識點的總結和快速參考內容。此外,這些要點總結框還可以讓讀者方便地查閱那些自己已經有所瞭解但不清楚C++ 語言是如何使用的語法特性。
自測練習
各章節都包含了許多自測練習題,各練習題目的完整答案都在章節的結尾處給出。
其他特性
本書的各章節都包含一些陷阱、程式設計技巧和示例的小節,還有一些完整的程式碼示例,並且都配有程式輸入和輸出的示例。每章的結尾都給出了總結和相關程式設計練習。
本書英文原版的參考網址
本書英文原版的參考網址為 及。關於本書英文原版的相關資源,請與cece.zhang@pearson.com 聯絡並獲取。
致謝
本書的出版得益於許多人提供的寶貴幫助和支援。Addison-Wesley 公司的FrankRuggirello 和Susan Hartman 最先提出了本書的構思並促成了第1 版的面世,對此我充滿了感激之情。作為本書第2 版、第3 版以及第4 版的編輯,Matt Goldstein 的幫助和付出是本書持續更新和麵世的關鍵,對此我報以誠摯的謝意。我還要感謝Pearson 公司的Chelsea Kharakozova、Marilyn Lloyd、Yez Alayan 以及所有其他工作人員,感謝他們無私的支援和鼓勵。
以下審閱者對本書提供了寶貴的建議,感謝他們的付出和寶貴建議:
Richard Albright University of Delaware
J. Boyd Trolinger Butte College
Jerry K. Bilbrey, Jr Francis Marion University
Albert M. K. Cheng University of Houston
David Cherba Michigan State University
Fredrick H. Colclough Colorado Technical University
Drue Coles Boston University
Stephen Corbesero Moravian College
Christopher E. Cramer
Ron DiNapoli Cornell University
Qin Ding Pennsylvania State University, Harrisburg
Martin Dulberg North Carolina State University
H. E. Dunsmore Purdue University
Evan Golub University of Maryland
Terry Harvey University of Delaware
Joanna Klukowska Hunter College, CUNY
Lawrence S. Kroll San Francisco State University
Stephen P. Leach Florida State University
Alvin S. Lim Auburn University
Tim H. Lin Cal Poly Pomona
R. M. Lowe Clemson University
Jeffrey L. Popyack Drexel University
Amar Raheja Cal Poly Pomona
Victoria Rayskin University of Central Los Angeles
Loren Rhodes Juniata College
Jeff Ringenberg University of Michigan
Victor Shtern Boston University
Aaron Striegel University of Notre Dame
J. Boyd Trolinger Butte College
Chrysafis Vogiatzis University of Florida
Joel Weinstein Northeastern University
Dick Whalen College of Southern Maryland
特別感謝Kenrick Mock(阿拉斯加大學安克雷奇分校),他負責本書第5 版的更新。為此,他付出了許多辛勞,再一次地滿足了我、編輯及他自己對本書提出的苛刻要求。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-1222291/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 詳解C++完美轉發C++
- C++完美實現Singleton模式[轉]C++模式
- jQuery雙色器隨機選號jQuery隨機
- 《C++程式設計教程(第3版)》——第1章,第2節從C到C++C++程式設計
- 兩臺Linux完美實現雙機熱備Linux
- C++左值右值完美轉發轉移C++
- 完美世界:打造中國電競產業雙迴圈發展新格局產業
- 第 14 章 CSS 顏色與度量單位CSS
- Web Audio API 第2章 完美的播放時機控制WebAPI
- JSP和JSF雙劍合併 打造完美Web應用JSWeb
- 潮流前端週刊(第39期)- 紅色標語前端
- 彈性計算雙週刊 第24期
- 彈性計算雙週刊第21期
- 彈性計算雙週刊第17期
- C++實現通用雙向連結串列C++
- 分析模式-計量的C++實現——完美版本 (轉)模式C++
- 0x000000ed藍色畫面程式碼是什麼意思 藍色畫面完美解決方案圖解圖解
- 雙效合一的SVG多色描邊變形動畫SVG動畫
- 解除安裝雙系統中win8系統的完美方案
- 以瘦為美 雙系統原道W7展現完美身姿
- c++中冒號(:)和雙冒號(::)的用法C++
- iPhone 7 Plus藍色版上手 雙鏡頭凸起是槽點iPhone
- LUT調色神器:3d lut creator pro中文完美漢化版(支援big sur)3D
- 藍色畫面程式碼0x000000f4完美解決 0x000000f4藍色畫面修復
- 筆記:《C++ Primer 中文版(第5版)》 第1章 開始筆記C++
- 【資料結構】雙迴圈連結串列(c++)資料結構C++
- 0x00000050藍色畫面程式碼是什麼意思_藍色畫面完美解決修復辦法圖解圖解
- 精通 R plot—第1部分:顏色,圖例和線
- 【智慧製造】雙星集團:綠色輪胎的智慧製造
- 【iCore3 雙核心板】例程一:ARM驅動三色LED
- 藍色畫面程式碼0xc0000001完美解決 電腦藍色畫面0xc0000001怎麼解決
- 《Effective C++》第5章 實現-讀書筆記C++筆記
- <> 第1篇 認識C++的函式和物件C++函式物件
- C++和雙重檢查鎖定模式(DCLP)的風險C++模式
- win10圖示雙箭頭怎麼取消 win10圖示藍色雙箭頭隱藏方法Win10
- <<從0到1學C++>> 第1篇 認識C++的函式和物件C++函式物件
- 【iCore4 雙核心板_ARM】例程一:ARM驅動三色LED
- 完美世界釋出半年業績預告 遊戲影視雙板塊加持數字增長遊戲