內容簡介
《C++11程式設計(第2版)英文版》利用活代碼深入研究C++11 和C++ 標準庫。內容包括C++11 的新特性,基於模板的標準庫容器、疊代器和算法,C++ 標準庫字元串,C++ 標準庫數組,構造重要類,面向對象編程的案例研究,異常處理,等等。本書示例豐富,包含了從計算機科學、商業、模擬、遊戲和其他主題中挑選出來的各種示例程式,並在三個具有工業強度的C++11 編譯器上對代碼進行了測試;書中配有大量的插圖,包括圖表、線條圖、UML 圖、程式和程式輸出。
《C++11程式設計(第2版)英文版》適合具有一定高級語言編程背景的程式設計師閱讀。
內容提要
《C++11程式設計(第2版)英文版》利用活代碼深入研究C++11 和C++ 標準庫。內容包括C++11 的新特性,基於模板的標準庫容器、疊代器和算法,C++ 標準庫字元串,C++ 標準庫數組,構造重要類,面向對象編程的案例研究,異常處理,等等。本書示例豐富,包含了從計算機科學、商業、模擬、遊戲和其他主題中挑選出來的各種示例程式,並在三個具有工業強度的C++11 編譯器上對代碼進行了測試;書中配有大量的插圖,包括圖表、線條圖、UML 圖、程式和程式輸出。
《C++11程式設計(第2版)英文版》適合具有一定高級語言編程背景的程式設計師閱讀。
目錄
1 Introduction
1.1 Introduction
1.2 C++
1.3 Object Technology
1.4 Typical C++ Development Environment
1.5 Test-Driving a C++ Application
1.6 Operating Systems
1.6.1 Windows—A Proprietary Operating System
1.6.2 Linux—An Open-Source Operating System
1.6.3 Apple’s OS X; Apple’s iOS for iPhone, iPad and iPod Touch Devices
1.6.4 Google’s Android
1.7 C++11 and the Open Source Boost Libraries
1.8 Web Resources
2 Introduction to C++ Programming, Input/Output and Operators
2.1 Introduction
2.2 First Program in C++: Printing a Line of Text
2.3 Modifying Our First C++ Program
2.4 Another C++ Program: Adding Integers
2.5 Arithmetic
2.6 Decision Making: Equality and Relational Operators
2.7 Wrap-Up
3 Introduction to Classes, Objects and Strings
3.1 Introduction
3.2 Defining a Class with a Member Function
3.3 Defining a Member Function with a Parameter
3.4 Data Members, set Member Functions and get Member Functions
3.5 Initializing Objects with Constructors
3.6 Placing a Class in a Separate File for Reusability
3.7 Separating Interface from Implementation
3.8 Validating Data with set Functions
3.9 Wrap-Up
4 Control Statements: Part 1; Assignment, ++ and -- Operators
4.1 Introduction
4.2 Control Structures
4.3 if Selection Statement
4.4 if … else Double-Selection Statement
4.5 while Repetition Statement
4.6 Counter-Controlled Repetition
4.7 Sentinel-Controlled Repetition
4.8 Nested Control Statements
4.9 Assignment Operators
4.10 Increment and Decrement Operators
4.11 Wrap-Up
5 Control Statements: Part 2; Logical Operators
5.1 Introduction
5.2 Essentials of Counter-Controlled Repetition
5.3 for Repetition Statement
5.4 Examples Using the for Statement
5.5 do … while Repetition Statement
5.6 switch Multiple-Selection Statement
5.7 break and continue Statements
5.8 Logical Operators
5.9 Confusing the Equality ( == ) and Assignment ( = ) Operators
5.10 Wrap-Up
6 Functions and an Introduction to Recursion
6.1 Introduction
6.2 Math Library Functions
6.3 Function Definitions with Multiple Parameters
6.4 Function Prototypes and Argument Coercion
6.5 C++ Standard Library Headers
6.6 Case Study: Random Number Generation
6.7 Case Study: Game of Chance; Introducing enum
6.8 C++11 Random Numbers
6.9 Storage Classes and Storage Duration
6.10 Scope Rules
6.11 Function Call Stack and Activation Records
6.12 Functions with Empty Parameter Lists
6.13 Inline Functions
6.14 References and Reference Parameters
6.15 Default Arguments
6.16 Unary Scope Resolution Operator
6.17 Function Overloading
6.18 Function Templates
6.19 Recursion
6.20 Example Using Recursion: Fibonacci Series
6.21 Recursion vs. Iteration
6.22 Wrap-Up
7 Class Templates array and vector ;
Catching Exceptions
7.1 Introduction
7.2 array s
7.3 Declaring array s
7.4 Examples Using array s
7.4.1 Declaring an array and Using a Loop to Initialize the array ’s Elements
7.4.2 Initializing an array in a Declaration with an Initializer List
7.4.3 Specifying an array ’s Size with a Constant Variable and Setting array Elements with Calculations
7.4.4 Summing the Elements of an array
7.4.5 Using Bar Charts to Display array Data Graphically
7.4.6 Using the Elements of an array as Counters
7.4.7 Using array s to Summarize Survey Results
7.4.8 Static Local array s and Automatic Local array s
7.5 Range-Based for Statement
7.6 Case Study: Class GradeBook Using an array to Store Grades
7.7 Sorting and Searching array s
7.8 Multidimensional array s
7.9 Case Study: Class GradeBook Using a Two-Dimensional array
7.10 Introduction to C++ Standard Library Class Template vector
7.11 Wrap-Up
8 Pointers
8.1 Introduction
8.2 Pointer Variable Declarations and Initialization
8.3 Pointer Operators
8.4 Pass-by-Reference with Pointers
8.5 Built-In Arrays
8.6 Using const with Pointers
8.6.1 Nonconstant Pointer to Nonconstant Data
8.6.2 Nonconstant Pointer to Constant Data
8.6.3 Constant Pointer to Nonconstant Data
8.6.4 Constant Pointer to Constant Data
8.7 sizeof Operator
8.8 Pointer Expressions and Pointer Arithmetic
8.9 Relationship Between Pointers and Built-In Arrays
8.10 Pointer-Based Strings
8.11 Wrap-Up
9 Classes: A Deeper Look; Throwing Exceptions
9.1 Introduction
9.2 Time Class Case Study
9.3 Class Scope and Accessing Class Members
9.4 Access Functions and Utility Functions
9.5 Time Class Case Study: Constructors with Default Arguments
9.6 Destructors
9.7 When Constructors and Destructors Are Called
9.8 Time Class Case Study: A Subtle Trap—Returning a Reference or a Pointer to a private Data Member
9.9 Default Memberwise Assignment
9.10 const Objects and const Member Functions
9.11 Composition: Objects as Members of Classes
9.12 friend Functions and friend Classes
9.13 Using the this Pointer
9.14 static Class Members
9.15 Wrap-Up
10 Operator Overloading; Class string
10.1 Introduction
10.2 Using the Overloaded Operators of Standard Library Class string
10.3 Fundamentals of Operator Overloading
10.4 Overloading Binary Operators
10.5 Overloading the Binary Stream Insertion and Stream Extraction Operators
10.6 Overloading Unary Operators
10.7 Overloading the Unary Prefix and Postfix ++ and -- Operators
10.8 Case Study: A Date Class
10.9 Dynamic Memory Management
10.10 Case Study: Array Class
10.10.1 Using the Array Class
10.10.2 Array Class Definition
10.11 Operators as Member vs. Non-Member Functions
10.12 Converting Between Types
10.13 explicit Constructors and Conversion Operators
10.14 Overloading the Function Call Operator ( )
10.15 Wrap-Up
11 Object-Oriented Programming: Inheritance
11.1 Introduction
11.2 Base Classes and Derived Classes
11.3 Relationship between Base and Derived Classes
11.3.1 Creating and Using a CommissionEmployee Class
11.3.2 Creating a BasePlusCommissionEmployee Class Without Using Inheritance
11.3.3 Creating a CommissionEmployee – BasePlusCommissionEmployee Inheritance Hierarchy
11.3.4 CommissionEmployee – BasePlusCommissionEmployee Inheritance Hierarchy Using protected Data
11.3.5 CommissionEmployee – BasePlusCommissionEmployee Inheritance Hierarchy Using private Data
11.4 Constructors and Destructors in Derived Classes
11.5 public , protected and private Inheritance
11.6 Software Engineering with Inheritance
11.7 Wrap-Up
12 Object-Oriented Programming: Polymorphism
12.1 Introduction
12.2 Introduction to Polymorphism: Polymorphic Video Game
12.3 Relationships Among Objects in an Inheritance Hierarchy
12.3.1 Invoking Base-Class Functions from Derived-Class Objects
12.3.2 Aiming Derived-Class Pointers at Base-Class Objects
12.3.3 Derived-Class Member-Function Calls via Base-Class Pointers
12.3.4 Virtual Functions and Virtual Destructors
12.4 Type Fields and switch Statements
12.5 Abstract Classes and Pure virtual Functions
12.6 Case Study: Payroll System Using Polymorphism
12.6.1 Creating Abstract Base Class Employee
12.6.2 Creating Concrete Derived Class SalariedEmployee
12.6.3 Creating Concrete Derived Class CommissionEmployee
12.6.4 Creating Indirect Concrete Derived Class BasePlusCommissionEmployee
12.6.5 Demonstrating Polymorphic Processing
12.7 (Optional) Polymorphism, Virtual Functions and Dynamic Binding“Under the Hood”
12.8 Case Study: Payroll System Using Polymorphism and Runtime Type Information with Downcasting, dynamic_cast , typeid and
type_info
12.9 Wrap-Up
13 Stream Input/Output: A Deeper Look
13.1 Introduction
13.2 Streams
13.2.1 Classic Streams vs. Standard Streams
13.2.2 iostream Library Headers
13.2.3 Stream Input/Output Classes and Objects
13.3 Stream Output
13.3.1 Output of char * Variables
13.3.2 Character Output Using Member Function put
13.4 Stream Input
13.4.1 get and getline Member Functions
13.4.2 istream Member Functions peek , putback and ignore
13.4.3 Type-Safe I/O
13.5 Unformatted I/O Using read , write and gcount
13.6 Introduction to Stream Manipulators
13.6.1 Integral Stream Base: dec , oct , hex and setbase
13.6.2 Floating-Point Precision ( precision , setprecision )
13.6.3 Field Width ( width , setw )
13.6.4 User-Defined Output Stream Manipulators
13.7 Stream Format States and Stream Manipulators
13.7.1 Trailing Zeros and Decimal Points ( showpoint )
13.7.2 Justification ( left , right and internal )
13.7.3 Padding ( fill , setfill )
13.7.4 Integral Stream Base ( dec , oct , hex , showbase )
13.7.5 Floating-Point Numbers; Scientific and Fixed Notation( scientific , fixed )
13.7.6 Uppercase/Lowercase Control ( uppercase )
13.7.7 Specifying Boolean Format ( boolalpha )
13.7.8 Setting and Resetting the Format State via Member Function flags
13.8 Stream Error States
13.9 Tying an Output Stream to an Input Stream
13.10 Wrap-Up
14 File Processing
14.1 Introduction
14.2 Files and Streams
14.3 Creating a Sequential File
14.4 Reading Data from a Sequential File
14.5 Updating Sequential Files
14.6 Random-Access Files
14.7 Creating a Random-Access File
14.8 Writing Data Randomly to a Random-Access File
14.9 Reading from a Random-Access File Sequentially
14.10 Case Study: A Transaction-Processing Program
14.11 Object Serialization
14.12 Wrap-Up
15 Standard Library Containers and Iterators
15.1 Introduction
15.2 Introduction to Containers
15.3 Introduction to Iterators
15.4 Introduction to Algorithms
15.5 Sequence Containers
15.5.1 vector Sequence Container
15.5.2 list Sequence Container
15.5.3 deque Sequence Container
15.6 Associative Containers
15.6.1 multiset Associative Container
15.6.2 set Associative Container
15.6.3 multimap Associative Container
15.6.4 map Associative Container
15.7 Container Adapters
15.7.1 stack Adapter
15.7.2 queue Adapter
15.7.3 priority_queue Adapter
15.8 Class bitset
15.9 Wrap-Up
16 Standard Library Algorithms
16.1 Introduction
16.2 Minimum Iterator Requirements
16.3 Algorithms
16.3.1 fill , fill_n , generate and generate_n
16.3.2 equal , mismatch and lexicographical_compare
16.3.3 remove , remove_if , remove_copy and remove_copy_if
16.3.4 replace , replace_if , replace_copy and replace_copy_if
16.3.5 Mathematical Algorithms
16.3.6 Basic Searching and Sorting Algorithms
16.3.7 swap , iter_swap and swap_ranges
16.3.8 copy_backward , merge , unique and reverse
16.3.9 inplace_merge , unique_copy and reverse_copy
16.3.10 Set Operations
16.3.11 lower_bound , upper_bound and equal_range
16.3.12 Heapsort
16.3.13 min , max , minmax and minmax_element
16.4 Function Objects
16.5 Lambda Expressions
16.6 Standard Library Algorithm Summary
16.7 Wrap-Up
17 Exception Handling: A Deeper Look
17.1 Introduction
17.2 Example: Handling an Attempt to Divide by Zero
17.3 Rethrowing an Exception
17.4 Stack Unwinding
17.5 When to Use Exception Handling
17.6 Constructors, Destructors and Exception Handling
17.7 Exceptions and Inheritance
17.8 Processing new Failures
17.9 Class unique_ptr and Dynamic Memory Allocation
17.10 Standard Library Exception Hierarchy
17.11 Wrap-Up
18 Introduction to Custom Templates
18.1 Introduction
18.2 Class Templates
18.3 Function Template to Manipulate a Class-Template Specialization Object
18.4 Nontype Parameters
18.5 Default Arguments for Template Type Parameters
18.6 Overloading Function Templates
18.7 Wrap-Up
19 Class string and String Stream Processing: A Deeper Look
19.1 Introduction
19.2 string Assignment and Concatenation
19.3 Comparing string s
19.4 Substrings
19.5 Swapping string s
19.6 string Characteristics
19.7 Finding Substrings and Characters in a string
19.8 Replacing Characters in a string
19.9 Inserting Characters into a string
19.10 Conversion to Pointer-Based char * Strings
19.11 Iterators
19.12 String Stream Processing
19.13 C++11 Numeric Conversion Functions
19.14 Wrap-Up
20 Bits, Characters, C Strings and struct s
20.1 Introduction
20.2 Structure Definitions
20.3 typedef
20.4 Example: Card Shuffling and Dealing Simulation
20.5 Bitwise Operators
20.6 Bit Fields
20.7 Character-Handling Library
20.8 C String-Manipulation Functions
20.9 C String-Conversion Functions
20.10 Search Functions of the C String-Handling Library
20.11 Memory Functions of the C String-Handling Library
20.12 Wrap-Up
21 Other Topics
21.1 Introduction
21.2 const_cast Operator
21.3 mutable Class Members
21.4 namespace s
21.5 Operator Keywords
21.6 Pointers to Class Members ( .* and ->* )
21.7 Multiple Inheritance
21.8 Multiple Inheritance and virtual Base Classes
21.9 Wrap-Up
22 ATM Case Study, Part 1:Object-Oriented Design with the UML
22.1 Introduction
22.2 Introduction to Object-Oriented Analysis and Design
22.3 Examining the ATM Requirements Document
22.4 Identifying the Classes in the ATM Requirements Document
22.5 Identifying Class Attributes
22.6 Identifying Objects’ States and Activities
22.7 Identifying Class Operations
22.8 Indicating Collaboration Among Objects
22.9 Wrap-Up
23 ATM Case Study, Part 2:Implementing an Object-Oriented Design
23.1 Introduction
23.2 Starting to Program the Classes of the ATM System
23.3 Incorporating Inheritance into the ATM System
23.4 ATM Case Study Implementation
23.4.1 Class ATM
23.4.2 Class Screen
23.4.3 Class Keypad
23.4.4 Class CashDispenser
23.4.5 Class DepositSlot
23.4.6 Class Account
23.4.7 Class BankDatabase
23.4.8 Class Transaction
23.4.9 Class BalanceInquiry
23.4.10 Class Withdrawal
23.4.11 Class Deposit
23.4.12 Test Program ATMCaseStudy.cpp
23.5 Wrap-Up
A Operator Precedence and Associativity
B ASCII Character Set
C Fundamental Types
D Number Systems
D.1 Introduction
D.2 Abbreviating Binary Numbers as Octal and Hexadecimal Numbers
D.3 Converting Octal and Hexadecimal Numbers to Binary Numbers
D.4 Converting from Binary, Octal or Hexadecimal to Decimal
D.5 Converting from Decimal to Binary, Octal or Hexadecimal
D.6 Negative Binary Numbers: Two’s Complement Notation
E Preprocessor
E.1 Introduction
E.2 #include Preprocessing Directive
E.3 #define Preprocessing Directive: Symbolic Constants
E.4 #define Preprocessing Directive: Macros
E.5 Conditional Compilation
E.6 #error and #pragma Preprocessing Directives
E.7 Operators # and ##
E.8 Predefined Symbolic Constants
E.9 Assertions
E.10 Wrap-Up
Index
作者簡介
Paul Deitel,Deitel & Associates有限公司的CEO兼CTO,畢業於麻省理工學院,主修信息技術。通過Deitel & Associate有限公司,他已經為行業、政府機關和軍隊客戶提供了數百節編程課程,這些客戶包括思科、IBM、西門子、Sun Microsystems、戴爾、Fidelity、
甘迺迪航天中心、美國國家強風暴實驗室、白沙飛彈試驗場、Rogue Wave Software、波音公司、SunGard Higher Education、
北電網路公司、彪馬、iRobot、Invensys等。他和本書的合著者Harvey Deitel博士是暢銷全球的程式語言教材、專業書籍和視頻的作者。
Harvey Deitel博士,Deitel & Associates有限公司的董事長和首席戰略官,在計算機領域中擁有五十多年的經驗。Deitel博士獲得了
麻省理工學院電子工程(學習計算)的學士和碩士學位,並獲得了波士頓大學的數學博士學位(學習計算機科學)。在20世紀60年代,通過先進的計算機技術和計算機套用公司,他成為了創建各種IBM作業系統的團隊中的一員。在20世紀70年代,他創建了商業作業系統。他擁有豐富的大學教學經驗,在1991年與兒子Paul Deitel創辦Deitel & Associates有限公司之前,他是波士頓大學計算機科學系的主任,並獲得了終身任職權。Deitel的出版物獲得了國際上的認可,並被翻譯為繁體中文、簡體中文、韓語、日語、德語、俄語、西班牙語、法語、波蘭語、義大利語、葡萄牙語、希臘語、烏爾都語和土耳其語。Deitel博士為很多大公司、學術研究機構、政府機關和軍方提供了數百場專業編程講座。
前言
“語言的首要價值是清晰……”
——Galen
歡迎閱讀本書。本書會向軟體開發人員介紹最先進的計算技術。
我們專注於軟體工程的最佳實踐。本書沿用了Deitel特色的“程式實況解說”風格——用完整的可運行程式(而不是代碼片段)來解釋相關概念。每個完整的代碼示例都配有生動的示例。
本書特色
本書的主要特色如下所述。
C++11標準
2011年發布的C++11新標準是我們寫這本書的動機。我們使用標有“11”的圖示來表示在本書中提到的每個C++11新特性,如本頁的空白處所示。這一版包含的一些C++11特性如下。
符合C++11新標準。廣泛地覆蓋了C++11的新特性。
在3個具有工業強度的C++11編譯器上對代碼進行了測試。我們在GNU C++ 4.7、Microsoft Visual C++ 2012和Apple Xcode 4.5的LLVM上對代碼示例進行了測試。
智慧型指針。智慧型指針可以幫助你避免動態由於提供了內置指針無法實現的功能而導致的記憶體管理錯誤。我們將在第17章討論unique_ptr,在第24章討論shared_ptr和weak_ptr。
更早地介紹基於模板的標準庫容器、疊代器和算法,並用C++11新特性對這些內容進行了擴充。我們將第1版中位於第20章的標準庫容器、疊代器和算法的處理移到了第15章和第16章,並且使用C++11新特性對這些內容進行了擴充。你需要的絕大多數數據結構都可以通過重用這些標準庫來實現。
線上閱讀第24章。我們將在這一章介紹C++11的其他主題。C++11新標準是在2011年發布的,但並非所有的
C++編譯器都完全支持這些特性。在我們編寫本書時,如果某個C++特性已經在這3個主要的編譯器中實現了,我們就用文本和代碼實例來介紹該特性。如果這3個編譯器都沒有實現該特性,我們就用粗斜體標題和對這個特性的簡短說明來介紹它。當這些特性被編譯器實現時,我們就會在第24章對這些簡短說明進行擴充。之所以將本章放在網上,是因為這樣做我們就可以動態更新其內容。本章包含對正則表達式、shared_ptr和weak_ptr智慧型指針、移動語義等的討論。
R隨機數生成、模擬和遊戲。為了讓程式更安全(參見下一頁的“C++安全編程”一節),我們會在本書中討論C++11的非確定性隨機數生成機制。
面向對象程式設計
提早介紹對象。我們在本書的第1章就介紹了對象技術的基本概念和術語,在第3章將會帶你開發一個自定義的C++類和對象。
C++標準庫字元串。C++提供了兩種類型的字元串——字元串類對象(從第3章開始使用)和C字元串(來自C語言)。我們用C++字元串類的實例替換了大多數C字元串,以便讓程式變得更健壯,並消除C字元串帶來的很多安全問題。我們稍後會在本書中討論C字元串,以便讓你能夠使用工業上的遺留代碼。在新的開發項目中,你應該支持字元串對象。
C++標準庫數組。我們在本書中使用的主要是標準庫的數組類模板,而不是內置的、C風格的、基於指針的數組。但我們還是會介紹內置數組,因為它們仍然會被用在C++中,而且了解它才能夠閱讀遺留代碼。C++提供了三種類型的數組——類模板數組、vector(從第7章開始使用),以及C風格的、基於指針的數組(在第8章介紹)。我們在本書中會酌情使用模板數組和類模板vector(偶爾),而不是C數組。在新的開發項目中,你應該支持類模板數組和vector。
構造重要類。本書的一個主要目標是讓你構造重要的、可重用的C++類。在第10章的案例研究中,你將創建自己的自定義Array類。第10章以類模板字元串的測試驅動開始,這樣在你使用重載操作符實現自己的自定義類前,可以先看到如何使用
操作符重載。
面向對象編程的案例研究。我們提供了跨越多個章節並涵蓋了軟體開發生命周期的案例研究。這些案例研究包括第3~7章的GradeBook類,第9章的Time類和第11章、第12章的Employee類。第12章用詳細的圖表說明了C++如何“在幕後”實現多態、虛函式和動態綁定。
可選案例研究:使用UML創建一個ATM的面向對象設計和C++實現。UML(統一建模語言,Unified Modeling Language)是為面向對象系統建模的行業標準圖形化語言。我們在本書的前幾章就介紹了UML。第22章和第23章包含使用UML來進行面向對象設計的可選案例研究。我們設計並實現了一個簡單的
自動取款機(ATM)的軟體。我們分析了一個指定如何構建系統的典型需求文檔。我們確定了實現該系統所需要的類、這些類需要擁有的屬性和這些類需要表現出的行為,我們還指定了這些類必須如何互動才能滿足系統需求。我們根據設計產生了一個完整的C++實現。讀者經常反饋說這個案例研究“將所有內容都聯繫起來”,並讓他們對面向對象有了更深入的了解。
異常處理。在本書的前幾章就包含了基本的異常處理。你可以從第17章來了解異常處理的更多內容。
主要的編程範式。我們在本書中討論了面向對象編程和泛型編程。
C++安全編程
很難創建出可以抵抗病毒、蠕蟲等其他“惡意軟體”攻擊的、具有工業強度的系統。如今,通過網際網路,這類攻擊瞬間就可以對全球範圍造成影響。從開發周期的一開始就在軟體中加入安全性,可以大大減少安全風險。
人們創建了CERT Coordination Center來分析和及時應對攻擊。CERT(計算機安全應急回響小組,Computer Emergency Response Team)是一個政府資助的組織,位於卡內基梅隆大學軟體工程研究所。CERT會發布和推廣各種流行程式語言的安全編碼標準,幫助軟體開發人員實現具有工業強度的系統,從而避免會造成開放式系統受到攻擊的編程實踐。
我們要感謝Robert C. Seacord,他是CERT的安全編程管理員和
卡內基梅隆大學計算機科學系的副教授。Seacord先生是C How to Program, 7e一書的技術評審,他從安全形度審查了這本書中的C語言程式,並建議我們遵守CERT C語言安全編程標準。
本書也遵守CERT C++安全編碼標準指南(符合書籍水平)
我們很高興地發現,從20世紀90年代早期開始我們就在書籍中推薦了這些編程實踐。如果你要創建具有工業強度的C++系統,就一定不要錯過Secure Coding in C and C++, 2e(Robert Seacord,Addison-Wesley Professional出版)。
教學方法
本書強調的是程式的清晰性,並專注於構建良好的軟體工程。
程式實況解說。本書包含上百個“程式實況解說”示例——每個新概念都是在完整的可運行C++程式中提出的,緊接著是顯示該程式輸入和輸出的一個或者多個實際執行。
語法著色。為了增加可讀性,我們為代碼添加了語法陰影,這與大多數IDE和代碼編輯器給代碼的語法添加顏色是類似的。我們採用的代碼的著色約定是:
注釋用常規字型表示
關鍵字用粗黑字型表示
常量和字面值用比關鍵字稍淺一點的粗灰字來表示
所有的其他代碼以黑體表示
代碼高亮顯示。本書在每個原始碼程式的關鍵代碼段都放置了一個灰色的矩形框。
使用字型突出顯示。為了便於參考,我們用粗體表示每個定義性出現的關鍵概念和索引的頁面引用,用加粗的Helvetica字型來強調螢幕組件(例如,File選單),用Lucida字型來強調C語言程式文本(例如,int x = 5;)。
編程技巧。我們提供了編程技巧來幫助你關注程式開發的重要方面。這些技巧和實踐是我們在8年編程和企業培訓經驗中積累的精華。最佳編程實踐
最佳編程實踐讓讀者關注那些有助於產生更清晰、更易理解和維護程式的技術。
常見編程錯誤
指出這些常見的編程錯誤可以降低讀者犯類似錯誤的可能性。
錯誤預防技巧
這些技巧包括揭露和刪除程式中bug的建議;大多數技巧描述的是如何預防將bug帶入C++程式中。
性能技巧
這些技巧強調的是如何讓程式運行得更快,或者儘量減少它們占用的記憶體。
可移植性技巧
可移植性技巧可以幫助你編寫能夠在各種平台上運行的代碼。
軟體工程意見
軟體工程意見強調的是影響軟體系統(尤其是大型系統)構建的架構和設計問題。