Bruce Eckel:thinking In C++@2000 (第2版 第2卷)

「Thinking in C++ 第二版 卷二:標準程式庫與進階主題」這本書的核心理念,在於引導讀者不僅學習 C++ 語言的特性,更要學會「以 C++ 的思維進行程式設計」。作者強調,理解 C++ 的關鍵在於深入理解它所旨在解決的問題,特別是 C 語言固有的缺點以及通用程式設計中遇到的複雜性。本書鼓勵讀者在思考程式建構時應側重於設計,而非僅僅是逐行的編碼實現。為了達到這一目標,本書旨在協助讀者在大腦中建立一個能夠深入理解語言底層機制(”bare metal”)的模型,從而逐步引導讀者從習慣 C 的思考模式轉變為完全融入 C++ 的思維方式。

本書的教學方法論十分嚴謹,旨在透過精心設計的步驟,最大化學習的效率與效果。其具體目標包括:將學習材料分解為易於消化的小步驟,使讀者能夠輕鬆掌握每個概念後再繼續前進;使用盡可能簡單和簡短的範例,儘管這有時犧牲了展示「真實世界」複雜問題的機會,但對於初學者而言,完全理解範例的每一個細節比被其規模所震撼更有益處;精心安排語言特性的呈現順序,避免在讀者尚未接觸相關概念之前就使用這些特性,確保入門過程的平順,並鏡像讀者自行吸收這些特性的自然過程;聚焦於傳達作者認為對於大多數程式設計師而言重要的核心知識,而非語言的所有細節,以避免不必要的混淆並減少學習感知上的複雜性;保持每個章節的內容足夠集中,以便於進行短時間的學習或練習,這不僅能保持讀者的活躍度,也能帶來更大的成就感;為讀者提供一個紮實的基礎,使他們能夠充分理解相關議題,進而能夠深入學習更困難的課程和書籍(尤其是本書的後續內容);並致力於不依賴任何特定廠商的 C++ 實作細節,專注於教授語言本身,以便讀者的知識具有良好的可移植性。

作為「Thinking in C++」的第二卷,本書專注於標準 C++ 程式庫和各種進階主題。標準 C++ 程式庫不僅整合了標準 C 程式庫並進行了安全性和易用性的改進,還增加了強大的 C++ 特定程式庫。本書卷二詳細探討了這些標準程式庫的核心部分,為讀者提供了廣泛的工具集。其中包括:

  1. string 類別:標準 C++ string 類別極大地簡化了字元陣列的操作,自動處理記憶體管理,提供了豐富的字串處理方法,並與 iostreams 無縫整合。
  2. iostreams:一個用於處理輸入/輸出的程式庫,提供了統一的介面來處理標準輸入/輸出、檔案輸入/輸出以及記憶體內格式化,相較於 C 的 stdio.h 更安全、更靈活且更易於擴充。
  3. 泛型與容器深度探討:在第一卷基礎上,深入探討非類型模板參數、預設模板參數、typename 關鍵字、函式模板、模板特化、成員函式模板等進階模板概念,以及標準範本程式庫 (STL) 中的容器和迭代器。這包括序列容器(如 vectorlistdeque)和關聯式容器(如 setmapmultisetmultimap),並介紹了不同容器的特性、適用場景及效能考量。
  4. STL 演算法:這部分介紹了大量作用於容器元素上的泛型函式,如搜尋、排序、變換、計數等。這些演算法通過迭代器工作,提供高度的靈活性和重用性,是 STL 強大功能的另一半。
  5. 多重繼承 (MI):探討了從多個基底類別繼承的語法、潛在的歧義問題(如重複的基底類別子物件、「菱形」繼承問題)及其解決方案(虛擬基底類別),並討論了使用多重繼承的場景及何時應考慮避免它。
  6. 例外處理:C++ 提供的一種用於處理異常或錯誤條件的強大機制。本書詳細解釋了 trythrowcatch 關鍵字的使用,例外處理的匹配規則,標準例外類別,以及如何在程式設計中有效地使用例外處理來提高程式的健壯性。
  7. 執行時類型識別 (RTTI):允許程式在執行時確定物件的實際類型,即使只有指向其基底類型的指標或參考。探討了 typeid 運算符和 dynamic_cast 運算的用法及其在特定情況下的應用。
  8. 建構穩定系統:討論了在大型軟體專案中建構更可靠、更易於維護的系統的進階議題,可能涉及記憶體管理策略、錯誤偵測、設計模式等。
  9. 設計模式:介紹了通用的、可重用的解決常見設計問題的方法。這部分會探討幾個重要的設計模式(如工廠、單例、觀察者、訪問者等),並通過範例展示它們如何應用於實際問題,以及它們如何幫助實現更靈活、更易於維護的設計。
  10. 工具與主題:包含了一些實用的工具和額外的重要主題,例如程式碼提取工具(用於從本書文本中提取程式碼)、除錯技巧、特定平台的考量等。

為了輔助讀者的學習,本書在每章末尾都提供了練習題,旨在幫助讀者測試和鞏固對材料的理解。這些練習題通常較為簡單,可以在短時間內完成。此外,本書的程式碼是免費提供的,讀者可以從作者的網站 (www.BruceEckel.com) 下載,並可以使用特定的工具從書籍的純 ASCII 文本中提取這些程式碼。作者還提供了一個附帶 seminar 的 CD-ROM,作為對 C 語言必要概念的更溫和的介紹,以幫助讀者過渡到 C++。

本書根據已最終確定的 ANSI/ISO C++ 標準編寫,反映了語言的最新特性和最佳實踐。儘管不同編譯器對標準的支持程度可能有所差異,但本書的範例旨在盡可能通用,以便在符合標準的編譯器上都能正常工作。

總體而言,本書卷二提供了一份關於標準 C++ 程式庫和進階 C++ 主題的詳盡且具指導性的資料,強調以設計為導向的思維方式,旨在幫助讀者掌握 C++ 語言的強大功能並建構更穩定的軟體系統。