編輯推薦
C++11標準使得程序員能以更清晰、簡明、直接的方式錶達思想,從而編寫齣更快速和高效的代碼。作為C++的設計者和實現者,Bjarne Stroustrup在他的經典著作《C++程序設計語言》中詳盡地介紹瞭C++語言的各種細節及其用法。
在這本中,作者把C++完整參考手冊的精華概述部分摘取齣來,並且進行必要的擴充和提升,目的是讓有經驗的程序員在很短時間內就能清晰地瞭解到構成現代C++語言的關鍵元素。本書雖薄,結構卻清晰完整,作者在書中介紹瞭C++語言的絕大多數特性以及重要的一些標準庫組件。尤其難能可貴的是,雖然受篇幅所限無法對每個知識點展開深入講解,但依然能夠幫助程序員瞭解語言的全貌,並給齣一些關鍵示例,便於他們更好地學習和使用C++語言。
作者並非孤立地介紹C++的特性,而是將其置於適當的程序設計風格之中,這些風格包括讀者熟悉的麵嚮對象程序設計和泛型編程等。本書內容豐富,涵蓋的範圍極其廣泛。從基礎知識開始逐漸延展到更多高級主題,並且包含瞭大量C++11的新語法點,比如移動語義、規範初始化、lambda錶達式、高級容器、隨機數和並行等。本書最後討論瞭C++的設計、曆史演變以及擴展。
《計算機科學叢書:C++語言導學》的目的並非教會讀者如何編程(學習編程可以參考作者的《C++程序設計原理與實踐》),讀者也不可能僅靠閱讀本書就熟練掌握C++(為此讀者可以參考作者的《C++程序設計語言》)。但是,如果你是一個C/C++程序員,並且想熟悉新版本的C++語言,或者你精通其他高級語言,希望瞭解一下C++語言有何特性和長處,那麼本書顯然是很好的選擇。
內容簡介
《計算機科學叢書:C++語言導學》作者是C++語言的設計者和實現者,寫作本書的目的是讓有經驗的程序員快速瞭解C++現代語言。書中幾乎介紹瞭C++語言的全部核心功能和重要的標準庫組件,以很短的篇幅將C++語言的主要特性呈現給讀者,並給齣一些關鍵示例,讓讀者用很短的時間就能對現代C++的概貌有一個清晰的瞭解,尤其是關於麵嚮對象編程和泛型編程的知識。本書沒有涉及太多C++語言的細節,非常適閤想熟悉C++語言新特性的C/C++程序設計人員以及精通其他高級語言而想瞭解C++語言特性和優點的人員。
目錄
齣版者的話
中文版序
譯者序
前言
第1章 基礎知識 1
1.1 引言 1
1.2 程序 1
1.3 Hello,World! 2
1.4 函數 3
1.5 類型、變量和算術運算 5
1.6 作用域和生命周期 7
1.7 常量 8
1.8 指針、數組和引用 9
1.9 檢驗 11
1.10 建議 13
第2章 用戶自定義類型 15
2.1 引言 15
2.2 結構 15
2.3 類 17
2.4 聯閤 18
2.5 枚舉 19
2.6 建議 20
第3章 模塊化 22
3.1 引言 22
3.2 分離編譯 23
3.3 命名空間 24
3.4 錯誤處理 25
3.4.1 異常 26
3.4.2 不變式 27
3.4.3 靜態斷言 28
3.5 建議 29
第4章 類 30
4.1 引言 30
4.2 具體類型 31
4.2.1 一種算術類型 31
4.2.2 容器 33
4.2.3 初始化容器 34
4.3 抽象類型 36
4.4 虛函數 38
4.5 類層次結構 39
4.5.1 顯式覆蓋 40
4.5.2 層次結構的益處 41
4.5.3 層次結構漫遊 42
4.5.4 避免資源泄漏 43
4.6 拷貝和移動 44
4.6.1 拷貝容器 44
4.6.2 移動容器 45
4.6.3 基本操作 47
4.6.4 資源管理 49
4.6.5 抑製操作 50
4.7 建議 51
第5章 模闆 53
5.1 引言 53
5.2 參數化類型 53
5.3 函數模闆 55
5.4 概念和泛型編程 56
5.5 函數對象 57
5.6 可變參數模闆 59
5.7 彆名 60
5.8 模闆編譯模型 61
5.9 建議 61
第6章 標準庫概覽 63
6.1 引言 63
6.2 標準庫組件 63
6.3 標準庫頭文件和命名空間 64
6.4 建議 66
第7章 字符串和正則錶達式 67
7.1 引言 67
7.2 字符串 67
7.2.1 string的實現 69
7.3 正則錶達式 69
7.3.1 搜索 70
7.3.2 正則錶達式符號錶示 71
7.3.3 迭代器 75
7.4 建議 75
第8章 I/O流 77
8.1 引言 77
8.2 輸齣 78
8.3 輸入 79
8.4 I/O狀態 80
8.5 用戶自定義類型的I/O 81
8.6 格式化 82
8.7 文件流 83
8.8 字符串流 83
8.9 建議 84
第9章 容器 86
9.1 引言 86
9.2 vector 86
9.2.1 元素 89
9.2.2 範圍檢查 89
9.3 list 90
9.4 map 91
9.5 unorder_map 92
9.6 容器概述 93
9.7 建議 94
第10章 算法 96
10.1 引言 96
10.2 使用迭代器 97
10.3 迭代器類型 99
10.4 流迭代器 100
10.5 謂詞 102
10.6 標準庫算法概覽 102
10.7 容器算法 103
10.8 建議 104
第11章 實用工具 105
11.1 引言 105
11.2 資源管理 105
11.2.1 unique_ptr和shared_ptr 106
11.3 特殊容器 108
11.3.1 array 109
11.3.2 bitset 111
11.3.3 pair和tuple 111
11.4 時間 113
11.5 函數適配器 113
11.5.1 bind() 113
11.5.2 mem_fn() 114
11.5.3 function 114
11.6 類型函數 115
11.6.1 iterator_traits 116
11.6.2 類型謂詞 117
11.7 建議 118
第12章 數值計算 119
12.1 引言 119
12.2 數學函數 119
12.3 數值算法 120
12.4 復數 121
12.5 隨機數 121
12.6 嚮量算術 123
12.7 數值限製 124
12.8 建議 124
第13章 並發 125
13.1 引言 125
13.2 任務和thread 126
13.3 傳遞參數 126
13.4 返迴結果 127
13.5 共享數據 128
13.6 等待事件 129
13.7 任務通信 130
13.7.1 future和promise 131
13.7.2 packaged_task 132
13.7.3 async() 133
13.8 建議 133
第14章 曆史和兼容性 135
14.1 曆史 135
14.1.1 大事年錶 136
14.1.2 早期的C++ 137
14.1.3 ISO C++標準 139
14.2 C++11擴展 140
14.2.1 語言特性 140
14.2.2 標準庫組件 141
14.2.3 已棄用特性 142
14.2.4 類型轉換 143
14.3 C/C++兼容性 143
14.3.1 C和C++是兄弟 144
14.3.2 兼容性問題 145
14.4 參考文獻 147
14.5 建議 149
索引 151
精彩書摘
《計算機科學叢書:C++語言導學》:
程序員應該直接用代碼錶達思想;參見4.1節。
具體類是最簡單的類。與復雜類或者普通數據結構相比,請優先選擇使用具體類;參見4.2節。
使用具體類錶示簡單的概念以及性能要求較高的組件;參見4.2節。
定義一個構造函數來處理對象的初始化操作;參見4.2.1節,4.6.3節。
隻有當函數確實需要直接訪問類的成員變量部分時,纔把它作為成員函數;參見4.2.1節。
定義運算符的目的主要是模仿和藉鑒它的經典用法;參見4.2.1節。
把對稱的運算符定義成非成員函數;參見4.2.1節。
如果成員函數不會改變對象的狀態,則應該把它聲明成const的;參見4.2.1節。
如果類的構造函數獲取瞭資源,那麼需要使用析構函數釋放這些資源;參見4.2.2節。
使用資源句柄和RAIl管理資源;參見4.2.2節。
如果類是一個容器,給它一個初始值列錶構造函數;參見4.2.3節。
如果需要把接口和實現完全分離開來,則使用抽象類作為接口;參見4.3節。
使用指針和引用訪問多態對象;參見4.3節。
抽象類通常無需構造函數;參見4.3節。
使用類的層次結構錶示具有繼承層次結構的一組概念;參見4.5節。
含有虛函數的類應該同時包含一個虛的析構函數;參見4.5節。
在規模較大的類層次結構中使用Override顯式地指明函數覆蓋;參見4.5.1節。
當設計類的層次結構時,注意區分實現繼承和接口繼承;參見4.5.2節。
當類層次結構漫遊不可避免時記得使用dynamiccast;參見4.5.3節。
如果想在無法轉換到目標類時報錯,則令dynamic—cast作用於引用類型;
參見4.5.3節。
如果認為即使無法轉換到目標類也可以接受,則令dynamic—cast作用於指針類型;
參見4.5.3節。
為瞭防止忘掉用delete銷毀用new創建的對象,建議使用unique—ptr或者shared_ptr;參見4.5.4節。
如果默認的拷貝操作不適閤當前類,記得重新定義一個或者乾脆禁止使用它;參見4,6.1節,4.6.5節。
用傳值的方式返迴容器(移動而非拷貝容器以提高效率);參見4.6.2節。
對於容量較大的操作對象,使用const引用參數類型;參見4.6.2節。
……
前言/序言
教而至簡,不亦樂乎。 ——西塞羅現在的C++仿佛進化成瞭一種新的語言。與C++98相比,C++11更易於我們清晰、簡潔、直觀地錶達思想。而且編譯器可以更好地檢查程序中的錯誤,程序的運行速度也提高瞭。 就像其他任何一種現代編程語言一樣,C++的規模龐大且提供的庫異常豐富,值得程序員認真學習以便高效地利用。這本小冊子的目的是讓有經驗的程序員快速瞭解現代C++語言,因此它幾乎介紹瞭C++的全部核心功能和重要的標準庫組件。讀者花費幾個小時就能讀完本書,但是想必所有人都清楚,要想寫齣漂亮的C++程序絕非一日之功。好在本書的目的並非讓讀者熟練掌握一切,而隻是介紹語言的概貌,給齣一些經典的例子,然後幫助讀者開始自己的C++之旅。如果讀者希望深入瞭解C++語言,請閱讀我的另一本著作《The C++ Programming Language,Fourth Edition》(簡稱TC++PL4)。實際上,本書正是TC++PL4第2~5章的擴充版,隻不過齣於完整性和獨立性的考慮我們稍微增加瞭一些內容。本書的篇章結構與TC++PL4保持一緻,讀者如果對細節感興趣,可以在TC++PL4中進一步尋找答案。同樣,在我的個人主頁上為TC++PL4編寫的習題也可以用於本書。 我們假設讀者已經擁有瞭一些編程經驗。如果沒有,建議你先找一本入門教材學習一下,比如《Programming:Principles and Practice Using C++》[Stroustrup,2009]。即便你曾經編寫過程序,所使用的語言或者編寫的應用也可能在風格或形式上與本書相距甚遠。 我們用城市觀光的例子來比喻本書的作用,比方說參觀哥本哈根或者紐約。在短短幾個小時之內,你可能會匆匆遊覽幾個主要的景點,聽到一些有趣的傳說或故事,然後被告知接下來應該參觀哪裏。僅靠這樣一段旅程,你無法真正瞭解這座城市,對聽到和看到的東西也是一知半解,更彆提熟悉這座城市的生存法則。畢竟要想認識並融入一座城市,需要在其中生活很多年。不過幸運的是,此時你已經對城市的總體情況有瞭一些瞭解,知道瞭它的某些特殊之處,並且對有的方麵産生瞭興趣。接下來,你有機會開始真正的探索之旅瞭。 本書介紹C++語言的主要功能,尤其是關於麵嚮對象編程和泛型編程的知識。在寫作時,我們沒有涉及太多細節,更不想把本書寫成參考手冊。對於標準庫也盡量去繁就簡,用生動的例子進行講解。本書沒有介紹ISO標準之外的庫,讀者需要的話可以自行查閱有關資料。如果我們提到瞭某個標準庫函數或類,讀者很容易就能在頭文件中找到它的定義,還可在互聯網上搜集到更多與之有關的信息。 本書力求把C++作為一個整體呈現在讀者麵前,而非像韆層糕一樣逐層地介紹。因此,在這裏我們不細分某項語言特性是歸屬於C、C++98還是C++11,這些與語言沿革有關的信息在第14章(曆史和兼容性)可以找到。 緻謝本書的大多數內容源自TC++ PL4[Stroustrup,2012],因此首先感謝協助我完成TC++PL4的所有同仁。還要感謝Addison-Wesley的編輯Peter Gordon,是他建議作者把TC++PL4的部分章節擴展成本書的。 Bjarne Stroustrup
計算機科學叢書:C++語言導學 下載 mobi epub pdf txt 電子書