Contents Chapter 1 Introduction1 1.1 Overview of Programming1 1.1.1 What Is Programming?1 1.1.2 How to Write a Program?3 1.2 Programming Methodologies5 1.2.1 Structured Programming5 1.2.2 Object-Oriented Programming8 1.3 Characteristics of Object-Oriented Programming10 1.4 C Programming Language13 1.4.1 History of C and C 13 1.4.2 Learning C 15 Word Tips16 Exercises17 Chapter 2 Basic Facilities — Shifting from C to C Programs18 2.1 C Program Structure18 2.2 Input/Output Streams21 2.2.1 Input Stream21 2.2.2 Output Stream22 2.3 Constants23 2.4 Functions25 2.4.1 Function Declarations25 2.4.2 Function Definitions26 2.4.3 Default Arguments28 2.4.4 Inline Functions30 2.4.5 Function Overloading30 2.5 References35 2.5.1 Reference Definition35 2.5.2 Reference Variables as Parameters39 2.5.3 References as Returning Values40 2.5.4 Reference as Left-Hand Values42 2.6 Namespaces43 Word Tips47 Exercises48 Chapter 3 Foundation of Classes and Objects—Data Abstraction and Definition of Classes52 3.1 Introduction to Structures52 3.1.1 Defining a Structure in C 52 3.1.2 Accessing Members of Structures53 3.1.3 Structures with Member Functions55 3.2 Data Abstraction and Classes56 3.2.1 Data Abstraction56 3.2.2 Defining Classes57 3.2.3 Defining Objects58 3.2.4 Accessing Member Functions59 3.2.5 In-Class Member Function Definition61 3.2.6 File Structure of an Abstract Data Type63 3.3 Information Hiding65 3.4 Access Control66 3.5 Constructors69 3.5.1 Definition of Constructors69 3.5.2 Overloading Constructors70 3.5.3 Constructors with Default Parameters71 3.6 Destructors74 3.6.1 Definition of Destructors74 3.6.2 UML Diagram for Classes75 3.6.3 The Order of Constructor and Destructor Calls76 3.7 Encapsulation78 3.8 Case Study: A GradeBook Class79 Word Tips82 Exercises83 Chapter 4 Advance of Classes and Objects —Further Definition of Class Members and Objects87 4.1 Constant Member Functions and Constant Objects87 4.2 this Pointers89 4.3 Static Members91 4.3.1 Static Data Members93 4.3.2 Static Member Functions96 4.4 Free Store97 4.5 Object Members101 4.5.1 Definition of Object Members101 4.5.2 The Order of Constructors and Destructors for Member Objects105 4.5.3 Object Members with Default Constructors105 4.5.4 Class Members by Using Initializers106 4.6 Copy Members107 4.6.1 Definition of Copy Constructors108 4.6.2 Shallow Copy and Deep Copy110 4.7 Arrays of Objects118 4.7.1 Initialize an Object Array by Using a Default Constructor118 4.7.2 Initialize an Object Array by Using Constructors with Parameters121 4.8 Friends122 4.8.1 Friend Functions122 4.8.2 Friend Classes125 4.9 Case Study: Advance of the GradeBook Class126 Word Tips132 Exercises132 Chapter 5 Operator Overloading137 5.1 Introduction to Operator Overloading137 5.2 Operator Functions138 5.2.1 Overloaded Operators138 5.2.2 Operator Functions138 5.3 Binary and Unary Operators142 5.3.1 Overloading Binary Operators142 5.3.2 Overloading Unary Operators143 5.4 Overloading Combinatorial Operators147 5.5 Mixed Arithmetic of User-Defined Types151 5.6 Type Conversion of User-Defined Types152 5.6.1 Converting a Built-In Type to a User-Defined Type152 5.6.2 Converting User-Defined Types to Built-In Types153 5.7 Case Study: A MyInteger Class155 Word Tips160 Exercises160 Chapter 6 Inheritance163 6.1 Class Hierarchies163 6.2 Derived Classes164 6.2.1 Declaration of Derived Classes164 6.2.2 Structure of Derived Classes165 6.3 Constructors and Destructors of Derived Classes168 6.3.1 Constructors of Derived Classes168 6.3.2 Destructors of Derived Classes171 6.3.3 The Calling Order of Derived Class Objects172 6.3.4 Inheritance and Composition175 6.4 Member Functions of Derived Classes175 6.4.1 Defining a Member Function175 6.4.2 Overriding Member Functions177 6.5 Access Control179 6.5.1 Access Control in Classes179 6.5.2 Access to Base Classes180 6.6 Multiple Inheritance184 6.6.1 Declaration of Multiple Inheritance185 6.6.2 Constructors of Multiple Inheritance187 6.7 Virtual Inheritance188 6.7.1 Multiple Inheritance Ambiguities188 6.7.2 Trying to Solve Inheritance Ambiguities189 6.7.3 Virtual Base Classes191 6.7.4 Constructing Objects of Multiple Inheritance194 6.8 Case Study: The iWatch Class195 Word Tips201 Exercises202 Chapter 7 Polymorphism and Virtual Functions212 7.1 Polymorphism212 7.1.1 Introduction to Polymorphism212 7.1.2 Binding213 7.2 Virtual Functions216 7.2.1 Definition of Virtual Functions216 7.2.2 Extensibility219 7.2.3 Principle of Virtual Functions221 7.2.4 Virtual Destructors223 7.2.5 Function Overloading and Function Overriding224 7.3 Abstract Base Classes227 7.4 Case Study: A Mini System230 Word Tips235 Exercises235 Chapter 8 Templates241 8.1 Introduction to Templates241 8.2 Function Templates242 8.2.1 Definition of Function Templates242 8.2.2 Function Template Instantiation244 8.2.3 Function Template with Different Parameter Types246 8.2.4 Function Template Overloading247 8.3 Class Templates248 8.3.1 Definition of Class Templates248 8.3.2 Class Template Instantiation251 8.4 Non-Type Parameters for Templates253 8.5 Derivation and Class Templates255 8.6 Case Study: A Vector Class Template256 Word Tips262 Exercises262 References264