C++程式設計教程(第二版)

《C++程式設計教程(第二版)》是一本正文語種為簡體中文的書籍。

內容簡介

本書是《C++程式設計教程》的第二版。然而從指導思想、內容結構、寫作特點等方面,都以全新的面貌呈現於讀者。全書全部重新執筆,代碼全部重寫,涵蓋了基本C++編程方法的全部技術特徵。

本書以C++標準為藍本,從過程化編程的基本描述,到對象化編程的方法展開,乃至高級編程的實質揭示,形成一條自然流暢的主線,通俗易懂,形象風趣。本書在內容結構上自成體系,並以獨特的描述手法,輻射到計算機專業其他諸課程,體系嚴謹,結構獨特。

目錄

第一部分 基礎編程(Part I The Basic Programming)

第1章 概述(Introduction) 2

1.1 程式設計語言(Programming Language) 2

1.2 C++前史(The Origins and History of C++) 4

1.3 C++ 5

1.3.1 褒貶C(Comment on C) 5

1.3.2 C繼承者(Inheritor of C) 6

1.3.3 標準C++(Standard C++) 7

1.4 C++編程流程(C++ Programming Flow) 8

1.4.1 編程過程(Programming Procedure) 8

1.4.2 最小樣板程式(Minimum Sample Program) 9

1.4.3 編程風格(Programming Style) 10

1.5 程式與算法(Programs & Algorithms) 11

1.5.1 程式(Programs) 11

1.5.2 算法(Algorithms) 11

1.5.3 編程與結構(Programming & Structures) 12

1.6 過程化程式設計(Procedural Programming) 13

1.6.1 基於過程的程式設計(Procedure-Based Programming) 13

1.6.2 結構化程式設計(Structured Programming) 16

1.7 對象化程式設計(Objectified Programming) 17

1.7.1 基於對象的程式設計(Object-Based Programming) 17

1.7.2 面向對象的程式設計(Object-Oriented Programming) 20

1.8 目的歸納(Conclusion) 21

1.9 練習1(Exercises 1) 23

第2章 基本編程語句(Basic Programming Statements) 24

2.1 說明語句(Declarative Statements) 24

2.1.1 變數定義(Variable Definition) 25

2.1.2 函式聲明和定義(Function Declaration & Definition) 26

2.1.3 初始化與賦值(Initializing & Assignment) 27

2.2 條件語句(Conditional Statements) 27

2.2.1 if語句(if Statement) 27

2.2.2 條件表達式(Conditional Expressions) 30

2.2.3 switch語句(switch Statement) 31

2.2.4 if或switch語句(if or switch) 34

2.3 循環語句(Loop Statements) 34

2.3.1 for循環結構(for Loop Structure) 34

2.3.2 for循環(for Loop) 36

2.3.3 while循環(while Loop) 37

2.3.4 do-while循環(do-while Loop) 39

2.4 循環設計(Loop Designs) 40

2.4.1 字元圖形(Character Graphics) 40

2.4.2 素數判定(Prime Decision) 44

2.5 輸入輸出語句(I/O Statements) 45

2.5.1 標準I/O流(Standard I/O Stream) 45

2.5.2 流狀態(Stream States) 46

2.5.3 檔案流(File Streams) 48

2.6 轉移語句(Move Statements) 51

2.6.1 break語句(break Statement) 51

2.6.2 continue語句(continue Statement) 51

2.6.3 goto語句(goto Statement) 53

2.7 再做循環設計(More Loop Designs) 55

2.7.1 邏輯判斷(Logic Decision) 55

2.7.2 級數逼近(Progression Approximation) 57

2.8 目的歸納(Conclusion) 60

2.9 練習2(Exercises 2) 61

第3章 數據類型(Data Types) 64

3.1 整型(int Types) 65

3.1.1 二進制補碼(Binary Complement) 65

3.1.2 整型數表示範圍(int Range) 67

3.1.3 編譯器與整數長度(Compiler & int Length) 68

3.1.4 整數字面值(Integer Literals) 68

3.1.5 整數算術運算(Integer Arithmetic Operations) 69

3.2 整數子類(int Subtypes) 70

3.2.1 字元型(char Type) 70

3.2.2 枚舉型(enum Type) 71

3.2.3 布爾型(bool Type) 72

3.3 浮點型(float Type) 72

3.3.1 浮點數表示(Floating-Point Number Representation) 72

3.3.2 浮點型表示範圍(float Type Ranges) 76

3.4 C-串與string(C-strings & string) 77

3.4.1 C-串(C-strings) 77

3.4.2 字元指針與字元數組(char Pointers & char Arrays) 77

3.4.3 string 80

3.4.4 string與C-串的輸入輸出(string & C-string I/O) 81

3.4.5 string流(string Streams) 82

3.5 數組(Arrays) 83

3.5.1 元素個數(Number of Elements) 83

3.5.2 初始化(Initialization) 84

3.5.3 默認值(Default Values) 85

3.5.4 二維數組(2-D Arrays) 86

3.6 向量(Vectors) 87

3.6.1 基本操作(Basic Operations) 87

3.6.2 添加元素(Adding Elements) 88

3.6.3 二維向量(2-D Vectors) 89

3.7 指針與引用(Pointers & References) 91

3.7.1 指針(Pointers) 91

3.7.2 指針的類型(Pointer Types) 93

3.7.3 指針運算(Pointer Operations) 95

3.7.4 指針限定(Pointers Restrictions) 97

3.7.5 引用(Reference) 98

3.8 目的歸納(Conclusion) 100

3.9 練習3(Exercises 3) 100

第4章 計算表達(Computation Expressing) 103

4.1 名詞解釋與操作符(Name Explanation & Operators) 103

4.1.1 名詞解釋(Some Name Explanations) 103

4.1.2 操作符匯總(Operators Summary) 105

4.1.3 操作符的說明(Operator Expanations) 105

4.2 算術運算問題(Arithmetic Problems) 106

4.2.1 周而復始的整數(int: Move in Cycles) 106

4.2.2 算法局限性(Algorithm Limitation) 107

4.2.3 中間結果溢出(Intermediate Result Overflow) 108

4.2.4 浮點數的比較(Floating-Point Number Comparison) 109

4.3 相容類型的轉換(Cast Compatible Types) 111

4.3.1 隱式轉換(Implicit Cast) 111

4.3.2 精度丟失(Lost Precision) 112

4.3.3 顯式轉換(Explicit Cast) 113

4.4 關係與邏輯操作(Relations & Logic Operations) 114

4.4.1 條件表達(Condition Expressing) 115

4.4.2 基本邏輯與短路求值(Basic Logic & Short-Circuit Evaluation) 117

4.4.3 邏輯推演(Logic Inference & Deduction) 118

4.5 位操作(Bit Operations) 119

4.5.1 位操作種類(The Kinds of Bit Operations) 119

4.5.2 位操作實例(Bit Operation Example) 120

4.6 增量操作(Increment Operations) 122

4.6.1 增量操作符(Increment Operator) 122

4.6.2 操作符識別(Operator Recognition) 123

4.6.3 指針的增量操作(Pointer Increment Operation) 124

4.7 表達式的副作用(Expression's Side Effects) 125

4.7.1 運算元求值順序(Operands Evaluating Order) 125

4.7.2 編譯器相關(Complier Correlated) 126

4.7.3 交換律失效(Commutation Law Invalidation) 127

4.7.4 括弧失效(Bracket Invalidation) 127

4.7.5 消除副作用(Avoiding Side Effects) 128

4.8 目的歸納(Conclusion) 128

4.9 練習4(Exercises 4) 129

第二部分 過程化編程(PartⅡ The Procedural Programming)

第5章 函式機制(Function Mechanism) 134

5.1 函式性質(Function Character) 134

5.1.1 函式的形態(The Function Forms) 134

5.1.2 函式黑盒(Function Blackbox) 136

5.1.3 傳值參數(Value-Passed Parameters) 137

5.2 指針參數(Pointer Parameters) 139

5.2.1 指針和引用參數(Pointer & Reference Parameters) 139

5.2.2 函式的副作用(Function's Side Effect) 142

5.3 棧機制(The Stack Mechanism) 145

5.3.1 運行時記憶體布局(Runtime Memory Layout) 145

5.3.2 棧區(The Stack Area) 145

5.3.3 局部數據的不確定性(Uncertainty of Local Data) 148

5.3.4 指針作祟(The Menacing Pointers) 149

5.4 函式指針(Function Pointers) 150

5.4.1 指向函式的指針(Function Pointers) 151

5.4.2 函式指針參數(Function Pointer Parameters) 152

5.4.3 函式指針數組(Function Pointer Arrays) 154

5.4.4 簡略函式指針表示(The Outline of Function Pointers) 155

5.4.5 函式指針的意義(The Sense of Function Pointers) 156

5.5 main函式參數(The main's Arguments) 157

5.5.1 命令行重定向(Redirecting Command Line) 157

5.5.2 使用main參數(Using main Arguments) 158

5.6 遞歸函式(Recursive Functions) 161

5.6.1 遞歸本質(Essence of Recursions) 161

5.6.2 遞歸條件(Condition of Recursions) 163

5.6.3 消去遞歸(Removing Recursions) 164

5.6.4 遞歸評說(Comment on Recursions) 164

5.7 函式重載(Function Overload) 165

5.7.1 重載概念(Concept of Function Overload) 165

5.7.2 重載函式匹配(Overloaded Function Call Matches) 166

5.7.3 重載技術(Function Overload Technology) 167

5.7.4 默認參數(Default Parameters) 168

5.7.5 默認參數規則(Default Parameter Rules) 169

5.7.6 無名參數(Nameless Parameters) 170

5.7.7 重載或參數默認(Overload or Parameter Default) 170

5.8 目的歸納(Conclusion) 172

5.9 練習5(Exercises 5) 173

第6章 性能(Performance) 176

6.1 內聯函式(Inline Functions) 177

6.1.1 概念(Concept) 177

6.1.2 規則(Rules) 179

6.1.3 性能測試(Performance Testing) 180

6.2 數據結構(Data Structures) 181

6.2.1 STL中的容器(STL Container) 181

6.2.2 安排車廂順序(Arranging Carriage Order) 181

6.2.3 棧法(Stack Method) 182

6.2.4 向量法(Vector Method) 184

6.3 算法(Algorithms) 185

6.3.1 算法與性能(Algorithms & Performance) 185

6.3.2 Fibonacci數列算法分析(Fib's Algorithms Analyses) 185

6.3.3 選擇算法(Selecting Algorithms) 188

6.4 數值計算(Numerical Computation) 189

6.4.1 求解積分問題(Solving Integral Problems) 189

6.4.2 矩形法(Rectangle Method) 190

6.4.3 辛普生法(Simpson Method) 191

6.5 標準C++算法(Standard C++ Algorithms) 194

6.5.1 集合元素訪問(Element Access of set) 194

6.5.2 判斷字串相等1(Judging String Equal 1) 194

6.5.3 判斷字串相等2(Judging String Equal 2) 195

6.5.4 判斷字串相等3(Judging String Equal 3) 196

6.5.5 剩餘串排列1(Arranging Remained String 1) 197

6.5.6 剩餘串排列2(Arranging Remained String 2) 198

6.6 動態記憶體(Dynamic Memory) 199

6.6.1 預留向量空間(Reserving Vector Space) 199

6.6.2 蠻做素數判斷(Judging Prime Foolhardily) 200

6.6.3 空間換時間(Trade Space for Time) 201

6.7 低級編程(Lower Programming) 202

6.7.1 C編程(C Programming) 202

6.7.2 低級篩法(Lower Sieve Solution) 204

6.7.3 篩法性能的比較(Comparing Sieves Performance) 206

6.8 目的歸納(Conclusion) 207

6.9 練習6(Exercises 6) 209

第7章 程式結構(Program Structure) 214

7.1 函式組織(Function Organization) 214

7.1.1 程式構成(Program Composition) 214

7.1.2 程式檔案拆分(Split up Program File) 216

7.2 頭檔案(Header Files) 217

7.2.1 原始頭檔案(Original Header File) 217

7.2.2 界面頭檔案(Header File as Interface) 219

7.2.3 頭檔案的內容(Content of Header File) 220

7.3 全局數據(Global Data) 221

7.3.1 全局數據訪問(Global Data Access) 221

7.3.2 消除全局數據(Removing Global Data) 223

7.3.3 一次定義原則(One-Definition Rule) 224

7.3.4 全局常量(Global Constant) 227

7.4 靜態數據(Static Data) 229

7.4.1 靜態全局數據(Static Global Data) 229

7.4.2 靜態局部數據(Static Local Data) 231

7.5 作用域與生命期(Scopes & Lifetime) 232

7.5.1 作用域(Scopes) 232

7.5.2 生命期(LifeTime) 235

7.6 名空間(Namespace) 236

7.6.1 名空間的概念(Namespace Concept) 236

7.6.2 名空間的組織(Namespace Organization) 237

7.6.3 組織模組(Module Organization) 239

7.6.4 數據名衝突(Data Name Clash) 242

7.6.5 名空間的用法(Using namespace) 243

7.7 預編譯(Pre-Compilation) 244

7.7.1 #include指令(#include) 244

7.7.2 條件編譯指令(Condition Compiling Directive) 245

7.7.3 頭檔案衛士(Header File Safeguard) 246

7.7.4 #define指令(#define) 246

7.8 目的歸納(Conclusion) 247

7.9 練習7(Exercises 7) 248

第三部分 面向對象編程技術(Part III The Object-Oriented Programming)

第8章 類(Classes) 252

8.1 從結構到類(From Structure to Class) 252

8.1.1 定義結構(Defining Structure) 252

8.1.2 定義類(Defining Class) 255

8.2 成員函式(Member Functions) 257

8.2.1 成員函式定義(Member Function Definition) 257

8.2.2 使用對象指針(Using Object Pointer) 259

8.2.3 常成員函式(Const Member Functions) 260

8.2.4 重載成員函式(Overloading Member Functions) 261

8.3 操作符(Operators) 262

8.3.1 函式重載特徵(Function Overloading Features) 262

8.3.2 性質(Character) 264

8.3.3 值返回與引用返回(Returning Values or References) 265

8.3.4 增量操作符(Increment Operators) 266

8.3.5 成員操作符(Member Operators) 267

8.4 再論程式結構(Program Structure Restatement) 269

8.4.1 訪問控制(Access Controls) 269

8.4.2 類的程式結構(Program Structure with Classes) 270

8.4.3 類作用域(Class Scope) 272

8.5 禁止類的實現(Shield Class Implementations) 273

8.5.1 意義(Significance) 273

8.5.2 影響編程方法(Affecting Programming Method) 276

8.5.3 影響語言設計(Affecting Language Designing) 277

8.6 靜態成員(Static Members) 277

8.6.1 靜態數據成員(Static Data Members) 277

8.6.2 靜態成員函式(Static Member Functions) 280

8.7 友元(Friends) 281

8.7.1 頻繁調用問題(Frequent Calling Problems) 281

8.7.2 提高訪問性能(Improving Access Performance) 284

8.7.3 其他特徵(Other Features) 286

8.8 目的歸納(Conclusion) 288

8.9 練習8(Exercises 8) 288

第9章 對象生滅(Object Birth & Death) 293

9.1 構造函式設計(Constructor Design) 293

9.1.1 初始化要求(Initialization Requirement) 293

9.1.2 封裝性要求(Encapsulation Requirement) 294

9.1.3 函式形式(Function Form) 295

9.1.4 無返回值(Non Return-Type) 296

9.1.5 set的缺憾(Disfigurement of set) 296

9.1.6 一次性對象(Only-One-Time Object) 298

9.2 構造函式的重載(Constructor Overload) 298

9.2.1 重載構造函式(Overload Constructor) 298

9.2.2 無參構造函式(Non-Parameter Constructor) 301

9.3 類成員初始化(Class Member Initialization) 302

9.3.1 默認調用的無參構造函式(Default Calling Non-Parameter

Constructor) 302

9.3.2 初始化的困惑(Initialization Puzzle Dom) 304

9.3.3 成員的初始化(Initializing Members) 305

9.4 構造順序(Constructing Order) 307

9.4.1 局部對象(Local Objects) 307

9.4.2 全局對象(Global Objects) 308

9.4.3 成員對象(Member Objects) 309

9.4.4 構造位置(Constructing Position) 310

9.5 拷貝構造函式(Copy Constructor) 311

9.5.1 對象本體與實體(Object Realty & Entity) 311

9.5.2 默認拷貝構造函式(Default Copy Constructor) 313

9.5.3 自定義拷貝構造函式(User-Defined Copy Constructor) 315

9.6 析構函式(Destructors) 316

9.7 對象轉型與賦值(Object Conversion & Assignment) 318

9.7.1 用於轉型的構造函式(Constructor Used as Type Conversion) 318

9.7.2 對象賦值(Object Assignment) 320

9.8 目的歸納(Conclusion) 322

9.9 練習9(Exercises 9) 323

第10章 繼承(Inheritance) 327

10.1 繼承結構(Inheritance Structure) 327

10.1.1 類層次結構(Class Hierarchy Structure) 327

10.1.2 派生類對象結構(Derived Object Structure) 329

10.2 訪問父類成員(Access Father's Member) 330

10.2.1 繼承父類成員(Inherit Father's Member) 330

10.2.2 類內訪問控制(Access Control in Class) 332

10.3 派生類的構造(Constructing Derived Classes) 334

10.3.1 默認構造(Default Construction) 334

10.3.2 自定義構造(User-Defined Construction) 334

10.3.3 拷貝構造與賦值(Copy Construction & Assignment) 336

10.3.4 對象構造順序(Object Constructing Order) 336

10.4 繼承方式(Inheritance Mode) 337

10.4.1 繼承訪問控制(Inheriting Access Control) 337

10.4.2 調整訪問控制(Adjusting Access Control) 340

10.5 繼承與組合(Inheritance & Composition) 341

10.5.1 對象結構(Object Structure) 341

10.5.2 性質差異(Character Differentiation) 341

10.5.3 對象分析(Object Analysis) 342

10.5.4 繼承設計(Inheritance Design) 344

10.5.5 組合設計(Composition Design) 345

10.6 多繼承概念(Multi-Inheritance Concept) 347

10.6.1 多繼承結構(Multi-Inheritance Structure) 347

10.6.2 基類成員名衝突(Base-Class Member Name Collision) 348

10.6.3 基類分解(Base-Class Decomposition) 349

10.7 多繼承技術(Multi- Inheritance Technology) 350

10.7.1 虛擬繼承(Virtual Inheritance) 350

10.7.2 多繼承對象構造順序(Multi-Inheritance Object Constructing Order) 352

10.7.3 多繼承評價(Multi-Inheritance Evaluation) 352

10.8 目的歸納(Conclusion) 353

10.9 練習10(Exercises 10) 354

第11章 基於對象編程(Object-Based Programming) 356

11.1 抽象編程(Abstract Programming) 357

11.1.1 行為抽象(Action Abstract) 357

11.1.2 數據抽象(Data Abstract) 358

11.1.3 數據結構(Data Structure) 359

11.2 編程質量(Programming Quality) 360

11.2.1 可讀性(Readability) 360

11.2.2 易編程性(Programability) 361

11.2.3 安全性(Safety) 362

11.2.4 可維護性(Maintainability) 362

11.2.5 可擴充性(Extensibility) 363

11.2.6 效率(Efficiency) 363

11.3 分析Josephus問題(Analysis the Josephus Problem) 365

11.3.1 問題描述(Problem Description) 365

11.3.2 過程化分析(Procedure Analysis) 365

11.3.3 基於對象的分析(Object-Based Analysis) 367

11.4 基於過程的解決方案(Procedure-Based Solution) 368

11.4.1 算法(The Algorithm) 368

11.4.2 算法解釋(Algorithm Explanation) 369

11.4.3 算法實現(Algorithm Implementation) 370

11.5 基於對象的解決方案(Object-Based Solution) 372

11.5.1 算法(The Algorithm) 372

11.5.2 算法解釋(Algorithm Explanation) 373

11.5.3 算法實現(Algorithm Implementation) 375

11.5.4 程式解釋(Program Explanation) 378

11.6 程式維護(Program Maintenance) 379

11.7 程式擴展(Program Extension) 381

11.8 目的歸納(Conclusion) 384

11.9 練習11(Exercises 11) 385

第四部分 高級編程(Part Ⅳ The Advanced Programming)

第12章 多態(Polymorphism) 388

12.1 繼承召喚多態(Inheritance Summon up Polymorphism) 388

12.1.1 祖孫互易的說明(Explaining Up & Down Exchanging) 388

12.1.2 覆蓋父類操作(Overlapping Superclass Operation) 389

12.1.3 同化效應(Assimilation Effect) 391

12.1.4 渴望多態(Thirsting for Polymorphism) 392

12.2 抽象編程的困惑(Abstract Programming Perplexity) 393

12.2.1 類型域方案(Type Fields Scheme) 393

12.2.2 破壞抽象編程(Destroy Abstract Programming) 395

12.2.3 渴望內在的多態(Thirsting for Inner Polymorphism) 396

12.3 虛函式(Virtual Function) 396

12.3.1 多態條件(Polymorphism Condition) 396

12.3.2 虛函式機理(Virtual Function Mechanism) 397

12.3.3 面向對象的真意(Object-Oriented Intendment) 398

12.3.4 虛函式的傳播(Spreading Virtual Functions) 399

12.4 避免虛函式誤用(Avoiding Misuse of Virtual Function) 400

12.4.1 搞清重載與覆蓋(Making Clear on Overload & Overlap) 400

12.4.2 返回類型的例外(Exception of Return Type) 401

12.4.3 若干限制(Restrictions) 403

12.5 精簡共性的類(Simplify Class with Generality) 404

12.5.1 孤立的類(Isolated Classes) 404

12.5.2 減少冗餘代碼(Reducing Verbose Code) 407

12.5.3 改變基類殃及子類(SubClass Suffered by Modifying Base-Class) 410

12.6 多態編程(Polymorphic Programming) 410

12.6.1 共同基類方案(Shared Base-Class Scheme) 410

12.6.2 自定義鍊表類(User-Defined Linked List Class) 414

12.6.3 表現多態(Polymorphism Showing) 416

12.7 類型轉換(Type Conversions) 417

12.7.1 動態轉型(dynamic_cast) 417

12.7.2 靜態轉型(static_cast) 419

12.7.3 常量轉型(const_cast) 420

12.8 目的歸納(Conclusion) 421

12.9 練習12(Exercises 12) 422

第13章 抽象類(Abstract Class) 424

13.1 抽象基類(Abstract Base-Class) 424

13.1.1 無意義的基類對象(Nonsensical Base-Class Objects) 424

13.1.2 純虛函式(Pure Virtual Functions) 425

13.2 抽象類與具體類(Abstract & Concrete Classes) 426

13.3 深度隔離的界面(Deeply Parted Interface) 429

13.3.1 日期的年月日版本(Year-Month-Day of Date VER) 429

13.3.2 日期的天數版本(Day-Number of Date VER) 430

13.3.3 應用程式界面(Application Interface) 432

13.4 抽象類做界面(Abstract Class As Interface) 434

13.4.1 抽象基類方案(The Abstract Base-Class Scheme) 434

13.4.2 抽象基類IDate(Abstract Base-Class IDate) 435

13.4.3 創建Date對象(Creating Date Objects) 436

13.4.4 子類Date(Subclass Date) 437

13.4.5 套用系統編程技術(Application Programming) 438

13.5 演繹概念設計(Deducting Concept Design) 440

13.5.1 面向對象的模組(Object-Oriented Module) 440

13.5.2 Sony類層次結構(Class Sony Hierarchy) 440

13.5.3 Sony類定義(Defining Class Sony) 442

13.5.4 CreateSony類層次結構(Class CreateSony Hierarchy) 445

13.5.5 CreateSony的子類定義(Defining Class CreateSony) 447

13.5.6 套用系統編程技術(Application Programming) 449

13.6 系統擴展(System Extension) 451

13.6.1 新添一個界面(Adding One Interface) 451

13.6.2 新添一種技術(Adding One Technology) 453

13.7 手柄(Handle) 455

13.7.1 對象指針問題(Object Pointer Problem) 455

13.7.2 對象指針的外套(The Coat of Object Pointer) 456

13.7.3 可用的手柄類(Usable Handle) 457

13.8 目的歸納(Conclusion) 459

13.9 練習13(Exercises 13) 459

第14章 模板(Templates) 461

14.1 函式模板(Function Templates) 461

14.1.1 函式重載的困惑(Function Overload Perplexity) 461

14.1.2 函式模板的定義(Defining Function Template) 462

14.1.3 函式模板的用法(Using Function Templates) 463

14.2 函式模板參數(Function Template Parameters) 465

14.2.1 苛刻的類型匹配(Rigorous Type Match) 465

14.2.2 數據形參(Data Arguments) 466

14.2.3 常量引用型形參(const Reference Arguments) 466

14.2.4 引用型形參(Reference Arguments) 467

14.2.5 函式模板重載(Function Template Overloading) 468

14.3 類模板(Class Templates) 470

14.3.1 容器類的困惑(Container Class Perplexity) 470

14.3.2 類模板定義(Class Template Definition) 471

14.3.3 類模板的實現(Class Template Implementation) 472

14.3.4 模板類和類模板(Template Class & Class Templates) 474

14.3.5 模板值參數(Template Value Parameters) 475

14.3.6 默認模板實參(Default Template Parameters) 475

14.4 實例化與定做(Instantiation & Specialization) 476

14.4.1 模組實例化(Template Instantiation) 476

14.4.2 定做(Specialization) 477

14.4.3 局部定做(Partial Specialization) 480

14.5 程式組織(Program Organization) 481

14.5.1 包含方式(Inclusion Mode) 481

14.5.2 分離方式(Separation Mode) 483

14.6 模板的多態(Template Polymorphism) 486

14.6.1 動多態與靜多態(Dynamic & Static Polymorphism) 486

14.6.2 動多態編程(Dynamic Polymorphism Programming) 486

14.6.3 靜多態編程(Static Polymorphism Programming) 489

14.6.4 動靜多態的差異(Dynamic & Static Polymorphism Differentiation) 490

14.7 高級編程(Advanced Programming) 490

14.7.1 動多態設計模式(Dynamic Polymorphism Design Patterns) 490

14.7.2 靜多態設計模式(Static Polymorphism Design Patterns) 492

14.7.3 泛型編程(Generic Programming) 494

14.8 目的歸納(Conclusion) 496

14.9 練習14(Exercises14) 496

第15章 異常(Exception) 498

15.1 錯誤處理的複雜性(Error Processing Complexity) 498

15.1.1 錯誤種類(Kinds of Errors) 498

15.1.2 模組的隔絕性(Isolated Modular) 499

15.1.3 調用鏈的牽制(Call-Link's Hold down) 500

15.2 使用異常(Using Exception) 502

15.2.1 異常使用三部曲(Three Steps on Using Exception) 503

15.2.2 退化為普通錯誤處理(Becoming General Error Handling) 503

15.2.3 跨越函式的異常處理(Supario Function Exception Handling) 504

15.2.4 標準異常的用法(Using Standard Exception) 505

15.3 捕捉異常(Catching Exception) 506

15.3.1 類型匹配(Type Match) 506

15.3.2 撒網捕捉(Exception Catch Net) 508

15.4 異常的申述(Exception Description) 511

15.4.1 申述異常(Description Exception) 511

15.4.2 捉不住處理(Uncaught Handling) 514

15.5 異常繼承體系(Exception Inheritance System) 515

15.5.1 異常類層次結構(Exception Class Hierarchy) 515

15.5.2 異常類層次結構的用法(Using Exception Class Hierarchy) 516

15.6 異常的套用(Exception Applications) 519

15.6.1 構造函式的錯誤處理(Constructor Error Processing) 519

15.6.2 引用的動態轉型(Reference dynamic_cast) 521

15.6.3 typeid的用法(Using typeid) 522

15.7 非錯誤處理(Non-Error Processing) 523

15.7.1 另一種循環控制法(Another Loop Controlling) 523

15.7.2 遞歸控制法(Recursive Controlling) 525

15.8 目的歸納(Conclusion) 526

15.9 練習15(Exercises 15) 527

附錄(Appendices)

附錄A 語法導讀(Guide to Grammar) 532

A.1 C++語言文法(C++ Language Grammar) 532

A.2 語法圖(Grammar Graph) 532

A.3 Barcus範式(Barcus Normal Form,BNF) 534

A.4 C++關鍵字(C++ Keywords) 535

A.5 整數文法(Integer Grammar) 536

A.6 浮點數文法(Floating-Point Number Grammar) 537

A.7 編譯單位(Compiling Unit) 538

附錄B 標準模板庫導用(Guide to Using STL) 539

B.1 仿函式與算法(Function Object & Algorithm) 539

B.2 STL仿函式(STL Default Function Objects) 545

B.3 謂詞(Predicates) 546

B.4 函式配接器(Function Adapters) 547

B.5 插入遍歷器和流遍歷器(Insert & Stream Iterator) 549

附錄C 參考文獻(References) 550

X

目錄(Contents)

XI

目錄(Contents)

相關詞條

熱門詞條

聯絡我們