內容簡介
使用當今世界領先的開源跨平台開發環境qt 4來一起掌握c++與設計模式!
本書是一本完整的教程和參考書,閱讀本書並不要求您擁有c、c++、對象或模式的任何知識。在本書中您將逐步地學習每一個核心概念,通過均已在qt 4.1下測試過的一組精選示例,您可以一步一步地跨入程式設計的高級殿堂。
完成本書的學習後,您將可以創建多執行緒gui應用程式,這些應用程式可以訪問資料庫和操作xml檔案,當然更具有吸引力的是它們可以運行在包括 windows、linux、unix和mac osx在內的多個平台之上!最令人高興的是您已經可以編寫高效、可復用的一流代碼了。
作者簡介
alanezust曾在mcgill大學、suffolk大學以及leamix、nertel、objectivity、hewlett-packard 等公司和研究機構學習和工作過,有超過10年的講授編程知識和編寫課程資料的經驗,他獲得了mcgill大學的計算機碩士學位。
目錄
第Ⅰ部分C++和Qt4簡介
第1章C++簡介 3
1.1C++概述 4
1.2C++簡史 4
1.3在開源平台上安裝 4
1.3.2從原始碼安裝 6
1.4在Win32平台上安裝 8
1.5第一個C++示例 9
1.6輸入與輸出 12
1.7標識符、類型與常量 15
1.8C++的基本數據類型 17
1.8.1main函式與命令行參數 19
1.8.2代數運算 20
1.9C++標準庫字元串 23
1.10流 24
1.11關鍵字const 27
1.12指針與記憶體訪問 28
1.12.1一元運算符&與* 28
1.12.2運算符new和delete 30
1.13const*與*const 32
1.14引用變數 34
第2章類 37
2.1結構 38
2.2類定義 39
2.3成員訪問限定符 40
2.4封裝 42
2.5UML簡介 43
2.6類的友元 44
2.7構造函式 44
2.8子對象 46
2.9析構函式 47
2.10關鍵字static 48
2.11複製構造函式與賦值運算符 51
2.12轉換 53
2.13const成員函式 55
第3章Qt簡介 65
3.1示例工程:使用Qapplication與QLabel 66
3.2Makefile、qmake以及工程檔案 67
3.2.1#include:搜尋頭檔案 69
3.2.2make命令 70
3.2.3清除檔案 71
3.3獲得線上幫助 72
3.4風格指南與命名約定 73
3.5Qt核心模組 74
3.6流與日期 74
第4章列表 77
4.1容器簡介 78
4.2疊代器 78
4.3關係 80
第5章函式 85
5.1函式聲明 86
5.2重載函式 86
5.3可選參數 89
5.4運算符重載 91
5.5通過值傳遞參數 94
5.6通過引用傳遞參數 96
5.7const引用 99
5.8函式返回值 100
5.9從函式中返回引用 100
5.10根據const屬性進行重載 101
5.11內聯函式 103
5.12內聯還是宏擴展 104
第6章繼承與多態 109
6.1簡單派生 110
6.2多態派生 116
6.3從抽象基類中派生 121
6.4繼承設計 124
6.5重載、隱藏與覆蓋 126
6.6構造函式、析構函式與拷貝
賦值運算符 127
6.7處理命令行參數 129
第Ⅱ部分高級編程
第7章庫 139
7.1代碼容器 140
7.2重用其他庫 141
7.3組織庫:依賴管理 142
7.4安裝庫:實驗室練習 145
7.5框架與組件 146
第8章設計模式簡介 149
8.1目錄與檔案:QDir與
QFileInfo 150
8.2Visitor模式 151
8.3使用繼承來定製Visitor 153
第9章QObject 159
9.1QObject的子對象管理 161
9.2組合模式:父對象與子對象 163
9.3QApplication與事件循環 166
9.3.1布局:初觀 168
9.3.2連線到槽 169
9.3.3信號與槽 170
9.4Q_OBJECT與moc:一覽表 174
9.5值與對象 175
9.6tr()與國際化 176
第10章范型與容器 179
10.1范型與模板 180
10.1.1函式模板 180
10.1.2類模板 181
10.2容器 184
10.3管理容器、組合與聚合 185
10.4隱式共享類 188
10.5范型、算法和運算符 189
10.6serializer模式 191
10.7分類映射示例 193
第11章QtGUI部件 199
11.1部件分類 200
11.2QMainWindow和QSettings 201
11.3對話框 204
11.4圖像與資源 208
11.5部件的布局 211
11.5.1Spacing、Stretching和
Struts 214
11.5.2在布局之間移動部件 215
11.6QActions、QMenus和
QMenuBars 219
11.7QActions、QToolbars和
QActionGroups 221
11.8區域與QDockWidgets 228
11.9QStringList的視圖 229
第12章並行 233
12.1QProcess與進程控制 234
12.1.1進程與環境 236
12.1.2Qonsole:在Qt中編寫
一個Xterm 239
12.1.3帶有鍵盤事件的
Qonsole 241
12.2執行緒與QThread 244
12.2.1QPixmap和Qthread
直觀演示例子:電影
播放器 245
12.2.2帶有QTimer的電影
播放器 248
12.2.3多執行緒、佇列和Loggers
的例子:Giant 250
12.2.4執行緒安全與QObjects 256
12.3總結:QProcess和QThread 257
第13章驗證與正則表達式 259
13.1驗證器 260
13.2正則表達式 261
13.2.1正則表達式語法 262
13.2.2正則表達式:電話號碼
識別 264
13.3正則表達式驗證 267
第14章解析XML 271
14.1QtXML模組 274
14.2事件驅動解析 275
14.3XML、樹型結構和DOM 278
14.3.1Visitor模式:DOM
樹遍歷 280
14.3.2使用DOM生成XML 283
第15章元對象、性質和反射編程 289
15.1反模式 290
15.2QMetaObject:MetaObject
模式 291
15.3類型識別與qobject_cast 292
15.4Q_PROPERTY宏:描述
QObject性質 294
15.5QVariant類:訪問性質 297
15.6DataObject:QObject的
一個擴展 299
15.7性質容器:PropsMap 301
第16章更多設計模式 303
16.1創建型模式 304
16.1.1抽象工廠 305
16.1.2抽象工廠和庫 306
16.1.3qApp和Singleton模式 308
16.1.4創建規則和友元函式
(友元函式的真正用處) 309
16.1.5使用工廠的好處 312
16.2Serializer模式回顧 315
16.2.1導出到XML 317
16.2.2通過抽象工廠導入對象 318
16.3Fa?ade模式 322
16.3.1實用Fa?ade 325
16.3.2智慧型指針:auto_ptr 325
16.3.3FileTagger:Fa?ade示例 326
第17章模型與視圖 331
17.1M-V-C:控制器 332
17.2動態表單模型 333
17.2.1表單模型 336
17.2.2表單視圖 338
17.2.3未預見的類型 340
17.2.4控制Actions 341
17.2.5DateObject表單模型 343
17.3Qt4模型和視圖 347
17.4表模型 348
17.5樹模型 354
第18章QtSQL類 359
18.1MySQL簡介 360
18.2查詢與結果集合 363
18.3資料庫模型 364
第Ⅲ部分C++語言參考
第19章類型與表達式 369
19.1運算符 370
19.2邏輯表達式的估值 373
19.3枚舉 373
19.4有符號與無符號整數類型 375
19.5標準表達式轉換 377
19.6顯式類型轉換 378
19.7使用ANSIC++類型轉換進行安全類型轉換 379
19.7.1static_cast與const_cast 379
19.7.2reinterpret_cast 382
19.7.3不使用C語言風格的類型轉換的原因 383
19.8運行時類型識別(RTTI) 383
19.9成員選擇運算符 385
第20章作用域類與存儲類 391
20.1聲明與定義 392
20.2標識符作用域 393
20.2.1標識符的默認作用域小結 394
20.2.2檔案作用域與塊作用域及操作符:: 395
20.3存儲類 397
20.4名字空間 400
20.4.1匿名名字空間 402
20.4.2開放的名字空間 402
20.4.3名字空間、靜態對象與
extern 403
第21章語句與控制結構 405
21.1語句 406
21.2選擇語句 406
21.3循環 409
21.4異常 411
21.4.1異常處理 411
21.4.2異常類型 411
21.4.3拋出事件 412
21.4.4try與catch 415
21.4.5再談throw 419
21.4.6重新拋出的異常 420
21.4.7異常表達式 422
第22章記憶體訪問 427
22.1指針的“病理學” 428
22.3記憶體訪問概要 432
22.4數組 432
22.5指針算術操作 433
22.6數組、函式和返回值 434
22.7幾種不同的數組 436
22.8有效指針操作 436
22.9new操作失敗的處理方法 438
22.9.2使用set_new_handler和bad_alloc 440
22.9.3檢測null:測試new失敗的更新方法 441
22.10本章小結 442
第23章繼承詳述 445
23.1虛函式表指針和虛函式表 446
23.2多態和虛析構函式 448
23.3多重繼承 450
23.3.1多重繼承的語法 450
23.3.2帶抽象接口的多重繼承 452
23.3.3解決多重繼承衝突 453
23.4public、protected和private派生 456
第24章其他相關話題 459
24.1帶有變長參數列表的函式 460
24.2資源共享 461
第Ⅳ部分編程作業
第25章MP3點唱機作業 467
25.1數據模型:Mp3File 469
25.2Visitor:生成播放列表 470
25.3Preference:一個枚舉類型 471
25.4重用id3lib 473
25.5PlayListModel序列化 475
25.6測試Mp3File相關類 475
25.7簡單查詢和過濾器 476
25.8Mp3PlayerView 478
25.9模型和視圖:PlayList 479
25.10源選擇器 479
25.11持久設定 481
25.12給FileTagger編輯表格視圖 481
25.13資料庫視圖 482
第Ⅴ部分附錄
附錄AC++保留的關鍵字 487
附錄B標準頭檔案 489
附錄C開發環境 491
C.1用於#including檔案的預處理器 491
C.2連結器 493
C.3調試 496
C.3.1建立一個可調試的目標 497
C.3.2gdb快速入門 497
C.3.3查找內在錯誤 499
C.4Qt助手和設計器 501
C.5開源IDE和開發工具 502
C.5.1UML建模工具 504
C.5.2jEdit 504
參考文獻 507