Preface
Contents
Notes to the Reader
Part I
1 The Prehistory of C++
1.1 Simula and Distributed Systems
1.2 C and Systems Programming
1.3 General Background
2 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
3 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 Managament
3.10 Type Checking
3.11 Minor Features
3.12 Relationship to Classic C
3.13 Tools for Language Design
3.14 The C++ Programming Language(1st edition)
3.15 The Whatis? Paper
4 C++ Language Design Rules
4.1 Rules and Principles
4.2 General Rules
4.3 Design Support Rules
4.4 Language-Technical Rules
4.5 Low-Level Programming Support Rules
4.6 A Final Word
5 Chronology 1985-1993
5.1 Introduction
5.2 Release 2.0
5.3 The Annotated Reference Manual
5.4 ANSI and ISO Standardization
6 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
7 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
8 Libraries
8.1 Introduction
8.2 C++ Library Design
8.3 Early Libraries
8.4 Other Libraries
8.5 A Standard Library
9 Looking Ahead
9.1 Introduction
9.2 Retrospective
9.3 Only a Bridge?
9.4 What Will Make C++ Much More Effective?
Part II
10 Memory Managemant
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 Collection
11 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
12 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
13 Class Concept Refinements
13.1 Introduction
13.2 Abstract Classes
13.3 const Member Functions
13.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.11 Pointers to Members
14 Casting
14.1 Major Extensions
14.2 Run-Time Type Information
14.3 A New Cast Notation
15 Templates
15.1 Introduction
15.2 Templates
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 Implication of Templates
16 Exception Handling
16.1 Introduction
16.2 Aims and Assumptions
16.3 Syntax
16.4 Grouping
16.5 Resource Management
16.6 Resumption vs. Termination
16.7 Asynchronous Events
16.8 Multi-level Propagation
16.9 Static Checking
16.10 Invariants
17 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
18 The C Preprocessor
18.1 Cpp
Index