Preface Acknowledgments Contents Notes to the Reader Introduction How to Read this Book C++ Timeline Focus on Use and Users Programming Languages References Part I: The Prehistory of C++ 1.1 Simula and Distributed Systen1s 1.2 C and Systems Programming 1.3 General Background C with Classes 2.1 The Birth of C with Classes 2.2 Feature overview 2.3 Classes 2.4 Run-Time Efficiency 2.5 The Linkage Model 2.6 Static Type Checking 2.7 Why C? 2.8 Syntax Problems 2.9 Derived Classes 2.10 The Protection Model 2.11 Run-Time Guarantees 2.12 Minor Features 2.13 Features Considered, but not Provided 2.14 Work Environment The Birth of C++ 3.1 From C with Classes to C++ 3.2 Aims 3.3 Cfront 3.4 Language Features 3.5 Virtual Functions 3.6 Overloading 3.7 References 3.8 Constants 3.9 Memory Management 3.10 Type Checking 3.1l Minor Peatures 3.12 Relationship to Classic C 3.13 Tools for Language Design 3.14 The C++ Programming Language (lst edition) 3.15 The Whatis? Paper C++ Language Design Rules 4.1 Rules and Principles 4.2 General Ru1es 4.3 Design Support Rules 4.4 Language-Technical Rules 4.5 Low-Level Programming Support Rules 4.6 A Final Word Chronology 1985-1993 5.1 Introduction 5.2 Release 2.0 5.3 The Annotated Reference Manual 5.4 ANSI and ISO Standardization Standardization 6.1 What is a Standard? 6.2 How does the Committee Operate? 6.3 Clarifications 6.4 Extensions 6.5 Examples of Proposed Extensions Interest and Use 7.1 The Explosion in Interest and Use 7.2 Teaching and Learning C++ 7.3 Users and Applications 7.4 Commercial Competition Libraries 8.1 Introduction 8.2 C++ Library Design 8.3 Early Libraries 8.4 Other Libraries 8.5 A Standard Library Looking Ahead 9.1 Introduction 9.2 Retrospective 9.3 Only a Bridge? 9.4 What Will Make C++ Much More Effective? Memory Management 10.1 Introduction 10.2 Separating Allocation and Initialization 10.3 Array Allocation 10.4 Placement 10.5 Deallocation Problems 10.6 Memory Exhaustion 10.7 Automatic Garbage Col1ection Overloading 11.1 Introduction 11.2 Overload Resolution 11.3 Type-Safe Linkage 11.4 Object Creation and Copying 11.5 Notational Convenience 11.6 Adding Operators to C++ 11.7 Enumerations Multiple Inheritance 12.1 Introduction 12.2 Ordinary Base Classes 12.3 Virtual Base Classes 12.4 The Object Layout Model 12.5 Method Combination 12.6 The Multiple Inheritance Controversy 12.7 Delegation 12.8 Renaming 12.9 Base and Member Initializers Class Concept Rennements 13.1 Introduction 13.2 Abstract Classes 13.3 const Member Functions I3.4 Static Member Functions 13.5 Nested Classes 13.6 Inherited:: 13.7 Relaxation of Overriding Rules 13.8 Multi-methods 13.9 Protected Members 13.10 Improved Code Generation 13.1l Pointers to Members Casting 14.1 Major Extensions 14.2 Run-Time Type Information 14.3 A New Cast Notation Templater 15.1 Introduction 15.2 Temp1ates 15.3 Class Templates 15.4 Constraints on Template Arguments 15.5 Avoiding Code Replication 15.6 Function Templates 15.7 Syntax 15.8 Composition Techniques 15.9 Template Class Relationships 15.10 Template Instantiation 15.11 Implications of Templates Exception Handling 16.1 Introduction 16.2 Aims and Assumptions 16.3 Syntax 16.4 Grouping 16.5 Resource Management I6.5 Resumption vs.Termination 16.5 Asynchronous Events 16.6 Multi-level Propagation 16.7 Static Checking 16.8 Invariants Namespaces 17.1 Introduction 17.2 The Problem 17.3 Ideals for a Solution 17.4 The Solution: Namespaces 17.5 Implications for Classes 17.6 C Compatibility The C Preprocessor 18.1 Cpp Index