作為一門廣為人知的編程語言,C++已經誕生30多年了,這期間也出現(xiàn)并流行過許多種編程語言,但是C++是經得起考驗的。如此經典的編程語言,值得每一位編程領域的新人認真學習,也適合有經驗的程序員細細品味。
本書旨在通過全面細致的內容和代碼示例,帶領讀者更加全方位地認識C++語言。全書分為10章,由淺入深地介紹了C++的各項特性,包括C++語法、數據類型、指針、函數、類、面向對象特性、標準庫容器、字符串、診斷和調試等。本書涵蓋了C++11規(guī)范及相關的C++11標準庫,是全面學習C++編程的合適之選。
本書適合C++零基礎讀者,但是希望讀者有一些編程經驗。通過書中豐富、典型的代碼示例,讀者將快速把握C++的特性和編程技巧。
現(xiàn)在銷售的大多數C++圖書都是詳細地介紹了C++的基本知識和高級主題等,很少有介紹如何閱讀、理解C++項目的。本書會首先講解C++項目的結構,讓讀者了解如何閱讀C++項目。接著,又講解了C++的功能、類等知識,旨在讓讀者理解每一處知識的實際用處,便于讀者在應用中快速上手。
縱觀全書,其重點內容是內存和指針。讀者將了解如何分配和訪問內存,并能夠編寫不泄漏內存的代碼。最后,讀者將學習C++類,并對面向對象編程和多態(tài)技術有一個初步了解。
Richard Grimes有25年C++編程經驗,曾經致力于汽車制造業(yè)遠程設備的金融分析和科學控制等多個項目。他曾經在70多場微軟技術(其中包含C++和C#)的國際會議上發(fā)布重要講話,共編寫了8本書,在編程期刊上發(fā)表了150多篇文章,主講了5期Microsoft培訓課程。Richard曾經連續(xù)10年(1998-2007)獲得微軟MVP認證。他對微軟.net框架和C++的深刻理解,以及他對新技術的坦率評估在業(yè)內享有盛譽。
第 1章 初識C++\t1
1.1 本章的主要內容\t1
1.2 C++是什么\t1
1.3 安裝Visual C++\t2
1.3.1 安裝配置\t2
1.3.2 下載安裝文件\t2
1.3.3 安裝Visual Studio\t3
1.3.4 注冊Microsoft賬號\t5
1.4 C++項目結構簡介\t6
1.4.1 編譯器\t6
1.4.2 鏈接代碼\t7
1.4.3 源文件\t8
1.4.4 預處理器和標識符\t14
1.4.5 依賴項\t18
1.5 編寫一個簡單的項目程序\t22
1.5.1 項目結構\t22
1.5.2 創(chuàng)建預編譯頭文件\t22
1.5.3 創(chuàng)建主文件\t23
1.5.4 輸入和輸出流\t24
1.5.5 time函數\t25
1.5.6 構建可執(zhí)行文件\t26
1.5.7 測試代碼\t27
1.5.8 修改項目\t27
1.6 小結\t27
第 2章 語言特性簡介\t28
2.1 編寫C++代碼\t28
2.1.1 空格\t28
2.1.2 格式化代碼\t29
2.1.3 編寫語句\t30
2.1.4 類型和變量\t32
2.1.5 常量和文字\t33
2.1.6 命名空間\t37
2.1.7 C++的變量作用域\t40
2.2 運算符\t42
2.3 執(zhí)行流控制\t49
2.3.1 條件語句\t49
2.3.2 選擇\t51
2.3.3 循環(huán)\t53
2.3.4 跳轉\t57
2.4 C++語言特性應用\t58
2.5 小結\t62
第3章 C++類型探秘\t63
3.1 內置類型\t63
3.1.1 整數類型\t64
3.1.2 浮點類型\t68
3.1.3 字符和字符串\t69
3.1.4 布爾類型\t75
3.1.5 void\t75
3.1.6 初始化器\t76
3.1.7 默認值\t77
3.1.8 無類型的變量聲明\t78
3.1.9 存儲類\t80
3.1.10 類型別名\t81
3.1.11 記錄類型中的聚合數據\t82
3.1.12 訪問運行時類型信息\t88
3.1.13 類型取值范圍\t89
3.2 類型之間的轉換\t89
3.2.1 類型轉換\t89
3.2.2 轉型\t91
3.3 C++類型應用\t94
3.4 小結\t101
第4章 內存、數組和指針\t102
4.1 C++中的使用內存\t102
4.1.1 C++指針語法\t102
4.1.2 空指針\t104
4.1.3 內存類型\t104
4.1.4 指針算術\t106
4.2 數組\t107
4.2.1 函數參數\t108
4.2.2 多維數組\t109
4.2.3 將多維數組傳遞給
函數\t110
4.2.4 字符數組\t111
4.3 在C++中使用指針\t113
4.3.1 訪問越界\t113
4.3.2 指針內存釋放\t113
4.3.3 指針轉型\t114
4.4 在代碼中分配內存\t115
4.4.1 分配單個對象\t116
4.4.2 分配對象數組\t116
4.4.3 處理內存分配異常\t117
4.4.4 new運算符的其他版本\t117
4.4.5 內存的生命周期\t118
4.4.6 Windows SDK和指針\t118
4.5 內存與C++標準庫\t120
4.6 引用\t122
4.6.1 常量引用\t123
4.6.2 返回引用\t123
4.6.3 臨時引用\t124
4.6.4 右值引用\t125
4.6.5 for循環(huán)區(qū)間和引用\t127
4.7 指針實戰(zhàn)\t128
4.7.1 創(chuàng)建項目\t129
4.7.2 將task對象添加到列表\t130
4.7.3 刪除任務列表\t131
4.7.4 遍歷任務列表\t132
4.7.5 插入元素\t133
4.8 小結\t135
第5章 函數\t136
5.1 定義C++函數\t136
5.1.1 聲明和定義函數\t136
5.1.2 聲明鏈接\t137
5.1.3 內聯(lián)化\t137
5.1.4 確定返回類型\t138
5.1.5 函數命名\t138
5.1.6 函數參數\t138
5.1.7 聲明異常\t139
5.1.8 函數體\t139
5.2 函數參數\t139
5.2.1 傳遞初始化器列表\t140
5.2.2 默認參數\t140
5.2.3 可變參數\t141
5.3 函數特性\t144
5.3.1 堆棧調用\t144
5.3.2 聲明調用規(guī)范\t144
5.3.3 遞歸\t145
5.3.4 函數重載\t146
5.3.5 函數和作用域\t146
5.3.6 刪除函數\t146
5.3.7 值傳遞和引用傳遞\t147
5.4 函數設計\t148
5.4.1 前置條件和后置條件\t148
5.4.2 不變量\t149
5.5 函數指針\t150
5.5.1 留意括號\t150
5.5.2 聲明函數指針\t150
5.5.3 函數指針用法\t151
5.6 模板函數\t152
5.6.1 定義模板\t153
5.6.2 模板參數值\t155
5.6.3 專一化模板\t157
5.6.4 可變參數模板\t157
5.7 運算符重載\t159
5.7.1 函數對象\t161
5.7.2 lambda表達式簡介\t163
5.8 函數在C++中的應用\t164
5.9 小結\t169
第6章 類\t170
6.1 編寫類\t170
6.1.1 重新審視結構體\t170
6.1.2 定義類\t171
6.1.3 定義類的行為\t171
6.1.4 創(chuàng)建對象\t174
6.1.5 聲明靜態(tài)成員\t181
6.1.6 嵌套類\t184
6.1.7 訪問常量對象\t184
6.2 對象和指針\t185
6.2.1 指向對象成員的指針\t185
6.2.2 運算符重載\t186
6.2.3 定義函數類\t188
6.2.4 定義轉換運算符\t191
6.2.5 資源管理\t192
6.2.6 編寫包裝器類\t192
6.2.7 智能指針\t193
6.3 模板\t198
6.4 類的應用\t200
6.5 小結\t203
第7章 面向對象編程簡介\t204
7.1 繼承和組合\t204
7.1.1 從一個類繼承\(zhòng)t204
7.1.2 方法重載和名稱隱藏\t206
7.1.3 指針和引用\t208
7.1.4 訪問層級\t209
7.1.5 繼承訪問層級\t211
7.1.6 多繼承\(zhòng)t211
7.2 多態(tài)簡介\t214
7.2.1 虛方法\t215
7.2.2 虛方法表\t217
7.2.3 多繼承和虛方法表\t218
7.2.4 虛方法、構造函數和析構函數\t219
7.2.5 容器和虛方法\t219
7.2.6 友元和繼承\(zhòng)t220
7.2.7 重載和關鍵字final\t221
7.2.8 虛擬繼承\(zhòng)t222
7.2.9 抽象類\t222
7.2.10 獲取類型信息\t224
7.2.11 智能指針和虛方法\t226
7.2.12 接口\t228
7.2.13 類之間的關系\t230
7.2.14 mixin類\t231
7.3 多態(tài)應用\t233
7.4 小結\t244
第8章 標準庫容器\t245
8.1 pair和tuple\t245
8.2 容器\t247
8.2.1 順序容器\t248
8.2.2 關聯(lián)容器\t252
8.2.3 專用容器\t255
8.2.4 迭代器\t256
8.3 算法\t261
8.3.1 元素迭代\t261
8.3.2 獲取信息\t263
8.3.3 容器比較\t263
8.3.4 修改元素\t264
8.3.5 查找元素\t266
8.3.6 元素排序\t267
8.4 數值庫\t268
8.4.1 編譯期運算\t268
8.4.2 復數\t270
8.5 標準庫應用\t271
8.6 小結\t276
第9章 字符串\t277
9.1 把字符串類當作容器\t277
9.1.1 獲取字符串信息\t278
9.1.2 修改字符串\t278
9.1.3 搜索字符串\t279
9.2 國際化\t281
9.3 字符串和數字\t284
9.3.1 將字符串轉換成數字\t284
9.3.2 將數字轉換成字符串\t284
9.4 stream類\t285
9.4.1 輸出浮點數\t285
9.4.2 輸出整數\t287
9.4.3 輸出時間和貨幣\t288
9.4.4 使用stream將數字轉換為字符串\t289
9.4.5 使用stream從字符串讀取數字\t290
9.5 正則表達式\t292
9.5.1 正則表達式定義\t292
9.5.2 標準庫類\t294
9.6 字符串應用\t298
9.6.1 創(chuàng)建項目\t299
9.6.2 處理標題子元素\t303
9.7 小結\t305
第 10章 診斷和調試\t306
10.1 準備工作\t306
10.1.1 不變性和條件編譯\t306
10.1.2 條件編譯\t307
10.1.3 pragma指令\t308
10.1.4 添加通知消息\t309
10.1.5 調試程序的編譯器開關\t311
10.1.6 預處理器標識符\t312
10.1.7 生成診斷信息\t314
10.1.8 斷言\t318
10.2 應用程序終止\t319
10.3 異常值\t320
10.3.1 獲取描述信息\t321
10.3.2 消息編譯器\t322
10.4 C++的異常\t323
10.4.1 異常規(guī)范\t323
10.4.2 C++異常語法\t323
10.4.3 標準exception類\t325
10.4.4 根據類型捕獲異常\t326
10.4.5 函數中的try語句塊\t328
10.4.6 系統(tǒng)異常\t329
10.4.7 異常嵌套\t330
10.4.8 結構化異常處理\t331
10.4.9 編譯器異常開關\t334
10.4.10 C++和SEH混合異常處理\t334
10.4.11 編寫異常安全的類\t336
10.5 小結\t337