Visual C++ 2012入門經典

Visual C++ 2012入門經典

讀者可以使用Microsoft公司最新的應用程式開發系統Visual Studio 2012,成為優秀的C++程式設計師。本書旨在講述C++程式設計語言,然後講述如何運用C++語言開發自己的Windows應用程式。在此過程中,讀者將了解這一最新Visual C++版本所提供的很多激動人心的新功能。

基本介紹

  • 書名:Visual C++ 2012入門經典(第6版)
  • 作者:(美) 霍爾頓(Horton, I.) 
  • 原版名稱:Ivor Horton's Beginning Visual C++ 2012
  • 譯者:蘇正泉、李文娟
  • ISBN:9787302319009
  • 頁數:752
  • 定價:98.00元
  • 出版社:清華大學出版社
  • 出版時間:2013-5
內容介紹,作品目錄,作者介紹,

內容介紹

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應用程式

作品目錄

目 錄
第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.3 Windows編程概念 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.1 C++程式結構 21
2.1.1 main()函式 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.6 C++中的基本類型 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.5 C++中的計算 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.7 AUTO關鍵字 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.10 lvalue和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.1 if語句 80
3.1.2 嵌套的if語句 81
3.1.3 嵌套的if-else語句 85
3.1.4 邏輯運算符和表達式 87
3.1.5 條件運算符 89
3.1.6 switch語句 91
3.1.7 無條件轉移 94
3.2 重複執行語句塊 95
3.2.1 循環的概念 95
3.2.2 for循環的變體 97
3.2.3 while循環 104
3.2.4 do-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.5 sizeof操作符 132
4.2.6 常量指針和指向常量的指針 134
4.2.7 指針和數組 136
4.3 動態記憶體分配 142
4.3.1 堆的別名——空閒存儲器 142
4.3.2 new和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.4 rvalue引用 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.6 rvalue引用形參 174
5.2.7 main()函式的實參 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.4 MFC中的異常處理 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.1 C++中的結構 229
7.1.1 結構的概念 230
7.1.2 定義結構 230
7.1.3 初始化結構 230
7.1.4 訪問結構的成員 231
7.1.5 伴隨結構的智慧型感知幫助 234
7.1.6 RECT結構 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.6 this指針 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.4 STL中的函式對象 418
10.5 STL容器範圍 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.12 tuple< >類模板 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.1 fill() 489
10.10.2 replace() 489
10.10.3 find() 489
10.10.4 transform() 490
10.11 類型特質和靜態斷言 491
10.12 λ表達式 492
10.12.1 capture子句 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.1 Windows編程基礎 503
11.1.1 視窗的元素 504
11.1.2 Windows程式與作業系統 505
11.1.3 事件驅動型程式 505
11.1.4 Windows訊息 506
11.1.5 Windows API 506
11.1.6 Windows數據類型 506
11.1.7 Windows程式中的符號 507
11.2 Windows程式的結構 508
11.2.1 WinMain()函式 509
11.2.2 訊息處理函式 519
11.3 MFC 524
11.3.1 MFC表示法 524
11.3.2 MFC程式的組織方式 525
11.4 小結 528
11.5 本章主要內容 528
第12章 使用MFC編寫Windows程式 531
12.1 MFC的文檔/視圖概念 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.2 MFC 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.2 Windows圖形設備界面 574
14.2 MFC的繪圖機制 576
14.2.1 應用程式中的視圖類 576
14.2.2 CDC類 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.1 Sketcher應用程式的缺陷 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.2 CString類 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.3 Windows Runtime的概念 709
18.3.1 WinRT名稱空間 709
18.3.2 WinRT對象 709
18.4 C++ COMPONENT EXTENSIONS
(C++/CX) 710
18.4.1 C++/CX名稱空間 710
18.4.2 定義WinRT類類型 711
18.4.3 Ref類類型的變數 713
18.4.4 訪問ref類對象的成員 713
18.4.5 事件處理函式 714
18.4.6 轉換ref類引用的類型 714
18.5 XAML 714
18.5.1 XAML元素 715
18.5.2 XAML中的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

作者介紹

作者介紹:
作 者 簡 介
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”學位(等同於計算機科學工程的科學碩士學位)。此後,他以優異成績獲得了同一所大學的人工智慧碩士學位,並開始供職於一家大型軟體諮詢公司。他在西門子和諾基亞西門子通信公司為大型電信運營商開發運行於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++用戶組的創始人和CodeGuru論壇的活躍分子。

熱門詞條

聯絡我們