Notes to the Reader 1
Introduction 1
How to Read this Book 2
C++ Timeline 4
Focus on Use and Users 4
Programming Languages 5
References 7
Part Ⅰ: 17
The Prehistory of C++ 19
1.1 Simula and Distributed Systems 19
1.2 C and Systems Programming 22
1.3 General Background 23
C with Classes 27
2.1 The Birth of C with Classes 27
2.2 Feature overview 29
2.3 Classes 30
2.4 Run-Time Efficiency 32
2.5 The Linkage Model 34
2.6 Static Type Checking 40
2.7 Why C? 43
2.8 Syntax Problems 45
2.9 Derived Classes 49
2.10 The Protection Model 53
2.11 Run-Time Guarantees 56
2.12 Minor Features 58
2.13 Features Considered,but not Provided 59
2.14 Work Environment 60
The Birth of C++ 63
3.1 From C with Classes to C++ 63
3.2 Aims 65
3.3 Cfront 66
3.4 Language Features 71
3.5 Virtual Functions 72
3.6 Overloading 78
3.7 References 85
3.8 Constants 89
3.9 Memory Management 91
3.10 Type Checking 92
3.11 Minor Features 93
3.12 Relationship to Classic C 100
3 13 Tools for Language Design 103
3.14 The C++ Programming Language(1st edition) 105
3.15 The Whatis?Paper 106
C++ Language Design Rules 109
4.1 Rules and Principles 109
4.2 General Rules 110
4.3 Design Support Rules 114
4.4 Language-Technical Rules 117
4.5 Low-Level Programming Support Rules 120
4.6 A Final Word 122
Chronology 1985-1993 123
5.1 Introduction 123
5.2 Release 2.0 124
5.3 The Annotated Reference Manual 126
5.4 ANSI and ISO Standardization 128
Standardization 133
6.1 What is a Standard? 133
6.2 How does the Committee Operate? 136
6.3 Clarifications 138
6.4 Extensions 147
6.5 Examples of Proposed Extensions 153
Interest and Use 163
7.1 The Explosion in Interest and Use 163
7.2 Teaching and Learning C++ 168
7.3 Users and Applications 173
7.4 Commercial Competition 175
Libraries 181
8.1 Introduction 181
8.2 C++ Library Design 182
8.3 Early Libraries 184
8.4 Other Libraries 191
8.5 A Standard Library 194
Looking Ahead 195
9.1 Introduction 195
9.2 Retrospective 195
9.3 Only a Bridge? 200
9.4 What Will Make C++ Much More Effective? 205
Part Ⅱ 209
Memory Management 211
10.1 Introduction 211
10.2 Separating Allocation and Initialization 212
10.3 Array Allocation 213
10.4 Placement 214
10.5 Deallocation Problems 216
10.6 Memory Exhaustion 218
10.7 Automatic Garbage Collection 219
Overloading 223
11.1 Introduction 223
11.2 Overload Resolution 224
11.3 Type-Safe Linkage 232
11.4 Object Creation and Copying 237
11.5 Notational Convenience 241
11.6 Adding Operators to C++ 247
11.7 Enumerations 253
Multiple Inheritance 257
12.1 Introduction 257
12.2 Ordinary Base Classes 258
12.3 Virtual Base Classes 259
12.4 The Object Layout Model 264
12.5 Method Combination 268
12.6 The Multiple Inheritance Controversy 269
12.7 Delegation 272
12.8 Renaming 273
12.9 Base and Member Initializers 275
Class Concept Refinements 277
13.1 Introduction 277
13.2 Abstract Classes 277
13.3 const Member Functions 284
13.4 Static Member Functions 288
13.5 Nested Classes 289
13.6 Inherited∷ 290
13.7 Relaxation of Overriding Rules 293
13.8 Multi-methods 297
13.9 Protected Members 301
13.10 Improved Code Generation 302
13.11 Pointers to Members 303
Casting 305
14.1 Major Extensions 305
14.2 Run-Time Type Information 306
14.3 A New Cast Notation 327
Templates 337
15.1 Introduction 337
15.2 Templates 338
15.3 Class Templates 341
15.4 Constraints on Template Arguments 343
15.5 Avoiding Code Replication 346
15.6 Function Templates 348
15.7 Syntax 355
15.8 Composition Techniques 356
15.9 Template Class Relationships 360
15.10 Template Instantiation 365
15.11 Implications of Templates 378
Exception Handling 383
16.1 Introduction 383
16.2 Aims and Assumptions 384
16.3 Syntax 385
16.4 Grouping 386
16.5 Resource Management 388
16.5 Resumption vs.Termination 390
16.5 Asynchronous Events 393
16.6 Multi-level Propagation 394
16.7 Static Checking 395
16.8 Invariants 397
Namespaces 399
17.1 Introduction 399
17.2 The Problem 400
17.3 Ideals for a Solution 402
17.4 The Solution:Narnespaces 404
17.5 Implications for Classes 417
17.6 C Compatibility 420
The C Preprocessor 423
18.1 Cpp 423
Index 427