內容介紹
Ivor Horton的書能夠占據市場的一個原因是:他用其獨特、易於理解的教程風格來介紹各個主題,無論是編程新手,還是經驗豐富的編程人員,都很容易理解。現在在這本修訂的指南中,他全面介紹了標準C++語言和Visual C++2012。循序漸進的編程練習、實用的示例和清晰的解決方案,帶領讀者學習C++開發的來龍去脈。學習完本書,您就會牢固掌握使用Visual C++ 2012創建實際應用程式的技術。本書特色
◆ 介紹C++語言的當前版本(C++11),以及在Microsoft VisualStudio 2012中實現
◆ 全面介紹如何使用完整的Visual C++程式語言
◆ 解釋C++標準模板庫,以及如何套用它簡化編程任務
◆ 展示在C++中使用Microsoft Foundation Classes開發Windows桌面應用程式的基本元素
◆ 開發能在Windows 8下運行的Windows 7桌面應用程式
◆ 通過一個有效的遊戲示例演示如何用Visual C++開發Windows 8應用程式
作者介紹
作者介紹:作 者 簡 介
Ivor Horton是世界著名的計算機圖書作家,主要從事與編程相關的顧問及撰寫工作,曾幫助無數程式設計師步入編程的殿堂。他曾在IBM工作多年,能使用多種語言進行編程(在多種機器上使用彙編語言和高級語言),設計和實現了實時閉環工業控制系統。Horton擁有豐富的教學經驗(教學內容包括C、C++、Fortran、PL/1、APL等),同時還是機械、加工和電子CAD系統、機械CAM系統和DNC/CNC系統方面的專家。
Ivor Horton原來是一位數學家,卻因嚮往信息技術工作輕鬆而收入豐厚,因而涉足信息技術領域。儘管現實情況常常是工作辛苦而收入卻相對不高,但他仍堅持從事計算機工作至今。在不同的時期,他從事過的工作包括程式設計、系統設計、顧問工作以及管理和實現相當複雜的項目。
Horton在計算機系統的設計和實現方面,擁有多年的工作經驗,這些系統套用於多種行業的工程設計和製造運營。他不僅能運用多種程式語言開發特殊用途的應用程式,而且還為科研人員和工程人員提供教學,以幫助他們完成這類工作,在這些方面他都擁有相當豐富的經驗。他多年來一直從事程式設計方面書籍的撰寫工作,目前出版的著作有C、C++和Java等教程。目前,他既沒有忙於寫書,也不提供諮詢服務,而是在釣魚、旅遊和盡情地享受生活。
技術編輯簡介
Marc Gregoire是來自比利時的一位軟體工程師。他畢業於比利時天主教魯汶大學,獲得了“Burgerlijk ingenieur in de computer wetenschappen”學位(等同於計算機科學工程的科學碩士學位)。此後,他以優異成績獲得了同一所大學的人工智慧碩士學位,並開始供職於一家大型軟體諮詢公司(Ordina公司網址:http://www.ordina.be)。他在西門子和諾基亞西門子通信公司為大型電信運營商開發運行於Solaris上至關重要的2G和3G軟體,這需要在國際團隊中工作,包括南美、USA、EMEA和亞洲。現在,Marc在尼康公司開發三維掃描軟體。
他主要擅長C/C++,具體地說就是Microsoft VC++和MFC framework。除C/C++之外,他也喜歡C#,並使用PHP製作網頁。除主要致力於Windows開發以外,他在開發全天候運行在Linux平台上的C++程式方面,也具有一定的經驗,例如EIB家用自動控制和監視軟體。
由於在Visual C++方面具有傑出的專業技能,Marc Gregoire自從2007年4月開始,每年都榮獲了Microsoft MVP(Most Valuable Professional)大獎。
Marc不僅是Belgian C++用戶組(www.becpp.org)的創始人和CodeGuru論壇的活躍分子(會員名是Marc G)。他製作的免費程式和共享程式通過其站點www.nuonsoft.com來發布,並維護其部落格www.nuonsoft.com/blog/。
作品目錄
目 錄第1章使用Visual C++編程 1
1.1使用Visual C++學習 1
1.2編寫C++應用程式 2
1.3學習桌面應用程式的編程 2
1.3.1學習C++ 3
1.3.2控制台應用程式 3
1.3.3Windows編程概念 3
1.4集成開發環境簡介 5
1.4.1編輯器 5
1.4.2編譯器 5
1.4.3連結器 5
1.4.4庫 6
1.5使用IDE 6
1.5.1工具列選項 7
1.5.2可停靠的工具列 8
1.5.3文檔 8
1.5.4項目和解決方案 8
1.5.5設定Visual C++的選項 16
1.5.6創建和執行Windows應用程式 17
1.6小結 19
1.7本章主要內容 19
第2章數據、變數和計算 21
2.1C++程式結構 21
2.1.1main()函式 28
2.1.2程式語句 28
2.1.3空白 30
2.1.4語句塊 30
2.1.5自動生成的控制台程式 31
2.2定義變數 32
2.2.1命名變數 32
2.2.2聲明變數 33
2.2.3變數的初始值 34
2.3基本數據類型 34
2.3.1整型變數 35
2.3.2字元數據類型 36
2.3.3整型修飾符 37
2.3.4布爾類型 38
2.3.5浮點類型 38
2.3.6C++中的基本類型 39
2.3.7字面值 39
2.3.8定義數據類型的同義詞 40
2.4基本的輸入/輸出操作 41
2.4.1從鍵盤輸入 41
2.4.2到命令行的輸出 41
2.4.3格式化輸出 42
2.4.4轉義序列 43
2.5C++中的計算 45
2.5.1賦值語句 45
2.5.2算術運算 45
2.5.3計算餘數 50
2.5.4修改變數 50
2.5.5增量和減量運算符 51
2.5.6計算的順序 53
2.6類型轉換和類型強制轉換 54
2.6.1賦值語句中的類型轉換 55
2.6.2顯式類型轉換 56
2.6.3老式的類型強制轉換 57
2.7AUTO關鍵字 57
2.8類型的確定 58
2.9按位運算符 58
2.9.1按位AND運算符 58
2.9.2按位OR運算符 60
2.9.3按位EOR運算符 61
2.9.4按位NOT運算符 61
2.9.5移位運算符 61
2.10lvalue和rvalue 63
2.11了解存儲時間和作用域 64
2.11.1自動變數 64
2.11.2決定變數聲明的位置 66
2.11.3全局變數 67
2.11.4靜態變數 70
2.12具有特定值集的變數 70
2.12.1舊枚舉 70
2.12.2類型安全的枚舉 72
2.13名稱空間 74
2.13.1聲明名稱空間 75
2.13.2多個名稱空間 76
2.14小結 77
2.15練習 77
2.16本章主要內容 78
第3章判斷和循環 79
3.1比較數據值 79
3.1.1if語句 80
3.1.2嵌套的if語句 81
3.1.3嵌套的if-else語句 85
3.1.4邏輯運算符和表達式 87
3.1.5條件運算符 89
3.1.6switch語句 91
3.1.7無條件轉移 94
3.2重複執行語句塊 95
3.2.1循環的概念 95
3.2.2for循環的變體 97
3.2.3while循環 104
3.2.4do-while循環 106
3.2.5基於範圍的循環 107
3.2.6嵌套的循環 107
3.3小結 110
3.4練習 110
3.5本章主要內容 111
第4章數組、字元串和指針 113
4.1處理多個相同類型的數據值 113
4.1.1數組 113
4.1.2聲明數組 114
4.1.3初始化數組 117
4.1.4使用基於範圍的for循環 118
4.1.5字元數組和字元串處理 119
4.1.6多維數組 122
4.2間接數據訪問 125
4.2.1指針的概念 125
4.2.2聲明指針 125
4.2.3使用指針 126
4.2.4初始化指針 127
4.2.5sizeof操作符 132
4.2.6常量指針和指向常量的指針 134
4.2.7指針和數組 136
4.3動態記憶體分配 142
4.3.1堆的別名——空閒存儲器 142
4.3.2new和delete操作符 142
4.3.3為數組動態分配記憶體 143
4.3.4多維數組的動態分配 146
4.4使用引用 146
4.4.1引用的概念 147
4.4.2聲明並初始化lvalue引用 147
4.4.3在基於範圍的for循環中使用
引用 148
4.4.4rvalue引用 148
4.5字元串的庫函式 149
4.5.1確定以空字元結尾的字元串
的長度 149
4.5.2連線以空字元結尾的字元串 150
4.5.3複製以空字元結尾的字元串 151
4.5.4比較以空字元結尾的字元串 152
4.5.5搜尋以空字元結尾的字元串 152
4.6小結 154
4.7練習 155
4.8本章主要內容 155
第5章程式結構(1) 157
5.1理解函式 157
5.1.1需要函式的原因 158
5.1.2函式的結構 158
5.1.3替代的函式語法 161
5.1.4使用函式 161
5.2給函式傳遞實參 164
5.2.1按值傳遞機制 165
5.2.2給函式傳遞指針實參 166
5.2.3給函式傳遞數組 167
5.2.4給函式傳遞引用實參 171
5.2.5使用const修飾符 173
5.2.6rvalue引用形參 174
5.2.7main()函式的實參 176
5.2.8接受數量不定的函式實參 177
5.3從函式返回值 179
5.3.1返回指針 179
5.3.2返回引用 182
5.3.3函式中的靜態變數 184
5.4遞歸函式調用 186
5.5小結 189
5.6練習 189
5.7本章主要內容 189
第6章程式結構(2) 191
6.1函式指針 191
6.1.1聲明函式指針 191
6.1.2函式指針作為實參 194
6.1.3函式指針的數組 196
6.2初始化函式形參 196
6.3異常 198
6.3.1拋出異常 199
6.3.2捕獲異常 200
6.3.3重新拋出異常 201
6.3.4MFC中的異常處理 202
6.4處理記憶體分配錯誤 203
6.5函式重載 204
6.5.1函式重載的概念 204
6.5.2引用類型和重載選擇 207
6.5.3何時重載函式 207
6.6函式模板 208
6.7使用decltype操作符 210
6.8使用函式的示例 212
6.8.1實現計算器 212
6.8.2從字元串中刪除空格 215
6.8.3計算表達式的值 216
6.8.4獲得項值 218
6.8.5分析數 219
6.8.6整合程式 221
6.8.7擴展程式 223
6.8.8提取子字元串 224
6.8.9運行修改過的程式 226
6.9小結 227
6.10練習 227
6.11本章主要內容 228
第7章自定義數據類型 229
7.1C++中的結構 229
7.1.1結構的概念 230
7.1.2定義結構 230
7.1.3初始化結構 230
7.1.4訪問結構的成員 231
7.1.5伴隨結構的智慧型感知幫助 234
7.1.6RECT結構 235
7.1.7使用指針處理結構 236
7.2數據類型、對象、類和實例 237
7.2.1類的起源 239
7.2.2類的操作 239
7.2.3術語 240
7.3理解類 240
7.3.1定義類 240
7.3.2聲明類的對象 241
7.3.3訪問類的數據成員 241
7.3.4類的成員函式 243
7.3.5成員函式定義的位置 245
7.3.6內聯函式 245
7.4類構造函式 246
7.4.1構造函式的概念 247
7.4.2默認的構造函式 248
7.4.3默認的形參值 250
7.4.4在構造函式中使用初始化列表 252
7.4.5聲明顯式的構造函式 253
7.5類的私有成員 254
7.5.1訪問私有類成員 256
7.5.2類的友元函式 257
7.5.3默認複製構造函式 259
7.6this指針 260
7.7類的const對象 263
7.7.1類的const成員函式 263
7.7.2類外部的成員函式定義 264
7.8類對象的數組 265
7.9類的靜態成員 267
7.9.1類的靜態數據成員 267
7.9.2類的靜態函式成員 270
7.10類對象的指針和引用 270
7.10.1類對象的指針 270
7.10.2類對象的引用 273
7.11小結 274
7.12練習 274
7.13本章主要內容 275
第8章深入理解類 277
8.1類析構函式 277
8.1.1析構函式的概念 277
8.1.2默認的析構函式 278
8.1.3析構函式與動態記憶體分配 280
8.2實現複製構造函式 283
8.3在變數之間共享記憶體 284
8.3.1定義联合 285
8.3.2匿名聯合 286
8.3.3類和結構中的聯合 286
8.4運算符重載 287
8.4.1實現重載的運算符 287
8.4.2實現對比較運算符的完全支持 290
8.4.3重載賦值運算符 294
8.4.4重載加法運算符 299
8.4.5重載遞增和遞減運算符 303
8.4.6重載函式調用操作符 304
8.5對象複製問題 305
8.5.1避免不必要的複製操作 305
8.5.2套用rvalue引用形參 308
8.5.3命名的對象是lvalue 310
8.6 默認的類成員 314
8.7類模板 315
8.7.1定義類模板 316
8.7.2根據類模板創建對象 318
8.7.3使用有多個形參的類模板 321
8.7.4函式對象模板 323
8.8完美轉發 324
8.9使用類 327
8.9.1類接口的概念 327
8.9.2定義問題 327
8.9.3實現CBox類 328
8.10組織程式代碼 343
8.11字元串的庫類 345
8.11.1創建字元串對象 345
8.11.2連線字元串 346
8.11.3訪問與修改字元串 350
8.11.4比較字元串 353
8.11.5搜尋字元串 356
8.12小結 364
8.13練習 364
8.14本章主要內容 365
第9章類繼承和虛函式 367
9.1面向對象編程的基本思想 367
9.2類的繼承 368
9.2.1基類的概念 369
9.2.2基類的派生類 369
9.3繼承機制下的訪問控制 372
9.3.1派生類中構造函式的操作 375
9.3.2聲明類的保護成員 378
9.3.3繼承類成員的訪問級別 380
9.4派生類中的複製構造函式 382
9.5禁止派生類 384
9.6友元類成員 385
9.6.1友元類 387
9.6.2對類友元關係的限制 387
9.7虛函式 387
9.7.1虛函式的概念 389
9.7.2確保虛函式的正確執行 391
9.7.3禁止重寫函式 391
9.7.4使用指向類對象的指針 392
9.7.5使用引用處理虛函式 393
9.7.6純虛函式 395
9.7.7抽象類 395
9.7.8間接基類 398
9.7.9虛析構函式 400
9.8類類型之間的強制轉換 403
9.9嵌套類 403
9.10小結 407
9.11練習 407
9.12本章主要內容 409
第10章標準模板庫 411
10.1標準模板庫的定義 411
10.1.1容器 412
10.1.2容器適配器 414
10.1.3 疊代器 414
10.2智慧型指針 415
10.3算法 418
10.4STL中的函式對象 418
10.5STL容器範圍 419
10.6序列容器 419
10.6.1創建矢量容器 420
10.6.2矢量容器的容量和大小 423
10.6.3訪問矢量中的元素 428
10.6.4在矢量中插入和刪除元素 428
10.6.5在矢量中存儲類對象 431
10.6.6排序矢量元素 436
10.6.7排序矢量中的指針 437
10.6.8雙端佇列容器 442
10.6.9使用列表容器 445
10.6.10使用forward_list容器 454
10.6.11使用其他序列容器 456
10.6.12tuple< >類模板 466
10.7關聯容器 469
10.7.1使用映射容器 469
10.7.2使用多重映射容器 480
10.8關於疊代器的更多內容 481
10.8.1使用輸入流疊代器 481
10.8.2使用插入疊代器 484
10.8.3使用輸出流疊代器 485
10.9關於函式對象的更多內容 487
10.10關於算法的更多內容 488
10.10.1fill() 489
10.10.2replace() 489
10.10.3find() 489
10.10.4transform() 490
10.11類型特質和靜態斷言 491
10.12λ表達式 492
10.12.1capture子句 493
10.12.2捕獲特定的變數 494
10.12.3模板和λ表達式 494
10.12.4包裝λ表達式 498
10.13小結 500
10.14練習 500
10.15本章主要內容 501
第11章Windows編程的概念 503
11.1Windows編程基礎 503
11.1.1視窗的元素 504
11.1.2Windows程式與作業系統 505
11.1.3事件驅動型程式 505
11.1.4Windows訊息 506
11.1.5Windows API 506
11.1.6Windows數據類型 506
11.1.7Windows程式中的符號 507
11.2Windows程式的結構 508
11.2.1WinMain()函式 509
11.2.2訊息處理函式 519
11.3MFC 524
11.3.1MFC表示法 524
11.3.2MFC程式的組織方式 525
11.4小結 528
11.5本章主要內容 528
第12章使用MFC編寫Windows程式 531
12.1MFC的文檔/視圖概念 531
12.1.1文檔的概念 531
12.1.2文檔界面 532
12.1.3視圖的概念 532
12.1.4連結文檔和視圖 533
12.1.5應用程式和MFC 534
12.2創建MFC應用程式 535
12.2.1創建SDI應用程式 536
12.2.2MFC Application Wizard的輸出 539
12.2.3創建MDI應用程式 548
12.3小結 549
12.4練習 550
12.5本章主要內容0 550
第13章處理選單和工具列 551
13.1與Windows進行通信 551
13.1.1了解訊息映射 552
13.1.2訊息類別 554
13.1.3處理程式中的訊息 554
13.2擴展Sketcher程式 555
13.3選單的元素 556
13.4為選單訊息添加處理程式 559
13.4.1選擇處理選單訊息的類 560
13.4.2創建選單訊息函式 560
13.4.3編寫選單訊息函式的代碼 562
13.4.4添加更新選單訊息的處理
程式 565
13.5添加工具列按鈕 568
13.5.1編輯工具列按鈕的屬性 569
13.5.2練習使用工具列按鈕 570
13.5.3添加工具提示 571
13.6小結 571
13.7練習 571
13.8本章主要內容 571
第14章在視窗中繪圖 573
14.1視窗繪圖的基礎知識 573
14.1.1視窗工作區 573
14.1.2Windows圖形設備界面 574
14.2MFC的繪圖機制 576
14.2.1應用程式中的視圖類 576
14.2.2CDC類 577
14.3實際繪製圖形 585
14.4對滑鼠進行編程 587
14.4.1滑鼠發出的訊息 587
14.4.2滑鼠訊息處理程式 588
14.4.3使用滑鼠繪圖 590
14.5繪製草圖 611
14.5.1運行示例 612
14.5.2捕獲滑鼠訊息 612
14.6小結 613
14.7練習題 613
14.8本章主要內容 614
第15章改進視圖 615
15.1Sketcher應用程式的缺陷 615
15.2改進視圖 616
15.2.1更新多個視圖 616
15.2.2滾動視圖 617
15.2.3使用MM_LOENGLISH
映射模式 622
15.3刪除和移動元素 622
15.4實現上下文選單 623
15.4.1關聯選單和類 624
15.4.2選中上下文選單項 625
15.5標識位於游標下的元素 626
15.5.1練習彈出選單 627
15.5.2突出顯示元素 627
15.5.3實現移動和刪除功能 631
15.6處理禁止的元素 637
15.7小結 639
15.8練習 639
15.9本章主要內容 639
第16章使用對話框和控制項 641
16.1理解對話框 641
16.2理解控制項 642
16.3創建對話框資源 642
16.3.1給對話框添加控制項 643
16.3.2測試對話框 644
16.4對話框的編程 644
16.4.1添加對話框類 644
16.4.2模態和非模態對話框 645
16.4.3顯示對話框 646
16.5支持對話框控制項 648
16.5.1初始化對話框控制項 648
16.5.2處理單選按鈕訊息 649
16.6完成對話框的操作 650
16.6.1給文檔添加線寬 651
16.6.2給元素添加線寬 651
16.6.3在視圖中創建元素 653
16.6.4練習使用對話框 654
16.7使用微調按鈕控制項 655
16.7.1添加Scale選單項和工具列
按鈕 655
16.7.2創建微調按鈕 655
16.7.3生成比例對話框類 656
16.7.4顯示微調按鈕 659
16.8使用縮放比例 660
16.8.1可縮放的映射模式 660
16.8.2設定文檔的大小 661
16.8.3設定映射模式 662
16.8.4同時實現滾動與縮放 663
16.9使用狀態欄 665
16.9.1給框架視窗添加狀態欄 665
16.9.2CString類 669
16.10使用編輯框控制項 669
16.10.1創建編輯框資源 670
16.10.2創建對話框類 671
16.10.3添加Text選單項 672
16.10.4定義文本元素 672
16.10.5實現CText類 673
16.11小結 677
16.12練習 678
16.13本章主要內容 678
第17章存儲和列印文檔 679
17.1了解序列化 679
17.2序列化文檔 680
17.2.1文檔類定義中的序列化 680
17.2.2文檔類實現中的序列化 681
17.2.3基於CObject的類的功能 683
17.2.4序列化的工作方式 684
17.2.5如何實現類的序列化 685
17.3套用序列化 685
17.3.1記錄文檔修改 686
17.3.2序列化文檔 687
17.3.3序列化元素類 689
17.4練習序列化 693
17.5列印文檔 694
17.6實現多頁列印 697
17.6.1獲取文檔的總尺寸 698
17.6.2存儲列印數據 698
17.6.3準備列印 699
17.6.4列印後的清除 700
17.6.5準備設備上下文 701
17.6.6列印文檔 701
17.6.7獲得文檔的列印輸出 705
17.7小結 705
17.8練習 705
17.9本章主要內容 706
第18章編寫Windows 8應用程式 707
18.1理解Windows 8應用程式 707
18.2 開發WINDOWS 8應用程式 708
18.3Windows Runtime的概念 709
18.3.1WinRT名稱空間 709
18.3.2WinRT對象 709
18.4C++ COMPONENT EXTENSIONS
(C++/CX) 710
18.4.1C++/CX名稱空間 710
18.4.2定義WinRT類類型 711
18.4.3Ref類類型的變數 713
18.4.4訪問ref類對象的成員 713
18.4.5事件處理函式 714
18.4.6 轉換ref類引用的類型 714
18.5XAML 714
18.5.1XAML元素 715
18.5.2XAML中的UI元素 716
18.5.3附加屬性 719
18.5.4父元素和子元素 719
18.5.5控制項元素 719
18.5.6 布局元素 720
18.5.7處理UI元素的事件 720
18.6創建Windows 8應用程式 721
18.6.1應用程式檔案 721
18.6.2定義用戶界面 722
18.6.3創建標題 724
18.6.4添加遊戲控制項 726
18.6.5創建包含紙牌的格線 727
18.6.6實現遊戲的操作 732
18.6.7初始化MainPage對象 735
18.6.8初始化一副紙牌 736
18.6.9建立cardGrid的子元素 736
18.6.10初始化遊戲 738
18.6.11洗牌 740
18.6.12突出顯示UI紙牌 741
18.6.13 處理翻牌事件 741
18.6.14處理圖形事件 743
18.6.15確認贏家 745
18.6.16處理遊戲控制項的按鈕事件 746
18.7縮放UI元素 747
18.8平移 749
18.8.1應用程式的啟動動畫 749
18.8.2故事板動畫 750
18.9小結 752
18.10本章主要內容 752