标准C++开发入门与编程实践
20世紀(jì)80年代,Bjarne Stroustrup發(fā)明并實(shí)現(xiàn)了C++語言。一開始C++語言只是作為C語言的增強(qiáng)版(C with Classes)出現(xiàn)的,但是隨著C++編程技術(shù)的發(fā)展,虛函數(shù)、運(yùn)算符重載、多重繼承、模板、異常、RTTI、名字空間等新的特性逐漸被加入C++。由此,1998年國(guó)際標(biāo)準(zhǔn)組織(ISO)正式頒布C++程序設(shè)計(jì)語言的國(guó)際標(biāo)準(zhǔn)ISO/IEC 14882?1998,即標(biāo)準(zhǔn)C++語言。
在OOP(面向?qū)ο缶幊?#xff09;理論盛行的年代(其實(shí)也就是10年之前),幾乎所有的C++教材,都在宣揚(yáng)著一種論調(diào):“C++是C的一個(gè)超集”,以此宣傳C++的易學(xué)性和親和力。實(shí)際上,這種說法在漸漸地發(fā)生改變。以Standley Lippman所著的《C++ Primer》一書為首的更多的言論認(rèn)為,就目前學(xué)習(xí)C++而言,可以認(rèn)為它是一門獨(dú)立的語言。它兼容C語言,但是并不依賴C語言,我們完全可以不學(xué)習(xí)C語言,而直接學(xué)習(xí)C++語言。也就是說,閱讀本書的讀者,不必?fù)?dān)心自己是否熟悉C語言。
C++語言發(fā)展至今,歷受Java、C#語言的沖擊,其優(yōu)勢(shì)及應(yīng)用領(lǐng)域則變得愈來愈清晰明朗。C++語言目前仍然是專業(yè)編程人員的首選語言之一。但是C++語言是一門很復(fù)雜的語言。正因?yàn)槿绱?#xff0c;很多程序員仍然固執(zhí)地認(rèn)為:C++是唯一的真正的編程語言;很多學(xué)校仍然選擇C++作為程序設(shè)計(jì)的第一門語言。這就要求C++初學(xué)者必須掌握合理的學(xué)習(xí)方法和正確的思維習(xí)慣,同時(shí)要保持足夠的信心和耐心,才能真正學(xué)好C++語言。
ISO/IEC 14882?1998確立了C++的標(biāo)準(zhǔn),遺憾的是,由于C++語言過于復(fù)雜,以及它經(jīng)歷了多年的演變,幾乎沒有一種編譯器100%的完全符合標(biāo)準(zhǔn)。可喜的是,各家編譯器也在努力提高對(duì)C++標(biāo)準(zhǔn)的兼容性。這就意味著,采用標(biāo)準(zhǔn)C++,可以在最大程度上使編寫的代碼具有可移植性;同樣的代碼,可以在超級(jí)計(jì)算機(jī)的分布式計(jì)算環(huán)境中和某個(gè)嵌入式系統(tǒng)中一樣得以編譯和運(yùn)行。因此,當(dāng)程序員看到一個(gè)有用的C++類庫的時(shí)候,他的第一個(gè)問題會(huì)是:它是基于標(biāo)準(zhǔn)C++編寫的嗎?同樣的,當(dāng)讀者看到一本新的C++圖書上市時(shí),他的第一個(gè)問題會(huì)是:這本書介紹的是標(biāo)準(zhǔn)的C++嗎?
本書介紹的是標(biāo)準(zhǔn)的C++,其中大部分代碼都在Microsoft Visual C++.NET 2003和Dev C++4.9.9.2中得以編譯與運(yùn)行。Visual C++.NET和Dev C++是Windows下兩款優(yōu)秀的C++開發(fā)工具,據(jù)稱它們采用的C++編譯器對(duì)C++標(biāo)準(zhǔn)的支持率分別達(dá)到98%和96%。
歸結(jié)起來,本書具有如下特色:
- 注重知識(shí)的完整性。本書力求完整、系統(tǒng)地介紹C++的語法知識(shí)。書中同時(shí)安排了部分選讀內(nèi)容,并在節(jié)標(biāo)題上以星號(hào)“*”標(biāo)出,希望讀者朋友們能夠通過這些部分的閱讀加深對(duì)前面知識(shí)的理解。 注重知識(shí)的趣味性。很多教材在保持了C++的嚴(yán)謹(jǐn)性的同時(shí)也拒絕了讀者,特別是拒絕了我們可愛的C++初學(xué)者。初學(xué)者的耐心和信心很容易受到打擊,本書努力讓讀者在失去耐心之前讀完所有的C++知識(shí)。
- 注重C++的標(biāo)準(zhǔn)性。如上所述,標(biāo)準(zhǔn)性是本書一直努力遵循的原則。為了便于讀者的理解,書中一些章節(jié)的某些編譯器對(duì)C++標(biāo)準(zhǔn)的實(shí)現(xiàn)做了部分的猜測(cè),希望讀者朋友能夠通過這些內(nèi)容加深對(duì)C++的理解,但千萬不要就此認(rèn)為:所有的C++編譯器都將采用同樣的實(shí)現(xiàn)。
- 注重編程的實(shí)踐性。本書的每一章節(jié),甚至每一知識(shí)點(diǎn),都配有格式化的代碼示例。此外,本書第6篇特意安排了“C++編程實(shí)踐”,介紹C++的標(biāo)準(zhǔn)庫函數(shù)及實(shí)際操作指南,并結(jié)合一個(gè)《西游記》游戲的模擬程序演示了各種語法知識(shí)的綜合運(yùn)用,以方便讀者學(xué)習(xí)。 本書內(nèi)容系統(tǒng)、完整,共分為6篇24章。
第1篇:C++快速瀏覽篇。本篇介紹C++的語言背景和計(jì)算機(jī)數(shù)值系統(tǒng)知識(shí),包括了解C++語言、計(jì)算機(jī)的數(shù)值表示和初識(shí)C++程序;結(jié)合示例工程HelloWorld,詳細(xì)介紹C++編程的具體步驟,以及C++語言的基本元素,讓讀者對(duì)C++語言有個(gè)整體上的認(rèn)識(shí)。 第2篇:C++數(shù)據(jù)表達(dá)篇。本篇介紹C++中的數(shù)據(jù)類型,即如何將現(xiàn)實(shí)中的數(shù)據(jù)表達(dá)出來,包括C++基礎(chǔ)語法、數(shù)組與字符串(array & string)、指針與引用(pointer & reference)和自定義數(shù)據(jù)類型(UDT)等。 第3篇:C++過程設(shè)計(jì)篇。本篇介紹C++中的過程設(shè)計(jì),即如何將靜態(tài)的數(shù)據(jù)流動(dòng)起來,實(shí)現(xiàn)程序的邏輯,包括C++流程控制、C++函數(shù)和預(yù)處理(preprocessing)等。 第4篇:C++面向?qū)ο缶幊唐1酒榻BC++中的面向?qū)ο缶幊?#xff08;OOP),即類的使用方法,包括C++類(class)、類的特殊函數(shù)、繼承(inheritance)和多態(tài)(polymorphism)等。 第5篇:C++高級(jí)特性篇。本篇介紹C++的高級(jí)特性,讀者一旦掌握了這些高級(jí)特性,就可以更好地實(shí)現(xiàn)C++編程,包括模板(template)、C++異常處理(exception handling)、名字空間與域和運(yùn)行時(shí)類型信息(RTTI)等。 第6篇:C++編程實(shí)踐篇。本篇結(jié)合C++的實(shí)際應(yīng)用介紹C++的標(biāo)準(zhǔn)庫函數(shù)以及實(shí)際操作指南,包括C++標(biāo)準(zhǔn)庫、C++流、STL容器(STL container)、泛型算法(generic algorithm)、C++實(shí)踐指南和綜合實(shí)踐:《西游記》游戲模擬等。 本書具有由淺入深、通俗易懂和注重實(shí)踐等特點(diǎn)。本書由白喬編著,何洪波、楊漢瑋、沈良忠參與了部分章節(jié)編寫,并對(duì)內(nèi)容安排提出了很好的意見和建議,在此一并感謝。希望讀者能夠通過本書的閱讀,對(duì)標(biāo)準(zhǔn)C++有清晰的認(rèn)識(shí),并掌握真正實(shí)用的編程思想和方法,從而能在C++編程路上走得更遠(yuǎn),這是我們最大的期望。
本書適合于沒有或者缺乏C++程序設(shè)計(jì)經(jīng)驗(yàn)的初學(xué)者作為標(biāo)準(zhǔn)C++語言的自學(xué)教材,同時(shí)也適合已掌握C++基礎(chǔ)編程技術(shù)、需要提高C++實(shí)踐能力(包括對(duì)標(biāo)準(zhǔn)庫函數(shù)、STL、泛型算法的使用),以及對(duì)標(biāo)準(zhǔn)C++感興趣的程序員進(jìn)行閱讀。
由于成書倉促,書中紕漏和欠缺之處在所難免,特別是關(guān)于C++標(biāo)準(zhǔn)之實(shí)現(xiàn)、C++實(shí)踐指南等開放性的話題,言語之中有失偏頗之處,還望讀者不吝賜教和批評(píng)。聯(lián)系信箱:bluejoe2008@gmail.com,詳情請(qǐng)垂詢http://books.vcer.net/stdcpp。
目錄:
第1篇? C++快速瀏覽
?
第1章? 了解C++語言? ? 3
1.1? 編程語言? ? 4
1.1.1? 機(jī)器語言? ? 4
1.1.2? 匯編語言? ? 4
1.1.3? 高級(jí)語言? ? 5
1.2? C++發(fā)展簡(jiǎn)史? ? 6
1.3? C++開發(fā)環(huán)境? ? 7
1.3.1? C++編譯器? ? 7
1.3.2? C++標(biāo)準(zhǔn)與編譯器? ? 8
1.3.3? C++開發(fā)環(huán)境? ? 9
1.3.4? 開發(fā)環(huán)境的選擇? ? 12
第2章? 計(jì)算機(jī)的數(shù)值表示? ? 15
2.1? 進(jìn)制系統(tǒng)? ? 16
2.1.1? 十進(jìn)制? ? 16
2.1.2? 二進(jìn)制? ? 16
2.1.3? 八進(jìn)制和十六進(jìn)制? ? 17
2.2? 數(shù)值的表示? ? 19
2.2.1? 整數(shù)的表示? ? 19
2.2.2? 負(fù)數(shù)的表示? ? 19
2.2.3? 整數(shù)的表示范圍? ? 20
2.2.4? 浮點(diǎn)數(shù)的表示? ? 20
2.2.5? 觀察數(shù)值的二進(jìn)制表示*? ? 22
2.3? 字符的表示? ? 23
2.3.1? ASCII碼? ? 23
2.3.2? 漢字的編碼? ? 25
2.3.3? UNICODE編碼? ? 26
2.3.4? 觀察字符的二進(jìn)制表示*? ? 27
2.3.5? 字符與字體? ? 29
2.3.6? 鍵盤與輸入法? ? 29
第3章? 初識(shí)C++程序? ? 33
3.1? 開始C++編程? ? 34
3.1.1? C++程序的開發(fā)流程? ? 34
3.1.2? 文件與工程(項(xiàng)目)? ? 35
3.2? 在Dev-C++中開發(fā)HelloWorld? ? 37
3.2.1? 編輯HelloWorld? ? 38
3.2.2? 編譯連接HelloWorld? ? 38
3.2.3? 運(yùn)行HelloWorld? ? 39
3.3? 在VC 2003中開發(fā)HelloWorld? ? 39
3.3.1? 編輯HelloWorld? ? 40
3.3.2? 編譯連接Hello World? ? 42
3.3.3? 運(yùn)行HelloWorld? ? 43
3.4? 可能遇到的問題? ? 43
3.5? 理解HelloWorld? ? 45
3.5.1? main函數(shù)? ? 45
3.5.2? 函數(shù)? ? 45
3.5.3? 對(duì)象? ? 46
3.5.4? 頭文件? ? 46
3.5.5? 名字空間? ? 46
3.5.6? 標(biāo)準(zhǔn)輸入輸出? ? 47
3.5.7? 編譯器的行為? ? 48
第2篇? C++數(shù)據(jù)表達(dá)
第4章? C++基礎(chǔ)語法? ? 51
4.1? 理解c=2πr? ? 52
4.2? 注釋? ? 53
4.3? 標(biāo)識(shí)符? ? 53
4.3.1? 命名規(guī)則? ? 53
4.3.2? 關(guān)鍵字? ? 54
4.4? 數(shù)與類型? ? 55
4.5? 基本類型? ? 55
4.5.1? 整型? ? 56
4.5.2? 浮點(diǎn)型? ? 56
4.5.3? 布爾型? ? 57
4.5.4? 字符型? ? 57
4.5.5? 基本類型的字節(jié)長(zhǎng)度*? ? 57
4.6? 字面常量? ? 58
4.6.1? 整型常量? ? 59
4.6.2? 浮點(diǎn)型常量? ? 59
4.6.3? 布爾型常量? ? 59
4.6.4? 字符型常量? ? 60
4.6.5? 字符串常量? ? 60
4.6.6? 字面常量的類型*? ? 61
4.6.7? 變量? ? 62
4.7? 語句? ? 62
4.7.1? 表達(dá)式? ? 62
4.7.2? 語句? ? 62
4.7.3? 聲明語句? ? 62
4.7.4? 賦值語句? ? 63
4.7.5? 初始化語句? ? 63
4.7.6? 使用調(diào)試器觀察變量值*? ? 64
4.8? 操作符? ? 67
4.8.1? 賦值操作符? ? 67
4.8.2? 算術(shù)操作符? ? 68
4.8.3? 關(guān)系操作符? ? 69
4.8.4? 邏輯操作符? ? 69
4.8.5? 條件操作符? ? 70
4.8.6? 位操作符? ? 70
4.8.7? 觀察二進(jìn)制位操作*? ? 71
4.8.8? 復(fù)合賦值操作符? ? 72
4.8.9? 逗號(hào)操作符? ? 73
4.8.10? sizeof操作符? ? 74
4.8.11? typeid操作符? ? 74
4.8.12? 操作符的優(yōu)先級(jí)? ? 75
4.9? 類型轉(zhuǎn)換? ? 76
4.9.1? 隱式轉(zhuǎn)換? ? 76
4.9.2? 顯式轉(zhuǎn)換? ? 76
4.9.3? 算術(shù)轉(zhuǎn)換*? ? 77
第5章? 數(shù)組與字符串? ? 79
5.1? 數(shù)組? ? 80
5.1.1? 數(shù)組的概念? ? 80
5.1.2? 內(nèi)存中的數(shù)組*? ? 80
5.1.3? 數(shù)組的初始化? ? 81
5.1.4? 數(shù)組元素的訪問? ? 82
5.1.5? 安全使用數(shù)組下標(biāo)*? ? 82
5.1.6? 多維數(shù)組? ? 83
5.2? 字符串? ? 85
5.2.1? 傳統(tǒng)的字符串? ? 85
5.2.2? 安全的使用字符串*? ? 86
5.2.3? std::string? ? 86
第6章? 指針與引用? ? 89
6.1? 指針? ? 90
6.1.1? 指針的概念? ? 90
6.1.2? 取址操作符? ? 91
6.1.3? 取值操作符? ? 91
6.1.4? 深入理解指針*? ? 91
6.1.5? 指針的比較? ? 92
6.1.6? 指針的加減? ? 93
6.1.7? 理解指針的運(yùn)算*? ? 93
6.1.8? 數(shù)組與指針? ? 95
6.1.9? 指針的指針? ? 96
6.1.10? 指針數(shù)組? ? 96
6.2? 引用? ? 96
6.2.1? 引用的概念? ? 96
6.2.2? 理解引用*? ? 97
6.3? 動(dòng)態(tài)內(nèi)存分配? ? 98
6.3.1? new? ? 98
6.3.2? delete? ? 98
6.3.3? 數(shù)組的內(nèi)存分配? ? 99
第7章? 自定義數(shù)據(jù)類型? ? 101
7.1? 結(jié)構(gòu)? ? 102
7.1.1? 結(jié)構(gòu)的定義? ? 102
7.1.2? 定義結(jié)構(gòu)變量? ? 103
7.1.3? 結(jié)構(gòu)的數(shù)據(jù)成員? ? 103
7.1.4? 結(jié)構(gòu)成員的引用? ? 103
7.1.5? 結(jié)構(gòu)的初始化? ? 104
7.1.6? 位域? ? 105
7.2? 聯(lián)合? ? 106
7.2.1? 聯(lián)合的定義? ? 106
7.2.2? 使用聯(lián)合? ? 107
7.3? 枚舉? ? 108
7.3.1? 枚舉定義? ? 108
7.3.2? 枚舉與int? ? 109
7.4? typedef? ? 109
7.5? 數(shù)據(jù)類型修飾符? ? 110
7.5.1? const? ? 110
7.5.2? volatile? ? 112
第3篇? C++過程設(shè)計(jì)
第8章? C++流程控制? ? 115
8.1? 判斷? ? 116
8.1.1? if? ? 116
8.1.2? 語句塊*? ? 116
8.1.3? if…else? ? 116
8.1.4? if…else if…else? ? 117
8.1.5? 流程圖*? ? 118
8.2? 分支? ? 118
8.3? 循環(huán)? ? 121
8.3.1? while? ? 121
8.3.2? do…while? ? 124
8.3.3? for? ? 125
8.4? 跳轉(zhuǎn)語句? ? 126
8.4.1? 嵌套循環(huán)? ? 126
8.4.2? 使用break中止循環(huán)? ? 127
8.4.3? 使用break中止分支? ? 128
8.4.4? continue? ? 128
8.4.5? goto? ? 129
8.4.6? 合理使用goto語句*? ? 130
第9章? C++函數(shù)? ? 133
9.1? 函數(shù)? ? 134
9.1.1? 函數(shù)? ? 134
9.1.2? 函數(shù)調(diào)用? ? 134
9.1.3? 使用調(diào)試器觀察函數(shù)的調(diào)用*? ? 135
9.1.4? 函數(shù)參數(shù)? ? 137
9.1.5? 返回值? ? 138
9.2? 函數(shù)原型? ? 139
9.2.1? 函數(shù)原型(function prototype)? ? 139
9.2.2? main()函數(shù)? ? 141
9.2.3? 定義帶參數(shù)的main()函數(shù)*? ? 141
9.2.4? 默認(rèn)參數(shù)? ? 142
9.2.5? 可變參數(shù)*? ? 144
9.2.6? 內(nèi)聯(lián)函數(shù)? ? 146
9.3? 函數(shù)重載? ? 147
9.3.1? 函數(shù)的重載? ? 147
9.3.2? 重載函數(shù)的調(diào)用? ? 148
9.3.3? 安全連接? ? 149
9.3.4? 名字重組*? ? 150
9.4? 遞歸函數(shù)? ? 151
9.4.1? 遞歸函數(shù)? ? 151
9.4.2? 使用調(diào)試器觀察函數(shù)的遞歸調(diào)用*? ? 154
9.5? 函數(shù)與指針? ? 155
9.5.1? 指向函數(shù)的指針? ? 155
9.5.2? 理解函數(shù)指針*? ? 156
9.5.3? 函數(shù)與值傳遞? ? 157
第10章? 預(yù)處理? ? 159
10.1? 預(yù)處理指令? ? 160
10.2? 宏指令? ? 161
10.2.1? 宏? ? 161
10.2.2? 帶參數(shù)的宏? ? 162
10.2.3? 宏與常量、函數(shù)*? ? 163
10.2.4? #操作符? ? 164
10.2.5? ##操作符? ? 164
10.2.6? 取消宏? ? 164
10.2.7? C++預(yù)定義宏? ? 165
10.3? 條件編譯指令? ? 165
10.3.1? #if…#endif? ? 165
10.3.2? #else? ? 166
10.3.3? #elif? ? 166
10.3.4? #if defined和#if !defined? ? 167
10.3.5? #ifdef和#ifndef? ? 167
10.4? 文件包含指令? ? 168
10.4.1? #include? ? 168
10.4.2? 合理使用頭文件? ? 169
10.5? 其他標(biāo)準(zhǔn)指令? ? 170
10.5.1? #error? ? 170
10.5.2? #line? ? 171
10.5.3? #pragma? ? 171
第4篇? C++面向?qū)ο缶幊?
第11章? C++的類? ? 175
11.1? 類與對(duì)象? ? 176
11.1.1? 對(duì)象? ? 176
11.1.2? 類? ? 176
11.2? 類的設(shè)計(jì)? ? 177
11.2.1? 類的定義? ? 177
11.2.2? 對(duì)象的定義? ? 178
11.2.3? 數(shù)據(jù)成員的訪問? ? 178
11.2.4? 成員訪問控制? ? 178
11.2.5? 成員函數(shù)? ? 179
11.2.6? 內(nèi)聯(lián)成員函數(shù)? ? 181
11.2.7? 成員函數(shù)的重載? ? 182
11.2.8? this指針? ? 182
11.2.9? 內(nèi)存中的類*? ? 183
11.3? 類的討論? ? 187
11.3.1? 類與結(jié)構(gòu)? ? 187
11.3.2? 抽象性? ? 187
11.3.3? 封裝性? ? 188
11.4? 類的組合? ? 191
11.4.1? 使用類的組合? ? 191
11.4.2? 類的聲明? ? 193
第12章? 類的特殊函數(shù)? ? 195
12.1? 構(gòu)造函數(shù)? ? 196
12.1.1? 構(gòu)造函數(shù)(constructor)? ? 196
12.1.2? 帶參數(shù)的構(gòu)造函數(shù)? ? 197
12.1.3? 初始值列表? ? 198
12.2? 成員初始值列表? ? 199
12.2.1? 使用成員初始值列表? ? 199
12.2.2? 對(duì)象成員初始化? ? 200
12.3? 析構(gòu)函數(shù)? ? 201
12.3.1? 析構(gòu)函數(shù)的定義? ? 201
12.3.2? 對(duì)象成員的構(gòu)造與析構(gòu)*? ? 202
12.4? 特殊構(gòu)造函數(shù)? ? 203
12.4.1? 轉(zhuǎn)換構(gòu)造函數(shù)? ? 204
12.4.2? explicit? ? 205
12.4.3? 拷貝構(gòu)造函數(shù)? ? 206
12.5? 操作符函數(shù)? ? 207
12.5.1? 操作符重載? ? 208
12.5.2? 一元操作符重載? ? 208
12.5.3? 二元操作符重載? ? 209
12.5.4? 全局操作符的重載? ? 210
12.5.5? 可重載的操作符? ? 212
12.5.6? 類型轉(zhuǎn)換函數(shù)? ? 213
12.6? const與mutable? ? 214
12.6.1? const? ? 214
12.6.2? mutable? ? 216
12.7? 友元? ? 217
12.7.1? 聲明某個(gè)函數(shù)為友元? ? 217
12.7.2? 聲明某個(gè)類的成員函數(shù) 為友元? ? 218
12.7.3? 聲明某個(gè)類為友元? ? 219
第13章? 繼承? ? 221
13.1? 類的繼承? ? 222
13.1.1? 繼承的概念? ? 222
13.1.2? 類的繼承? ? 223
13.1.3? 內(nèi)存中的派生類*? ? 224
13.1.4? protected? ? 226
13.1.5? 基類訪問控制? ? 227
13.2? 構(gòu)造與析構(gòu)? ? 228
13.2.1? 派生類的構(gòu)造? ? 228
13.2.2? 基類的初始化? ? 229
13.2.3? 默認(rèn)構(gòu)造函數(shù)? ? 230
13.2.4? 派生類的析構(gòu)? ? 230
13.3? 名字隱藏? ? 231
13.3.1? 數(shù)據(jù)成員的隱藏? ? 231
13.3.2? 成員函數(shù)的隱藏? ? 232
13.3.3? 理解隱藏? ? 233
第14章? 多態(tài)性? ? 235
14.1? 類型轉(zhuǎn)換? ? 236
14.1.1? 向上轉(zhuǎn)換? ? 236
14.1.2? 向下轉(zhuǎn)換? ? 236
14.2? 虛函數(shù)與多態(tài)? ? 237
14.2.1? 類型轉(zhuǎn)換帶來的問題? ? 237
14.2.2? 虛函數(shù)? ? 238
14.2.3? 虛函數(shù)的填充*? ? 239
14.2.4? 多態(tài)性? ? 239
14.2.5? 虛析構(gòu)函數(shù)? ? 240
14.2.6? 純虛函數(shù)? ? 241
14.2.7? 抽象類? ? 241
14.3? 多級(jí)繼承? ? 242
14.3.1? 多級(jí)繼承的使用? ? 242
14.3.2? 虛函數(shù)的多次填充*? ? 244
14.4? 多繼承? ? 245
14.4.1? 多繼承的使用? ? 245
14.4.2? 多繼承帶來的問題? ? 247
14.4.3? 虛擬繼承? ? 249
第5篇? C++高級(jí)特性
第15章? 模板? ? 253
15.1? 函數(shù)模板? ? 254
15.1.1? 函數(shù)模板的概念? ? 254
15.1.2? 模板參數(shù)與函數(shù)參數(shù)? ? 255
15.1.3? 函數(shù)模板的實(shí)例化? ? 256
15.1.4? 函數(shù)模板的重載? ? 256
15.1.5? 函數(shù)模板的特化*? ? 257
15.2? 類模板? ? 258
15.2.1? 類模板的概念? ? 258
15.2.2? 類模板的成員函數(shù)? ? 258
15.2.3? 包含多個(gè)參數(shù)的類模板? ? 259
15.2.4? 類模板的默認(rèn)參數(shù)? ? 260
第16章? C++異常處理? ? 263
16.1? 傳統(tǒng)的錯(cuò)誤處理? ? 264
16.2? 拋出異常? ? 268
16.3? 捕獲異常? ? 268
16.3.1? 使用catch捕獲異常? ? 269
16.3.2? 捕獲不同類型的異常? ? 271
16.3.3? 捕獲所有的異常? ? 272
16.3.4? 在catch塊拋出異常? ? 273
16.3.5? 未捕獲的異常? ? 273
16.3.6? 定制terminate()的行為*? ? 274
16.4? 對(duì)拋出異常的聲明? ? 275
第17章? 名字空間與域? ? 277
17.1? 名字空間? ? 278
17.1.1? 名字空間定義? ? 278
17.1.2? using聲明? ? 279
17.1.3? using指令? ? 279
17.1.4? 名字空間的別名? ? 279
17.2? 作用域? ? 279
17.3? 局部作用域? ? 280
17.3.1? 局部作用域的概念? ? 280
17.3.2? for語句的作用域? ? 280
17.3.3? case語句塊的作用域? ? 280
17.3.4? 函數(shù)的作用域? ? 281
17.4? 局部變量的存儲(chǔ)類型? ? 281
17.4.1? 自動(dòng)存儲(chǔ)類型? ? 281
17.4.2? 寄存器存儲(chǔ)類型? ? 282
17.4.3? 靜態(tài)存儲(chǔ)類型? ? 283
17.5? 名字空間域? ? 284
17.5.1? 全局域? ? 284
17.5.2? 外部存儲(chǔ)類型? ? 284
17.5.3? 文件域? ? 286
17.5.4? 名字空間域? ? 286
17.6? 類域? ? 286
17.6.1? 類域的概念? ? 286
17.6.2? static數(shù)據(jù)成員? ? 288
17.6.3? static成員函數(shù)? ? 290
17.7? 作用域的嵌套? ? 291
17.7.1? 語句塊的嵌套? ? 291
17.7.2? 名字空間的嵌套? ? 292
17.7.3? 類的嵌套? ? 292
17.7.4? 在語句塊中定義類? ? 293
17.7.5? 嵌套帶來的隱藏? ? 293
17.8? 對(duì)象的生命周期? ? 293
第18章? 運(yùn)行時(shí)類型信息? ? 297
18.1? 動(dòng)態(tài)類型的獲取? ? 298
18.1.1? typeid關(guān)鍵字? ? 298
18.1.2? type_info? ? 298
18.1.3? 打開RTTI開關(guān)*? ? 299
18.1.4? 獲取對(duì)象的動(dòng)態(tài)類型? ? 300
18.2? C++風(fēng)格的類型轉(zhuǎn)換? ? 301
18.2.1? 動(dòng)態(tài)類型轉(zhuǎn)換dynamic_cast? ? 301
18.2.2? 靜態(tài)類型轉(zhuǎn)換static_cast? ? 303
18.2.3? 再解釋類型轉(zhuǎn)換reinterpret_cast? ? 304
18.2.4? 常類型轉(zhuǎn)換const_cast? ? 304
第6篇? C++編程實(shí)踐
第19章? C++標(biāo)準(zhǔn)庫? ? 307
19.1? C++標(biāo)準(zhǔn)庫的組成? ? 308
19.2? 字符串庫<string>? ? 309
19.2.1? 字符串的構(gòu)造與賦值? ? 309
19.2.2? 字符串的連接? ? 309
19.2.3? 字符串的比較? ? 309
19.2.4? 字符串的下標(biāo)? ? 310
19.2.5? 子串? ? 310
19.2.6? 字符串的查找? ? 311
19.2.7? string與C-style字符串? ? 311
19.2.8? 空字符串? ? 312
19.3? 復(fù)數(shù)類<complex>? ? 313
19.3.1? 復(fù)數(shù)的構(gòu)造? ? 313
19.3.2? 復(fù)數(shù)的四則運(yùn)算? ? 313
19.3.3? 復(fù)數(shù)的操作函數(shù)? ? 313
19.4? 異常類<stdexcept>? ? 314
19.5? C標(biāo)準(zhǔn)庫? ? 316
19.5.1? assert宏? ? 317
19.5.2? 類型函數(shù)? ? 318
19.5.3? 數(shù)學(xué)函數(shù)? ? 318
19.5.4? 類型轉(zhuǎn)換函數(shù)? ? 319
19.5.5? 隨機(jī)數(shù)函數(shù)? ? 319
19.5.6? 可變參數(shù)處理? ? 320
19.5.7? 內(nèi)存操作函數(shù)? ? 321
19.5.8? 系統(tǒng)控制函數(shù)? ? 322
19.5.9? 字符串處理函數(shù)? ? 323
19.5.10? 時(shí)間處理函數(shù)? ? 324
第20章? C++流? ? 327
20.1? 輸入輸出流<iostream>? ? 328
20.1.1? 輸入輸出流? ? 328
20.1.2? 流操作符? ? 328
20.1.3? 格式化輸出函數(shù)? ? 329
20.1.4? 格式操縱符? ? 330
20.1.5? 流的輸出? ? 332
20.1.6? 緩沖輸出? ? 332
20.1.7? 流的輸入? ? 333
20.1.8? 狀態(tài)標(biāo)志*? ? 335
20.2? 標(biāo)準(zhǔn)輸入輸出流? ? 336
20.3? 文件流<fstream>? ? 337
20.3.1? 文件的打開和關(guān)閉? ? 338
20.3.2? 二進(jìn)制輸入輸出? ? 340
20.3.3? 定位文件位置? ? 341
20.4? 字符串流<sstream>? ? 342
20.4.1? ostringstream? ? 343
20.4.2? istringstream? ? 343
20.4.3? stringstream? ? 344
第21章? STL容器? ? 345
21.1? 標(biāo)準(zhǔn)模板庫? ? 346
21.1.1? STL的概念? ? 346
21.1.2? STL的組成? ? 348
21.1.3? STL的使用實(shí)例? ? 348
21.2? 容器? ? 350
21.2.1? STL容器? ? 350
21.2.2? 容器的模板參數(shù)? ? 351
21.2.3? 容器的比較? ? 352
21.2.4? 容器的賦值和交換? ? 352
21.2.5? operator []? ? 352
21.2.6? 指示器的獲取? ? 352
21.2.7? 元素的迭代訪問? ? 353
21.2.8? 容器的尺寸? ? 353
21.3? 向量? ? 353
21.3.1? 向量的構(gòu)造? ? 354
21.3.2? 向量元素的訪問? ? 354
21.3.3? 向量元素的添加? ? 355
21.3.4? 向量元素的刪除? ? 355
21.4? 列表? ? 355
21.4.1? 列表的構(gòu)造? ? 356
21.4.2? 列表元素的訪問? ? 356
21.4.3? 列表元素的添加? ? 356
21.4.4? 列表元素的刪除? ? 356
21.5? 雙端隊(duì)列? ? 357
21.5.1? 雙端隊(duì)列的構(gòu)造? ? 357
21.5.2? 雙端隊(duì)列元素的訪問? ? 357
21.5.3? 雙端隊(duì)列元素的添加? ? 357
21.5.4? 雙端隊(duì)列元素的刪除? ? 357
21.6? 容器適配器? ? 358
21.6.1? 棧? ? 358
21.6.2? 隊(duì)列? ? 358
21.6.3? 優(yōu)先級(jí)隊(duì)列? ? 359
21.7? 映射? ? 360
21.7.1? 映射的構(gòu)造? ? 360
21.7.2? 映射元素的訪問? ? 361
21.7.3? 映射元素的添加? ? 362
21.7.4? 映射元素的刪除? ? 362
21.7.5? 映射元素的查找? ? 362
21.7.6? 多重映射? ? 362
21.8? 集合? ? 363
21.8.1? 集合的構(gòu)造? ? 363
21.8.2? 集合元素的訪問? ? 364
21.8.3? 集合元素的添加? ? 364
21.8.4? 集合元素的刪除? ? 364
21.8.5? 集合元素的查找? ? 364
21.8.6? 多重集合? ? 365
21.9? 位集合? ? 365
21.9.1? 位集合的概念? ? 366
21.9.2? 位集合的構(gòu)造? ? 366
21.9.3? 位集合的輸出? ? 366
21.9.4? 位元素的操作? ? 366
21.9.5? 位集合的賦值與轉(zhuǎn)換? ? 367
21.9.6? 位集合的尺寸? ? 367
21.9.7? 位集合的比較? ? 367
21.9.8? 位集合的位操作? ? 368
第22章? 泛型算法? ? 369
22.1? 指示器? ? 370
22.1.1? 指示器的獲取? ? 370
22.1.2? 指示器的數(shù)據(jù)類型? ? 370
22.1.3? 指示器的迭代? ? 370
22.1.4? 迭代的方向*? ? 372
22.1.5? 指示器的迭代類型? ? 372
22.2? 指示器適配器? ? 373
22.2.1? 反向指示器? ? 373
22.2.2? 插入型指示器? ? 374
22.3? 函數(shù)對(duì)象? ? 374
22.4? 算法? ? 376
22.4.1? 查找算法? ? 377
22.4.2? 排序與通用整序算法? ? 378
22.4.3? 刪除和替換算法? ? 379
22.4.4? 排列組合算法? ? 380
22.4.5? 算術(shù)算法? ? 380
22.4.6? 生成和異變算法? ? 381
22.4.7? 關(guān)系算法? ? 381
22.4.8? 集合算法? ? 382
22.4.9? 堆算法? ? 383
第23章? C++實(shí)踐指南? ? 385
23.1? 提高代碼的可讀性? ? 386
23.1.1? 不要吝嗇注釋? ? 386
23.1.2? 不要吝嗇空白? ? 388
23.1.3? 愛惜標(biāo)識(shí)符? ? 390
23.1.4? 合理使用操作符函數(shù)? ? 391
23.1.5? 合理使用別名? ? 391
23.1.6? 合理使用跳轉(zhuǎn)語句? ? 392
23.2? 編寫笨的程序? ? 394
23.2.1? 書寫正常的表達(dá)式? ? 394
23.2.2? 使用bool類型進(jìn)行判斷? ? 395
23.2.3? 保證對(duì)象的初始化? ? 396
23.2.4? 盡量多寫一些if? ? 397
23.2.5? 不要再發(fā)明string類? ? 398
23.2.6? 使用標(biāo)準(zhǔn)C++? ? 399
23.3? 合理使用內(nèi)存? ? 399
23.3.1? C++中的內(nèi)存? ? 399
23.3.2? 內(nèi)存的非法訪問? ? 400
23.3.3? 內(nèi)存泄漏? ? 402
23.3.4? 內(nèi)存泄漏的檢測(cè)? ? 404
23.3.5? CMemory State? ? 405
23.3.6? 智能指針(auto_ptr)? ? 406
23.4? 合理使用OOP? ? 409
23.4.1? 合理封裝對(duì)象? ? 409
23.4.2? 對(duì)象拷貝的產(chǎn)生? ? 409
23.4.3? 對(duì)象的初始化? ? 412
23.4.4? 對(duì)象的賦值與初始化? ? 413
23.4.5? 合理使用繼承與組合? ? 414
23.4.6? 合理使用多繼承? ? 416
23.4.7? 合理使用虛函數(shù)和虛基類? ? 418
23.5? 不要教條主義? ? 420
第24章? 綜合實(shí)踐:《西游記》游戲模擬? ? 423
24.1? 功能分析? ? 424
24.1.1? 游戲運(yùn)行界面? ? 424
24.1.2? 游戲角色劃分? ? 424
24.1.3? 戰(zhàn)斗的形成? ? 425
24.1.4? 兵器的分配? ? 425
24.2? 設(shè)計(jì)思路? ? 426
24.2.1? 使用類和繼承完成角色的設(shè)計(jì)? ? 426
24.2.2? 使用文件流加載角色列表? ? 426
24.2.3? 使用虛函數(shù)實(shí)現(xiàn)角色的多態(tài)? ? 427
24.2.4? 使用操作符的重載? ? 429
24.2.5? 使用異常處理提高程序的魯棒性? ? 429
24.2.6? 使用RTTI獲取角色的類別? ? 430
24.2.7? 使用STL容器管理角色? ? 431
24.2.8? 使用STL容器管理兵器? ? 432
24.2.9? 使用泛型算法完成查找與排序? ? 433
24.2.10? 使用循環(huán)和判斷完成主控邏輯? ? 435
24.3? 實(shí)現(xiàn)詳解? ? 435
24.3.1? Weapon? ? 436
24.3.2? Actor? ? 438
24.3.3? Monk? ? 443
24.3.4? ActorPowersAccumulater? ? 446
24.3.5? God? ? 446
24.3.6? Monster? ? 448
24.3.7? FollowerMonster? ? 449
24.3.8? GameException? ? 450
24.3.9? Game? ? 453
24.3.10? main()函數(shù)? ? 468
24.4? 運(yùn)行并觀察游戲? ? 469
24.4.1? actors.ini? ? 469
24.4.2? 運(yùn)行程序? ? 472
總結(jié)
以上是生活随笔為你收集整理的标准C++开发入门与编程实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浏览器对象存储数据详解
- 下一篇: 默纳克万能协议服务器图片,默纳克MDKE