發表於2024-12-23
C++ Primer中文版(第5版) 計算機與互聯網 c++程序設計語言編程教材書籍 pdf epub mobi txt 電子書 下載
C++領域專傢:潘愛民、孟岩作序,代錶技術圈鼎力推薦!
一綫C++工程師騰訊Milo、微軟劉未鵬、陳梓瀚、阿裏李雲、侯鳳林高水準技術審校!
如果隻讀一本C++書籍,相信所有讀過的人都會毫不猶豫選擇《C++ Primer(中文版)(第5版)》,無論初學或老手既可用來理解C++11規則背後的原理,也可用其新語言特性與標準庫來快速構建健壯程序,采用中文版頁碼全麵呈現原書大量交叉引用及詳盡索引,新式輔學設置與課後操練用於避開陷阱、鞏固良法!
《C++ Primer(中文版 第5版)》久負盛名的 C++經典教程,時隔八年之久,終迎來重大升級。除令全球無數程序員從中受益,甚至為之迷醉的——C++ 大師 Stanley B。 Lippman 的豐富實踐經驗,C++標準委員會原負責人Josée Lajoie 對C++標準的深入理解,以及C++ 先驅 Barbara E。 Moo 在 C++教學方麵的真知灼見外,更是基於全新的 C++11標準進行瞭全麵而徹底的內容更新。非常難能可貴的是,《C++ Primer(中文版)(第5版)》所有示例均全部采用 C++11 標準改寫,這在經典升級版中極其罕見——充分體現瞭 C++ 語言的重大進展及其全麵實踐。《C++ Primer(中文版)(第5版)》豐富的教學輔助內容、醒目的知識點提示,以及精心組織的編程示範,讓這本書在 C++ 領域的專業地位更加不可動搖。無論是初學者入門,或是中、高級程序員提升,本書均為不容置疑的選擇。
Stanley B. Lippman,目前是微軟公司 Visual C++ 團隊的架構師。他從1984年開始在貝爾實驗室與C++的設計者Bjarne Stroustrup一起從事C++的設計與開發。他在迪士尼和夢工廠從事動畫製作,還擔任過JPL的高級顧問。
Josée Lajoie,曾經是IBM加拿大研究中心C/C++編譯器開發團隊的成員,在ISO C++標準委員會工作瞭7年,擔任過ISO核心語言工作組的主席和C++ Report雜誌的專欄作傢。
Barbara E. Moo,是擁有25年軟件經驗的獨立谘詢顧問。在AT&T;,她與Stroustrup、Lippman一起管理過復雜的C++開發項目。
第1章 開始
1.1 編寫一個簡單的C++程序
1.1.1 編譯、運行程序
1.2 初識輸入輸齣
1.3 注釋簡介
1.4 控製流
1.4.1 while語句
1.4.2 for語句
1.4.3 讀取數量不定的輸入數據
1.4.4 if語句
1.5 類簡介
1.5.1 Sales_item類
1.5.2 初識成員函數
1.6 書店程序
小結
術語錶
第Ⅰ部分 C++基礎
第2章 變量和基本類型
2.1 基本內置類型
2.1.1 算術類型
2.1.2 類型轉換
2.1.3 字麵值常量
2.2 變量
2.2.1 變量定義
2.2.2 變量聲明和定義的關係
2.2.3 標識符
2.2.4 名字的作用域
2.3 復閤類型
2.3.1 引用
2.3.2 指針
2.3.3 理解復閤類型的聲明
2.4 const限定符
2.4.1 const的引用
2.4.2 指針和const
2.4.3 頂層const
2.4.4 constexpr和常量錶達式
2.5 處理類型
2.5.1 類型彆名
2.5.2 auto類型說明符
2.5.3 decltype類型指示符
2.6 自定義數據結構
2.6.1 定義Sales_data類型
2.6.2 使用Sales_data類
2.6.3 編寫自己的頭文件
小結
術語錶
第3章 字符串、嚮量和數組
3.1 命名空間的using聲明
3.2 標準庫類型string
3.2.1 定義和初始化string對象
3.2.2 string對象上的操作
3.2.3 處理string對象中的字符
3.3 標準庫類型vector
3.3.1 定義和初始化vector對象
3.3.2 嚮vector對象中添加元素
3.3.3 其他vector操作
3.4 迭代器介紹
3.4.1 使用迭代器
3.4.2 迭代器運算
3.5 數組
3.5.1 定義和初始化內置數組
3.5.2 訪問數組元素
3.5.3 指針和數組
3.5.4 C風格字符串
3.5.5 與舊代碼的接口
3.6 多維數組
小結
術語錶
第4章 錶達式
4.1 基礎
4.1.1 基本概念
4.1.2 優先級與結閤律
4.1.3 求值順序
4.2 算術運算符
4.3 邏輯和關係運算符
4.4 賦值運算符
4.5 遞增和遞減運算符
4.6 成員訪問運算符
4.7 條件運算符
4.8 位運算符
4.9 sizeof運算符
4.10 逗號運算符
4.11 類型轉換
4.11.1 算術轉換
4.11.2 其他隱式類型轉換
4.11.3 顯式轉換
4.12 運算符優先級錶
小結
術語錶
第5章 語句
5.1 簡單語句
5.2 語句作用域
5.3 條件語句
5.3.1 if語句
5.3.2 switch語句
5.4 迭代語句
5.4.1 while語句
5.4.2 傳統的for語句
5.4.3 範圍for語句
5.4.4 do
5.5 跳轉語句
5.5.1 break語句
5.5.2 continue語句
5.5.3 goto語句
5.6 TRY語句塊和異常處理
5.6.1 throw錶達式
5.6.2 try語句塊
5.6.3 標準異常
小結
術語錶
第6章 函數
6.1 函數基礎
6.1.1 局部對象
6.1.2 函數聲明
6.1.3 分離式編譯
6.2 參數傳遞
6.2.1 傳值參數
6.2.2 傳引用參數
6.2.3 const形參和實參
6.2.4 數組形參
6.2.5 main:處理命令行選項
6.2.6 含有可變形參的函數
6.3 返迴類型和return語句
6.3.1 無返迴值函數
6.3.2 有返迴值函數
6.3.3 返迴數組指針
6.4 函數重載
6.4.1 重載與作用域
6.5 特殊用途語言特性
6.5.1 默認實參
6.5.2 內聯函數和constexpr函數
6.5.3 調試幫助
6.6 函數匹配
6.6.1 實參類型轉換
6.7 函數指針
小結
術語錶
7.4.1 名字查找與類的作用域
在目前為止,我們編寫的程序中,名字查找( name lookup)(尋找與所用名字匹配的聲明的過程)的過程比較直截瞭當: 首先,在名字所在的塊中尋找其聲明語句,隻考慮在名字的使用之前齣現的聲明。
如果沒找到,繼續查找外層作用域。
如果終沒有找到匹配的聲明,則程序報錯。
對於定義在類內部的成員函數來說,解析其中名字的方式與上述的查找規則有所區彆,不過在當前的這個例子中體現得不太明顯。類的定義分兩步處理:
首先,編譯成員的聲明。
直到類全部可見後纔編譯函數體。
按照這種兩階段的方式處理類可以簡化類代碼的組織方式。因為成員函數體直到整個類可見後纔會被處理,所以它能使用類中定義的任何名字。相反,如果函數的定義和成員的聲明被同時處理,那麼我們將不得不在成員函數中隻使用那些已經齣現的名字。
用於類成員聲明的名字查找 這種兩階段的處理方式隻適用於成員函數中使用的名字。聲明中使用的名字,包括返迴類型或者參數列錶中使用的名字,都必須在使用前確保可見。如果某個成員的聲明使用瞭類中尚未齣現的名字,則編譯器將會在定義該類的作用域中繼續查找。
……
推薦序
C++11標準公布之後,C++社群齣現瞭久違的熱情,有人甚至叫齣“C++的復興”。指望C++迴到20世紀90年代中期那樣的地位顯然是昧於大勢的奢 望,但是C++經曆瞭這麼多年的打磨與起伏,其在工業界的地位已經非常穩固,在很多領域裏已經是不可取代也沒必要被取代的統治者。新標準的齣現能夠大大提 升C++開發的效率和質量,因此贏得歡呼也是情理之中。在這種氛圍之下,編譯器實現的速度也令人驚喜。短短兩年時間,從開源的GCC、LLVM到專有的 Visual C++和Intel C++,對於新標準的追蹤之快,覆蓋之全,與當年C++ 98標準頒布之後遲遲不能落地的窘境相比,可謂對比強烈。當年是熱情的開發者反復敦促廠商實現完整標準而不得,為此沮喪無奈,那種心情,至今記憶猶新。時 過境遷,今天是編譯器實現遠遠衝在前麵,開發者倒是大大地落在瞭後麵。
時至今日,能夠基本瞭解C++11標準的程序員恐怕不多,而能夠以新的C++風格開發實踐的人更是鳳毛麟角。因此,今天的C++開發者麵臨的一個重要任務就是快速掌握新的C++風格和工具。
而說到教授“正宗的”C++11編程風格,《C++ Primer(第5版)》如同它之前的版本一樣,扮演著法定教科書的角色。
一種優秀的編程語言,一定要對於計算這件事情實現一個完整和自洽的抽象。十幾年來編程語言領域的競爭,除卻實現質量之外,基本上是在比拼抽象的設計。而C 語言之所以四十年長盛不衰,根本在於它對於現代計算機提供瞭一個底層的高級抽象:凡是比它低的抽象都過於簡陋,凡是比它高的抽象都可以用C語言構造齣 來。C++成功的根本原因,恰恰是因為它雖然試圖提供一些高級的抽象機製,但是其根基與C在同一層麵。正因為如此,每當你需要走下去直接與硬件對話 時,C++成為C之外有效率的選擇。我的一個朋友在進行瞭多年的大型係統軟件開發之後,不無感慨地說,C++大的力量不在於其抽象,恰恰在於其不抽 象。
話雖然如此,但是C++之所以脫離C而存在,畢竟還是因為其強大的抽象能力。Bjarne Stroustrup曾經總結說,C++同時支持4種不同的編程風格:C風格、基於對象、麵嚮對象和泛型。事實上,把微軟的COM也算進來的話,還可以加 上一種“基於組件”的風格。這麼多的風格共存於一種語言,就是其強大抽象機製的證明。但是,在C++11以前,C++的抽象可以說存在若乾缺陷,其中嚴 重的是缺少自動內存管理和對象級彆的消息發送機製。今天看來,C++ 98隻能說是特定曆史條件造成的半成品,無論是從語言機製,還是標準庫完備程度來說,可以說都存在明顯的、不容忽略的缺陷。其直接後果,就是優雅性的缺失 和效率的降低。我本人在十年前曾經與當時中國C++社群中不少傑齣的人物交流探討,試圖從C++ 98中剪裁齣一個小巧、優雅的、自成一體的子集,希望至少在日常編程中,能夠在這個子集之內可以寫齣與當時的Java和C#同樣乾淨明晰的代碼。為此我們 嘗試瞭各種古怪的模闆技巧,並且到處尋找有啓發的代碼和經驗來構造這個語言子集,結果並不理想,甚至可以說是令人非常失望。後來我在我的博客中發錶過好幾 篇文章,探討所謂的C++風格問題,其實就是說,C++不支持簡潔明快的麵嚮對象風格,大傢還不如迴到基於對象甚至C語言的風格,多加點模闆,省一點代 碼量。非要麵嚮對象的話,就必須依賴像Qt或者MFC那樣的基礎設施纔可以。
C++11齣來之後,增強的語言機製和大為完善的標準庫,為C++語言的編程風格帶來瞭革命性的變化。如果能夠純熟地運用C++11的新特徵、新機製,那 麼就能夠形成一種簡潔優雅的C++編程風格,以比從前更高的效率、更好的質量進行軟件開發。對於這種新的風格,我認為“直覺、自然”是佳的描述。也就是 說,解決任何問題不必拘泥於什麼籠蓋一切的編程思想,也不再沉溺於各種古怪的模闆技巧中無法自拔,而是能夠根據那個問題本身采用自然、符閤直覺的方 式。C++有自己的一套思維方式,比如容器、算法、作為概念抽象的對象等,很大程度上這套思維方式確實是閤乎直覺的。隻有到瞭C++11這一代,C++語 言的高級抽象纔基本完備,這樣一種風格纔可能真正落實。因此可以說C++11對於C++ 98而言,不是一次簡單的升級,而是一次本質的躍升。
學習新的C++風格,並不是輕而易舉的事情。即便對於以前已經精通C++的人來說,熟練掌握rvalue reference、move語義,瞭解unique_ptr、shared_ptr和weak_ptr的完整用法,明智地使用 function/bind和lambda機製,學習C++ Concurrency的新技術,都絕非一朝一夕之功。對於那些初學者來說,這件事情更不簡單。
本書無論對於初學者還是提高者,都是經典的教科全書。一直以來,它的特點就是完整而詳細,基本上關於語言本身的問題,都可以在這本書裏得到解決。而本書 的另一個重要優點,就是其完全基於新的編程風格編寫,所有的例子和講解都遵循C++11標準所體現齣來的思路和風格進行,如果能夠踏下心來認真學習和練 習,那麼就能“一次到位”地掌握C++11,盡管可能會比較慢。有經驗的C++開發者閱讀這本書當然不用從頭到尾,選擇自己關心的內容學習C++11的新 特性就可以,是快速升級自身能力的捷徑。
差不多十年前,我提齣一個觀點,每一個具體的技術領域,隻需要讀四五本書就夠瞭。以前的C++是個例外,因為語言設計有缺陷,所以要讀很多書纔知道如何繞過缺陷。現在的C++11完全可以瞭,大傢讀四五本書就可以達到閤格的水平,這恰恰是語言進步的體現。
本書是這四五本中的一本,而且是“教程+參考書”,扛梁之作,初學者的不二法門。另一本是《C++標準程序庫(第2版)》,對於C++熟手來說更為快捷。 Scott Meyers的Effective C++永遠是學習C++者必讀的,隻不過這本書的第4版不知道什麼時候齣來。Anthony Williams的C++ Concurrency in Action是學習用標準C++開發並發程序的佳選擇。國內的作品,我則高度推薦陳碩的《Linux多綫程服務端編程》。這本書的名字趕跑瞭不少潛在的 讀者,所以我要特彆說明一下。這本書是C++開發的高水平作品,與其說是教你怎麼用C++寫服務端開發,不如說是教你如何以服務端開發為例子提升C++開 發水平。前麵幾本書都是談標準C++自己的事情,碰到像iostream這樣失敗的標準組件也不得不硬著頭皮介紹。而這本書是接地氣的實踐結晶,告訴你麵 對具體問題時應怎樣權衡,C++裏什麼好用,什麼不好用,為什麼,等等。
今天的C++學習者是非常幸運的,可以在C++11這個基礎上大步嚮前,不必再因為那些語言的缺陷和過度的技巧而煩惱。大傢靜下心來認真讀這本書,可以打下很好的基礎。
孟岩
2013年8月
北京
C++ Primer中文版(第5版) 計算機與互聯網 c++程序設計語言編程教材書籍 pdf epub mobi txt 電子書 下載