助你掌握 C++ 編程的九本開源書籍
分享是一種美德,我精心挑選了九本值得一讀的優質 C++ 書籍,這些書籍均基於開源協議發布。在這之前,我會給出一份 C++ 的簡短介紹。
C++ 是由 Bjarne Stroustrup 設計,初次發佈於 1983 年。它是一種靜態類型、格式自由、多重範式、可移植、編譯式的通用編程語言。它被認為是中級語言,同時包含有高級與初級編程語言的特性。C++ 設計用於實現系統級與應用的編程,它拓展了 C 編程語言,因此其名字中的使用了自增運算符 ++。
C++ 仍是一種流行的編程語言。例如,它被廣泛應用於嵌入式系統、銀行以及通訊業。它作為 C 的超集保留了 C 標誌性的簡潔與高效,同時提供強類型檢查、多重繼承、數據抽象、異常處理操作符重載、泛型編程,以及面向對象編程等功能。C++ 不僅影響了 C 語言的發展,同時也影響到了包括 C#、Java 在內的許多其他編程語言。
《 Boost C++ 類庫 》
作者 Boris Schäling (570頁)
《 Boost C++ 類庫 》被認為在 C++ 世界中極其重要並有深遠影響。書中這些可移植的庫提供對多種任務和結構體的支持,包括多線程、容器、字元串和文本處理、迭代器、線性代數、偽隨機數產生、元程序設計模板、並發程序設計、數據結構、圖像處理、正則表達式和單元測試。Boost 可以在幾乎所有現代操作系統上工作,包括 Linux 和 Windows 及其衍生,並且支持絕大多數現代編譯器。
這本書介紹了 72 個 Boost 庫,提供了廣泛並且實用的功能。它們能夠幫助程序員更輕鬆的管理內存和處理字元串。這些庫提供多種容器以及其它數據結構來拓展標準庫。使用這些庫可以輕鬆實現平台無關的網路應用程序。
本書是一顆值得添加到各類收藏中的明珠。430 份源代碼例子生動形象地闡釋了這些庫的功能。
本書前面的章節審視了內存管理、字元串處理、容器、數據結構、演算法、通信、文件與流以及時間。後續章節進一步探索了函數式編程、並行編程和泛型編程。以對語言拓展、錯誤與數字處理、應用程序庫、設計模式以及其他庫的大部分內容。
本書採用知識共享署名-非商業性使用-禁止演繹 4.0 國際許可協議進行許可。如果你喜歡實體書,可以在亞馬遜上購買紙質書,也可選擇如 kindle、E-book 和 PD F格式的電子書。
《 C++ 注釋 》
作者 Frank B. Brokken (1029頁)
《 C++ 注釋 》提供了關於 C++ 編程語言的一份全面的教程。它可以被當做一門 C++ 課程的教材。本書面向已掌握 C 語言或其他類 C 語法知識的使用者。
本書主要章節有:
- 命名空間
- 字元串——C 提供的是最基礎的字元串支持
- I/O 流庫——提供了一個基於類概念的輸入/輸出庫
- 類——C 提供了兩種結構化不同類型數據的方法。C 語言的結構體包含多種類型的數據成員,而 C 語言的 共用體 同樣可以定義不同類型的數據成員。本章介紹的類,也是一種結構體但是它的內容對外部世界來說是默認不可訪問的。
- 靜態數據和函數
- 內存管理——審視 C++ 中能夠操作內存分配的操作符
- 異常——允許 C++ 程序執行受控的非本地返回命令,避免了使用 longjmp(非局部跳轉)和 setjmp(激活非局部跳轉)函數的缺陷。
- 操作符重載——介紹通用的操作符重載
- 抽象容器
- 繼承——派生的另外一個特性。 本章演示基類指針可能被用來指向派生類的對象。
- 多態——繼承的一種特殊形態
- 友元機制——介紹 friend 關鍵詞以及它的使用原則
- 成員指針——定義成員指針及其用法,靜態成員指針,指針長度
- 嵌套類——當嵌套類與其外圍類有概念上的緊密聯繫時會被使用
- 標準模板庫(STL)——包含容器、通用演算法、迭代器、函數對象、分配器、適配器和數據結構的通用庫。這些演算法使用的數據結構都是抽象意義的,因此演算法實際上可以使用任何數據類型。
- 泛型演算法——涵蓋標準模板庫中的泛型演算法
- 函數模板——探索模板獨特的句法。介紹模板類型參數與模板非類型參數和函數模板等概念並且提供模板的多個案例。
- 類模板——討論構建與使用類模板
- 進階模板用法——一份簡短的模板元編程主要特性與模板的微妙關係的介紹
本書有HTML、PDF、PostScript 和 txt 版本。它可以自由分發,基於 GNU GPL 協議發布。
《 通過 C++ 和 Qt4 了解設計模式 》
作者 Alan Ezust, Paul Ezust (656頁)
《 通過 C++ 和 Qt4 了解設計模式 》從介紹 C++ 基礎知識、面向對象概念、UML(統一建模語言)和核心 Qt 類開始。進而轉向更高級的編程概念如 Qt modules 和設計模式。最後嚴密地印證了重要的 C++ 特性。其中涵蓋了非常優秀的對函數、繼承和多態的講解。
本書不需要具備任何 C 或者 C++ 編程經驗前提,並且被設計為普適用途。它也為教學工作者準備了 Qt 案例、練習、答案以及課程 PPT。
本書是 Bruce Perens 開源系列中的一部分。所有在此系列中的書籍都是基於 Open Publication License V1.0 及其後版本發布的。
《 像計算機科學家一樣思考:C++ 》
作者 Allen B. Downey (191頁)
《 像計算機科學家一樣思考:C++ 》是使用 C++ 編程語言進行軟體設計的一本簡潔友好的介紹性書籍。本書的目的是通過講解最基礎的概念並且以讀者容易接受的節奏逐步增加新內容來把沒有編程經驗的讀者培養成為未來的開發者。
本書提供的有價值的內容包括:
- 變數、表達式和語句
- 函數
- 條件語句與遞歸
- 豐富的函數
- 迭代
- 字元串
- 向量
- 成員函數
- 對象的向量
- 向量的對象
- 類與不變數
- 文件輸入輸出和 apmatrixes
本書是一本在知識共享署名-非商業性使用-3.0 未本地化版本協議下發布的免費書籍。
《 C++ Qt3 圖形界面編程 》
作者 Jasmin Blanchette, Mark Summerfield (464 頁)
最新發布的 Qt 穩定版本是 5.8,而《 C++ Qt3 圖形界面編程 》指導讀者如何使用 Qt3 編寫 GUI 程序,Qt3 最近一次更新是 2004 年,但是本書仍然有大部分內容對 Qt4 和 Qt5 有效。
本書不是一本面向初學者的書,需要讀者對 C++ 有基本的理解。
本書向讀者介紹了使用 Qt 進行 GUI 應用編程所有的概念和需要的練習。本書不僅詳盡的講述了核心內容,而且也提供了一些特別的和高階的學習材料。
本書是 Bruce Perens 開源系列中的一部分。所有在此系列中的書籍都是基於 Open Publication License V1.0及之後版本發布的。
《 開放數據結構(C++ 版) 》
作者 Pat Morin (336頁)
《 開放數據結構(C++ 版) 》教導讀者設計和分析基礎數據結構以及如何使用 C++ 實現。 它涵蓋了對如下數據結構的分析和實現:序列(列表)、隊列、優先隊列、無序字典、有序字典以及圖。作者的意圖在於向大學計算機科學的學生提供一條學習數據結構的免費的途徑,但是並不打算成為介紹 C++ 編程語言或者 C++ 標準模板庫的一本書。不過它可以幫助程序員理解標準模板庫的數據結構是如何實現的以及這種實現為何如此高效。
章節內容覆蓋了基於數組的列表、鏈表、分級鏈表、哈希表、二叉樹(又包含了隨機二叉搜索樹、替罪羊樹、紅黑樹)。之後的章節還包括堆、排序演算法(比較、計數和基數排序)、圖、整數的數據結構和外部存儲器搜索。
本書基於知識共享署名 協議發布。免費的 HTML、PDF 均已發布,本書的 LaTeX 版本,Java/C++/Python 源代碼都可以從 GitHub 下載。也有紙質書版本可供購買。本書已被翻譯為斯羅維尼亞語和土耳其語。
《 使用 wxWidgets 進行跨平台 GUI 編程 》
作者 Julian Smart,Kevin Hock和Stefan CsomorBrifll (744 頁)
wxWidgets 是一個流行的 C++ 庫,可供開發者使用單一的代碼基礎為 Windosw、Mac OS、Linux 和其他平台創建應用。它支持非常廣泛的圖形處理庫。
這本書《 使用 wxWidgets 進行跨平台 GUI 編程 》從簡單的介紹和起步章節開始,主要內容包括:
- 事件處理
- 窗口基礎
- 畫圖
- 輸入事件處理
- 使用 sizers 進行窗口布局
- 使用標準對話框
- 創建自定義對話框
- 圖像編程
- 剪貼板與拖放動作
- 高階窗口類
- 文件和數據流
- 內存管理,調試和錯誤檢查
- 編寫國際化應用
- 編寫多線程應用
- wxSocket 編程
- 處理文檔和視圖
- 日臻完美你的應用
本書是 Bruce Perens 開源系列中的一部分。所有在此系列中的書籍都是基於 Open Publication License V1.0及其後版本發布的。
《 Rook 的 C++ 指南 》
作者 Jeremy Hansen (160頁)
《 Rook 的 C++ 指南 》的章節中包含變數、常量、輸入輸出、數據類型和轉換、條件判斷語句(if、else 和 else if、switch 語句)、字元串、循環、數組、塊、函數和作用域。之後的章節主要集中解決問題和定位問題,包括預處理器、高等代數、文件輸入輸出、指針、動態數據、類和抽象、分離編譯和標準模板庫。
本書大部分都是由 25 位 Norwich 大學的學生於一個黑客馬拉松周末寫成。當然不敢說毫無缺點,但還是一本相當不錯的書。它被基於知識共享署名-非商業性使用-相同方式共享 3.0 未本地化版本協議發布。同時在亞馬遜也有本書的紙質版可供購買。
《 GCC 簡介 》
作者 Brian Gough (144頁)
《 GCC 簡介 》介紹了 GCC,同時介紹了 GNU C 和 C++ 編譯器:gcc 和 g++,均屬於 GNU 編譯器集合(GCC)。
本書解釋了如何單獨使用編譯器。作者通過數年對郵件列表中發表的問題的觀察,撰寫本書帶領讀者直接接觸 GCC 最重要的部分。
章節簡介:
- 介紹
- 編譯一個 C 程序——描述了如何使用 gcc 編譯 C 程序。程序可能是由單獨文件或者多個文件編譯而成,也可能使用系統庫和頭文件。
- 編譯選項——描述gcc中可以使用的編譯器中常用的選項。這些選項可以修改本地庫和包含文件的搜索路徑,配置額外的 warning 和調試信息,預處理器宏指令和 C 方言。
- 使用預處理——描述了屬於 GCC 包內的 GNU C 預處理 cpp 程序的用途。預處理將宏定義在源代碼被編譯前展開。預處理會在 GCC 編譯 C 或者 C++ 程序時自動被調用。
- 以調試為目的編譯——提供 -g 選項使目標文件和可執行文件中存儲額外的調試信息。當出現錯誤時,這些調試信息允許從特定的機器指令回溯到源代碼中相應的行。
- 優化編譯——GCC 是一個優化編譯器。它提供了大量的選項來使其生成的可執行文件的速度得到提升,並盡量減小可執行文件的大小。
- 編譯一個 C++ 程序——描述了如何使用 GCC 來編譯以 C++ 編寫的程序,以及針對這門語言特定的命令行選項。
- 平台相關的選項——描述了一些通用平台上可用的選項,如 Intel 和 AMD x86 選項、x86 拓展選項、x86 64 位處理器選項、DEC Alpha 選項、SPARC 選項、POWER/powerPC 選項、複合架構支持以及浮點相關問題。
- 問題定位——GCC 提供了幾項幫助和診斷選項來幫助用戶在編譯過程中定位問題。
- 編譯器相關工具——介紹了大量能夠用於和 GCC 組合使用的工具。包括:用來創建庫的 GNU 壓縮器 ar,以及 GNU 性能和覆蓋測試工具:gprof 和 gcov。
- 編譯器如何工作——描述了關於 GCC 如何將源代碼轉換為可執行程序的更多細節。編譯是一個涉及到多種工具的多級過程,包括 GNU 編譯器自身(通過 gcc 或者 g++ 前端)、GNU 彙編器 as 以及 GNU 鏈接器 ld。編譯過程中一個完整的工具集合被稱之為工具鏈。
- 檢查編譯後的文件——描述了多種有用的工具來檢查可執行文件和目標文件的內容。
- 常見錯誤消息——描述了 gcc 和 g++ 產生的最常見的錯誤和警告信息。每一個案例都伴隨著錯誤和警告產生的原因,相應的例子和可能解決問題的建議。
- 獲得幫助——如果讀者碰到了本書中未能涵蓋的問題,還有多種參考手冊更詳細的描述了 GCC 和編程語言相關的主題。
本書是基於 GNU Free Documentation 協議出版的。
此外還有一些 C++ 書籍可以免費下載,但是那些並不是基於開源協議發布的,或者作者沒有指定一個協議。這類書籍包括:
- 《Thinking in C++,第二版,卷一、卷二》 – 作者 Bruce Eckel (卷二作者增加了 Chuck Allison)
- 《C++ In Action:Industrial Strength Programming》– 作者 Bartosz Milewski
最後,我對剛入門的 C++ 新手的建議一定是《 編程原理與體驗(C++ 版) (第二版)》。普遍認為這是最合適的入門書籍,由 C++ 的創始人書寫,物超所值。
via: https://www.ossblog.org/master-c-programming-with-open-source-books/
作者:Steve Emms 譯者:xiaow6 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive