C 11程式設計(第2版)英文版

C 11程式設計(第2版)英文版

《C 11程式設計(第2版)英文版》是2016年4月電子工業出版社出版的圖書,作者是【美】Paul Deitel(保羅.戴特爾) (美)Harvey Deitel(哈維.戴特爾)。

內容簡介

《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++程式中。

性能技巧

這些技巧強調的是如何讓程式運行得更快,或者儘量減少它們占用的記憶體。

可移植性技巧

可移植性技巧可以幫助你編寫能夠在各種平台上運行的代碼。

軟體工程意見

軟體工程意見強調的是影響軟體系統(尤其是大型系統)構建的架構和設計問題。

相關詞條

熱門詞條

聯絡我們