完美C++(第5版)(雙色)

完美C++(第5版)(雙色)

《完美C++(第5版)(雙色)》是2014年6月電子工業出版社出版的圖書,作者是薛正華,沈庚,韋遠科。

基本介紹

  • 書名:完美C++(第5版)(雙色)
  • 作者:薛正華,沈庚,韋遠科
  • ISBN:978-7-121-23198-8
  • 頁數:788頁
  • 出版社電子工業出版社
  • 出版時間:2014年6月
圖書信息,內容簡介,內容提要,目錄,前言,

圖書信息

書名:完美C++(第5版)(雙色)
作者:薛正華,沈庚,韋遠科
定價:148.00元
出版時間:2014年6月
開本:16開

內容簡介

《完美C++(第5版)》為讀者提供了一個學習、理解和掌握 C++程式語言的全面視圖,覆蓋面廣、實用性強。書中介紹了 C++的基本數據類型,如字元串、數組、指針、結構體、類等,同時也詳細描述了面向對象程式語言的特性:封裝、繼承和多態,以及這些特性在 C++語言中的具體使用方式。本書的後面章節還重點介紹了模板、鏈式數據結構、標準模板庫以及異常處理等C++語言的進階編程知識。這些知識在從事具體編程工作時會經常使用到。
《完美C++(第5版)》對C++的一些重點知識,輔以實例進行了重點講解,特別是對一些易混淆、易犯錯的知識點,專門以“陷阱”的組織方式進行深入分析和討論,幫助讀者更好地理解和掌握。《完美C++(第5版)》中各章均含有大量例子及完整的代碼段和分析,幫助讀者強化對關鍵概念的理解,以及對主題的掌握。各章還配有豐富的自測習題以及答案,幫助讀者進一步提升對C++知識的理解以及實際動手編程能力。
原書由知名學者所著,歷經多個版本,根據C++技術的發展,內容不斷完善、豐富,體系完整、實踐性強。
《完美C++(第5版)》可以作為高等院校學習編程基本知識以及C++程式語言課程的教材,也可以作為有C++編程經驗者的參考書。

內容提要

《完美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
重載“>>”和“<<” 284
提示:應使用什麼樣的返回值類型 289
賦值運算符 291
重載自增和自減運算符 291
重載數組運算符[ ] 294
基於左值和右值的重載 296
第9章 字元串 303
9.1 字元串類型數組 304
C字元串值和C字元串變數 304
陷阱:對C字元串使用 “=” 和 “==” 308
<cstring>中的其他函式 309
示例: 命令行參數 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
排序算法 760

前言

本書是介紹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++ 語言是如何使用的語法特性。
自測練習
各章節都包含了許多自測練習題,各練習題目的完整答案都在章節的結尾處給出。
其他特性
本書的各章節都包含一些陷阱、編程技巧和示例的小節,還有一些完整的代碼示例,並且都配有程式輸入和輸出的示例。每章的結尾都給出了總結和相關編程練習。
致謝
本書的出版得益於許多人提供的寶貴幫助和支持。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 版的更新。為此,他付出了許多辛勞,再一次地滿足了我、編輯及他自己對本書提出的苛刻要求。

熱門詞條

聯絡我們