商品簡介
《完美C++(第5版)》對C++的一些重點知識,輔以實例進行了重點講解,特別是對一些易混淆、易犯錯的知識點,專門以“陷阱”的組織方式進行深入分析和討論,幫助讀者更好地理解和掌握。《完美C++(第5版)》中各章均含有大量例子及完整的程式碼片段和分析,幫助讀者強化對關鍵概念的理解,以及對主題的掌握。各章還配有豐富的自測習題以及答案,幫助讀者進一步提升對C++知識的理解以及實際動手程式設計能力。
原書由知名學者所著,歷經多個版本,根據C++技術的發展,內容不斷完善、豐富,體系完整、實踐性強。
《完美C++(第5版)》可以作為高等院校學習程式設計基本知識以及C++程式設計語言課程的教材,也可以作為有C++程式設計經驗者的參考書。
目次
1.1 C++簡介 2
C++語言的起源 2
C++與面向對象編程 3
C++的特點 3
C++術語 3
C++程序示例 3
1.2 變量、表達式及賦值語句 5 第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
主題書展
更多主題書展
更多書展本週66折
您曾經瀏覽過的商品
購物須知
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。