448 C-String Input and Output 453
C-String-to-Number Conversions and Robust Input 455
8.2 The Standard string Clas 461
Introduction to the Standard Class string 461
I/O with the Class string 464
Programming Tip: More Versions of getline 467
Pitfall: Mixing cin >> variable; and getline 468
String Processing with the Class string 469
Programming Example: Palindrome Testing 473
Converting Between string Objects and C Strings 476
8.3 Vectors 477
Vector Basics 477
Pitfall: Using Square Brackets Beyond the Vector Size 480
Programming Tip: Vector Assignment Is Well Behaved 481
Efficiency Issues 481
Chapter Summary 483
Answers to Self-Test Exercises 484
Programming Projects 486
Chapter 9 Pointers and Dynamic Arrays 493
9.1 Pointers 494
Pointer Variables 495
Basic Memory Management 502
Pitfall: Dangling Pointers 503
Static Variables and Automatic Variables 504
Programming Tip: Define Pointer Types 504
9.2 Dynamic Arrays 507
Array Variables and Pointer Variables 507
Creating and Using Dynamic Arrays 508
Pointer Arithmetic (Optional) 514
Multidimensional Dynamic Arrays (Optional) 516
Chapter Summary 518
Answers to Self-Test Exercises 518
Programming Projects 519
Chapter 10 Defining Classes 525
10.1 Structures 526
Structures for Diverse Data 526
Pitfall: Forgetting a Semicolon in a Structure Definition 531
Structures as Function Arguments 532
Programming Tip: Use Hierarchical Structures 533
Initializing Structures 535
10.2 Classes 538
Defining Classes and Member Functions 538
Public and Private Members 543
Programming Tip: Make All Member Variables Private 551
Programming Tip: Define Accessor and Mutator Functions 551
Programming Tip: Use the Assignment Operator with Objects 553
Programming Example: BankAccount Class–Version 1 554
Summary of Some Properties of Classes 558
Constructors for Initialization 560
Programming Tip: Always Include a Default Constructor 568
Pitfall: Constructors with No Arguments 569
10.3 Abstract Data Types 571
Classes to Produce Abstract Data Types 572
Programming Example: Alternative Implementation of a Class 576
10.4 Introduction to Inheritance 581
Derived Classes 582
Defining Derived Classes 583
Chapter Summary 587
Answers to Self-Test Exercises 588
Programming Projects 594
Chapter 11 Friends, Overloaded Operators, and Arrays in Classes 601
11.1 Friend Functions 602
Programming Example: An Equality Function 602
Friend Functions 606
Programming Tip: Define Both Accessor Functions and Friend Functions 608
Programming Tip: Use Both Member and Nonmember Functions 610
Programming Example: Money Class (Version 1) 610
Implementation of digit_to_int (Optional) 617
Pitfall: Leading Zeros in Number Constants 618
The const Parameter Modifier 620
Pitfall: Inconsistent Use of const 621
11.2 Overloading Operators 625
Overloading Operators 626
Constructors for Automatic Type Conversion 629
Overloading Unary Operators 631
Overloading >> and < 632="">
11.3 Arrays and Classes 642
Arrays of Classes 642
Arrays as Class Members 646
Programming Example: A Class for a Partially Filled Array 647
11.4 Classes and Dynamic Arrays 649
Programming Example: A String Variable Class 650
Destructors 653
Pitfall: Pointers as Call-by-Value Parameters 656
Copy Constructors 657
Overloading the Assignment Operator 662
Chapter Summary 665
Answers to Self-Test Exercises 665
Programming Projects 675
Chapter 12 Separate Compilation and Namespaces 685
12.1 Separate Compilation 686
ADTs Reviewed 687
Case Study: DigitalTime —A Class Compiled Separately 688
Using #ifndef 697
Programming Tip: Defining Other Libraries 700
12.2 Namespaces 701
Namespaces and using Directives 701
Creating a Namespace 703
Qualifying Names 706
A Subtle Point About Namespaces (Optional) 707
Unnamed Namespaces 708
Programming Tip: Choosing a Name for a Namespace 713
Pitfall: Confusing the Global Namespace and the Unnamed Namespace 714
Chapter Summary 715
Answers to Self-Test Exercises 716
Programming Projects 718
Chapter 13 Pointers and Linked Lists 721
13.1 Nodes and Linked Lists 722
Nodes 722
Linked Lists 728
Inserting a Node at the Head of a List 729
Pitfall: Losing Nodes 732
Searching a Linked List 733
Pointers as Iterators 735
Inserting and Removing Nodes Inside a List 737
Pitfall: Using the Assignment Operator with Dynamic Data Structures 740
Variations on Linked Lists 741
Linked Lists of Classes 744
13.2 Stacks and Queues 747
Stacks 747
Programming Example: A Stack Class 748
Queues 753
Programming Example: A Queue Class 754
Chapter Summary 758
Answers to Self-Test Exercises 758
Programming Projects 761
Chapter 14 Recursion 769
14.1 Recursive Functions for Tasks 771
Case Study: Vertical Numbers 771
A Closer Look at Recursion 777
Pitfall: Infinite Recursion 779
Stacks for Recursion 780
Pitfall: Stack Overflow 782
Recursion Versus Iteration 782
14.2 Recursive Functions for Values 784
General Form for a Recursive Function That Returns a Value 784
Programming Example: Another Powers Function 784
14.3 Thinking Recursively 789
Recursive Design Techniques 789
Case Study: Binary Search—An Example of Recursive Thinking 790
Programming Example: A Recursive Member Function 798
Chapter Summary 802
Answers to Self-Test Exercises 802
Programming Projects 807
Chapter 15 Inheritance 811
15.1 Inheritance Basics 812
Derived Classes 813
Constructors in Derived Classes 821
Pitfall: Use of Private Member Variables from the Base Class 824
Pitfall: Private Member Functions Are Effectively Not Inherited 826
The protected Qualifier 826
Redefinition of Member Functions 829
Redefining Versus Overloading 832
Access to a Redefined Base Function 834
15.2 INHERITANCE DETAILS 835
Functions That Are Not Inherited 835
Assignment Operators and Copy Constructors in Derived Classes 836
Destructors in Derived Classes 837
15.3 Polymorphism 838
Late Binding 839
Virtual Functions in C++ 840
Virtual Functions and Extended Type Compatibility 845
Pitfall: The Slicing Problem 849
Pitfall: Not Using Virtual Member Functions 850
Pitfall: Attempting to Compile Class Definitions Without Definitions for Every Virtual Member Function 851
Programming Tip: Make Destructors Virtual 851
Chapter Summary 853
Answers to Self-Test Exercises 853
Programming Projects 857
Chapter 16 Exception Handling 867
16.1 Exception-Handling Basics 869
A Toy Example of Exception Handling 869
Defining Your Own Exception Classes 878
Multiple Throws and Catches 878
Pitfall: Catch the More Specific Exception First 882
Programming Tip: Exception Classes Can Be Trivial 883
Throwing an Exception in a Function 883
Exception Specification 885
Pitfall: Exception Specification in Derived Classes 887
16.2 Programing Techniques for Exception Handling 888
When to Throw an Exception 888
Pitfall: Uncaught Exceptions 890
Pitfall: Nested try-catch Blocks 890
Pitfall: Overuse of Exceptions 890
Exception Class Hierarchies 891
Testing for Available Memory 891
Rethrowing an Exception 892
Chapter Summary 892
Answers to Self-Test Exercises 892
Programming Projects 894
Chapter 17 Templates 899
17.1 Templates for Algorithm Abstraction 900
Templates for Functions 901
Pitfall: Compiler Complications 905
Programming Example: A Generic Sorting Function 907
Programming Tip: How to Define Templates 911
Pitfall: Using a Template with an Inappropriate Type 912
17.2 Templates for Data Abstraction 913
Syntax for Class Templates 913
Programming Example: An Array Class 916
Chapter Summary 922
Answers to Self-Test Exercises 922
Programming Projects 925
Chapter 18 Standard Template Library 931
18.1 Iterators 933
using Declarations 933
Iterator Basics 934
Pitfall: Compiler Problems 938
Kinds of Iterators 940
Constant and Mutable Iterators 944
Reverse Iterators 945
Other Kinds of Iterators 946
18.2 Containers 947
Sequential Containers 948
Pitfall: Iterators and Removing Elements 952
Programming Tip: Type Definitions in Containers 953
Container Adapters stack and queue 953
Associative Containers set and map 957
Efficiency 964
18.3 Generic Algorithms 965
Running Times and Big-O Notation 965
Container Access Running Times 970
Nonmodifying Sequence Algorithms 971
Container Modifying Algorithms 975
Set Algorithms 977
Sorting Algorithms 978
Chapter Summary 979
Answers to Self-Test Exercises 979
Programming Projects 981
Appendices
1 C++ Keywords 987
2 Precedence of Operators 988
3 The ASCII Character Set 990
4 Some Library Functions 991
5 Inline Functions 998
6 Overloading the Array Index Square Brackets 999
7 The this Pointer 1001
8 Overloading Operators as Member Operators 1004
Index 1006