Starting Out with C++ from Control Structures to Objects [9 ed.] 9780134498379, 0134498372

For two-semester courses in the C++ programming sequence, or an accelerated one-semester course.A clear and student-frie

10,637 3,165 121MB

English Pages 1344 [1335] Year 2017

Report DMCA / Copyright

DOWNLOAD FILE

Polecaj historie

Starting Out with C++ from Control Structures to Objects [9 ed.]
 9780134498379, 0134498372

Table of contents :
Part 1
Table of Contents
Part 2
Part 3
Part 4
part 5
part 6
part 7
part 8
part 9
part 10
part 11

Citation preview

STARTING OUT WITH

C++ r

'i

I

I I I · f- I

I

I

I

I

'

I

From Control Structures through Objects NINTH EDITION

STARTING OUT WITH

C++ ] [ ! " ] ! :

1 ! . I , .

From Control Structures through Objects

'

1

NINTH EDITION

Tony Gaddis Haywood Community College

@Pearson 330 Hudson Sl reet, New Yor k , NY 10013

Senior Vice President Courseware Portfolio Management: Marcia J. Horton Director, Portfolio Management: Engineering, Computer Science & Global Editions: Julian Partridge Portfolio Manager: Matt Goldstein Portfolio Management Assistant: Kristy Alaura Field Marketing Manager: Demetrius Hall

Product Marketing Manager: Yvonne Vannatta Managing Producer, ECS and Math: Scott Disanno Content Producer: Sandra L. Rodriguez Composition: iEnergizer Aptara®, Ltd. Cover Designer: Joyce Wells Cover Photo: Samokhin/123RF

Credits and acknowledgments borrowed from other sources and reproduced, with permission, appear on the Credits page in the endmatter of this textbook.

Copyright© 2018, 2015, 2012, 2009 Pearson Education, Inc. Hoboken, NJ 07030. All rights reserved. Manufactured in the United States of America. This publication is protected by copyright and permissions should be obtained from the publisher prior to any prohibited reproduction, storage in a retrieval system, or transmission in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise. For information regarding permissions, request forms and the appropriate contacts within the Pearson Education Global Rights & Permissions department, please visit www.pearsoned.com/permissions/. Many of the designations by manufacturers and seller to distinguish their products are claimed as trademarks. Where those designations appear in this book, and the publisher was aware of a trademark claim, the designations have been printed in initial caps or all caps. The author and publisher of this book have used their best efforts in preparing this book. These efforts include the development, research, and testing of theories and programs to determine their effectiveness. The author and publisher make no warranty of any kind, expressed or implied, with regard to these programs or the documentation contained in this book. The author and publisher shall not be liable in any event for incidental or consequential damages with, or arising out of, the furnishing, performance, or use of these programs. Pearson Education Ltd., London Pearson Education Singapore, Pte. Ltd Pearson Education Canada, Inc. Pearson Education Japan Pearson Education Australia PTY, Ltd

Pearson Education North Asia, Ltd., Hong Kong Pearson Education de Mexico, S.A. de C. V. Pearson Education Malaysia, Pte. Ltd. Pearson Education, Inc., Hoboken

Library of Congress Cataloging-in-Publication Data Names: Gaddis, Tony, author. Title: Starting out with C++. From control structures through objects I Tony Gaddis, Haywood Community College. Other titles: From control structures through objects I Starting out with C plus plus. From control structures through objects Description: Ninth edition. I Boston : Pearson Education, Inc., (2017) Identifiers: LCCN 20160564561 ISBN 9780134498379 (alk. paper) I ISBN 0134498372 (alk. paper) Subjects: LCSH: C++ (Computer program language) Classification: LCC QA76.73.C153 G334 20171 DDC 005.13/3-dc23 LC record available at https://lccn.loc.gov/201605645 6

4 17

@Pearson

ISBN-13: 978-0-13-449837-9 0-13-449837-2 ISBN-10:

Preface xvii CHAPTER 1

Introduction to Computers and Programming 1

CHAPTER 2

Introduction to C++

CHAPTER 3

Expressions and Interactivity 85

CHAPTER 4

Making Decisions

CHAPTER 5

loops and Files 231

CHAPTER 6

Functions 305

CHAPTER 7

Arrays and Vectors

CHAPTER 8

Searching and Sorting Arrays 463

CHAPTER 9

Pointers 503

27

151

381

CHAPTER 10 Characters, C-Strings, and More about the s tri ng Class 557 CHAPTER 11

Structured Data 613

CHAPTER 12

Advanced File Operations 665

CHAPTER 13

Introduction to Classes 719

CHAPTER 14

More about Classes 817

CHAPTER 15

Inheritance, Polymorphism, and Virtual Functions 907

CHAPTER 16

Exceptions and Templates 989

CHAPTER 17

The Standard Template library

CHAPTER 18

Linked lists

1029

1123

CHAPTER 19 Stacks and Queues 1165 CHAPTER 20

Recursion

CHAPTER 21

Binary Trees 1257

1223

Appendix A: The ASCII Character Set 1287 Appendix 8: Operator Precedence and Associativity 1289 v

vi

Contents at a Glance

Quick References 1291 Index Online

1293

Credit 1311 The following appendices are available at www.pearsonhighered.com/gaddis. Appendix C: Introduction to Flowcharting Appendix D: Using UML In Class Design Appendix E: Namespaces Appendix F: Passing Command Une Arguments Appendix G: Binary Numbers and Bitwise Operations Appendix H: STL Algorithms Appendix I: Multi-Source File Programs Appendix J: Stream Member Functions for Formatting Appendix K: Unions Appendix L: Answers to Checkpoints Appendix M: Answers to Odd Numbered Review Questions Case Study 1: String Manipulation Case Study 2: High Adventure Travel Agency-Part 1 Case Study 3: Loan Amortization Case Study 4: Creating a String Class Case Study 5: High Adventure Travel Agency-Part 2 Case Study 6: High Adventure Travel Agency-Part 3 Case Study 7: Intersection of Sets Case Study 8: Sales Commission

-

Preface CHAPTER 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7

CHAPTER 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8

2.9 2.10 2.11 2.12 2.13 2 .14 2 .15 2.16 2.17

xvii

Introduction to Computers and Programming

1

Why Program? 1 Computer Systems: H ardware and Software 2 Programs and Programming Languages 8 What Is a Program Made of? 14 Input, Processing, and Output 17 The Programming Process 18 Procedural and Object-Oriented Programming 22 Review Questions and Exercises 24 Introduction to C++

27

The Parts of a C++ Program 27 The cout Object 31 The #include Directive 36 Variables, Literals, and Assignment Statements 38 Identifiers 42 Integer Data Types 43 The char Dara Type 49 The C++ string Class 53 Floating-Point Data Types 55 The bool Dara Type 58 Determining the Size of a Data Type 59 More about Variable Assignments and Initialization Scope 62 Arithmetic Operators 63 Comments 71 Named Constants 73 Programming Style 75

Review Questions and Exercises Programming Challenges 81

60

77

vii

viii

Contents CHAPTER 3

3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11

CHAPTER4

4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15

CHAPTERS

5 .1 5.2 5.3 5.4 5.5 5.6 5.7 5 .8 5.9 5.10 5.11 5.12

Expressions and Interactivity 85 The ci n Object 85 Mathematical Expressions 91 When You Mix Apples and Oranges: Type Conversion Overflow and Underflow 102 Type Casting 103 Multiple Assignment and Combined Assignment 106 Formatting Output 110 Working with Characters and string Objects 120 More Mathematical Library Functions 126 Focus on Debugging: Hand Tracing a Program 132 Focus on Problem Solving: A Case Study 134 Review Questions and Exercises 138 Programming Challenges 144

100

Making Decisions 151 Relational Operators 151 The if Statement 156 Expanding the i f Statement 164 The if /else Statement 168 Nested if Statements 171 The if/else if Statement 178 Flags 183 Logical Operators 184 Checking Numeric Ranges with Logical Operators 191 Menus 192 Focus on Software Engineering: Validating User Input 195 Comparing Characters and Strings 197 The Conditional Operator 201 The switch Statement 204 More about Blocks and Variable Scope 213 Review Questions and Exercises 216 Programming Challenges 222

Loops and Flies 231 The Increment and Decrement Operators 231 Introduction to Loops: The whi 1e Loop 236 Using the while Loop for Input Validation 243 Counters 245 The do-while Loop 246 The for Loop 251 Keeping a Running Total 261 Sentinels 264 Focus on Software Engineering: Deciding Which Loop to Use Nested Loops 266 Using Files for Data Storage 269 Optional Topics: Breaking and Continuing a Loop 288 Review Questions and Exercises 292 Programming Challenges 297

265

Contents CHAPTER6

6.1 6.2 6.3 6.4 6.5 6.6 6. 7 6.8 6.9 6.10 6.11 6.12 6.13 6.14 6.15 6.16

CHAPTER 7

7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11

CHAPTER 8

8.1 8.2 8.3 8.4 8.5

CHAPTER9

9.1 9.2 9.3

Functions 305

Focus on Software Engineering: Modular Programming 305 Defining and Calling Functions 306 Function Prototypes 315 Sending Data into a Function 317 Passing Data by Value 322 Focus on Software Engineering: Using Functions in a Menu-Driven Program 324 The return Statement 328 Returning a Value from a Function 330 Returning a Boolean Value 338 Local and Global Variables 340 Static Local Variables 348 Default Arguments 351 Using Reference Variables as Parameters 354 Overloading Functions 360 The exit() Function 364 Stubs and Drivers 367 Review Questions and Exercises 369 Programming Challenges 372 Arrays and Vectors

381

Arrays Hold Multiple Values 381 Accessing Array Elements 383 No Bounds Checking in C++ 395 The Range-Based for Loop 398 Processing Array Contents 402 Focus on Software Engineering: Using Parallel Arrays 410 Arrays as Function Arguments 413 Two-Dimensional Arrays 424 Arrays with Three or More Dimensions 431 Focus on Problem Solving and Program Design: A Case Study 433 Introduction to the STL vector 435 Review Questions and Exercises 449 Programming Challenges 454 Searching and Sorting Arrays 463

Focus on Software Engineering: Introduction to Search Algorithms 463 Focus on Problem Solving and Program Design: A Case Study 469 Focus on Software Engineering: Introduction to Sorting Algorithms 476 Focus on Problem Solving and Program Design: A Case Study 486 Sorting and Searching vectors 495 Review Qttestions and Exercises 498 Programming Challenges 499 Pointers 503

Getting the Address of a Variable 503 Pointer Variables 505 The Relationship between Arrays and Pointers 512

ix

x

Contents 9.4 9.5 9.6 9.7 9.8 9.9 9.10 9.11

CHAPTER 10

10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8

CHAPTER 11

11.1 11.2 11.3 11.4 11.5 11.6 11. 7 11.8 11.9 11.10 11.11

CHAPTER 12

12.1 12.2 12.3 12.4 12.5 12.6 12.7 12.8

Pointer Arithmetic 516 Initializing Pointers 518 Comparing Pointers 519 Pointers as Function Parameters 521 Dynamic Memory Allocation 530 Returning Pointers from Functions 534 Using Smart Pointers to Avoid Memory Leaks 541 Focus on Problem Solving and Program Design: A Case Study 544 Review Questions and Exercises 550 Programming Challenges 553 Characters, C-Strlngs, and More about the string Class

557

Character Testing 557 Character Case Conversion 561 C-Strings 564 Library Functions for Working with C-Strings 568 String/Numeric Conversion Functions 579 Focus on Software Engineering: Writing Your Own C-String-Handling Functions 585 More about the C++ string Class 591 Focus on Problem Solving and Program Design: A Case Study 603 Review Questions and Exercises 604 Programming Challenges 607 Structured Data

613

Abstract Data Types 613 Structures 615 Accessing Structure Members 618 Initializing a Structure 622 Arrays of Structures 625 Focus on Software Engineering: Nested Structures 627 Structures as Function Arguments 631 Returning a Structure from a Function 634 Pointers to Structures 637 Focus on Software Engineering: When to Use., When to Use->, and When to Use* 640 Enumerated Data Types 642 Review Questions and Exercises 653 Programming Challenges 659 Advanced Fiie Operations 665

File Operations 665 File Output Formatting 671 Passing File Stream Objects to Functions 673 More Detailed Error Testing 675 Member Functions for Reading and Writing Files 678 Focus on Software Engineering: Working with Multiple Files 686 Binary Files 688 Creating Records with Structures 693

Contents

12.9 12.10

CHAPTER 13

Random-Access Piles 697 Opening a File for Both Input and Output 705 Review Questions and Exercises 710 Programming Challenges 713 Introduction to Classes

719

Procedural and Object-Oriented Programming 719 Introduction to Classes 726 Defining an Instance of a Class 731 Why Have Private Members? 744 Focus on Software Engineering: Separating Class Specification from Implementation 745 Inline Member Functions 751 13.6 Constructors 754 13.7 Passing Arguments to Constructors 759 13.8 13.9 Destructors 767 13.10 Overloading Constructors 771 13.11 Private Member Functions 775 13.12 Arrays of Objects 777 13.13 Focus on Problem Solving and Program Design: An OOP Case Study 781 13.14 Focus on Object-Oriented Programming: Simulating Dice with Objects 788 13.15 Focus on Object-Oriented Design: The Unified Modeling Language (UML) 792 13.16 Focus on Object-Oriented Design: Finding the Classes and Their Responsibilities 794 Review Questions and Exercises 803 Programming Challenges 808

13.1 13.2 13.3 13.4 13.5

CHAPTER 14

14.1 14.2 14.3 14.4 14.5 14.6 14.7 14.8 14.9 14.10

CHAPTER 15

15.1 15.2 15.3 15.4 15.5 15.6 15.7

More about Classes 817

Instance and Static Members 817 Friends of Classes 825 Memberwise Assignment 830 Copy Constructors 831 Operator Overloading 837 Object Conversion 864 Aggregation 866 Focus on Object-Oriented Design: Class Collaborations 871 Focus on Object-Oriented Programming: Simulating the Game of Cho-Han 876 Rvalue References and Move Semantics 886 Review Questions and Exercises 895 Programming Challenges 900 Inheritance, Polymorphism, and Virtual Functions

907

What Is Inheritance? 907 Protected Members and Class Access 916 Constructors and Destructors in Base and Derived Classes 922 Redefining Base Class Functions 936 Class Hierarchies 941 Polymorphism and Virtual Member Functions 947 Abstract Base Classes and Pure Virtual Functions 963

xi

xii

Contents

15.8

CHAPTER 16

16.1 16.2 16.3 16.4

CHAPTER 17

17.1 17.2 17.3 17.4 17.5 17.6 17. 7

CHAPTER 18

18.1 18.2 18.3 18.4 18.5

CHAPTER 19

19.1 19.2 19.3 19.4 19.5 19.6

CHAPTER 20

20.1 20.2 20.3 20.4

Multiple Inheritance 970 Review Questions and Exercises Programming Challenges 981 Exceptions and Templates

977 989

Exceptions 989 Function Templates 1008 Focus on Software Engineering: Where to Start When Defining Templates 1014 Class Templates 1014 Review Questions and Exercises 1024 Programming Challenges 1026 The Standard Template Library 1029

Introduction to the Standard Template Library 1029 STL Container and Iterator Fundamentals 1029 The vector Class 1040 The map, multimap, and unordered_map Classes 1054 The set, multi set, and unordered_set Classes 1079 Algorithms 1086 Introduction to Function Objects and Lambda Expressions Review Questions and Exercises 1114 Programming Challenges 1118 Linked Lists

1107

(\

1123

I

Introduction to the Linked List ADT 1123 Linked List Operations 1125 A Linked List Template 1141 Variations of the Linked List 11S3 The STL 1 i st and forward_ list Containers Review Questions and Exercises 1158 Programming Challenges 1161 Stacks and Queues

1154

1165

Introduction to the Stack ADT 1165 Dynamic Stacks 1182 The STL stack Container 1193 Introduction to the Queue ADT 1195 Dynamic Queues 1207 The STL deque and queue Containers 1214 Review Questions and Exercises 1217 Programming Challenges 1219 Recursion

1223

Introduction to Recursion 1223 Solving Problems with Recursion 122 7 Focus on Problem Solving and Program Design: The Recursive gcd Function 1235 Focus on Problem Solving and Program Design: Solving Recursively Defined Problems 1236

Contents

20.5 20.6 20.7 20.8 20.9 20.10

CHAPTER21 21.1 21.2 21.3

Focus on Problem Solving and Program Design: Recursive Linked List Operations 1237 Focus on Problem Solving and Program Design: A Recursive Binary Search Function 1241 The Towers of Hanoi 1243 Focus on Problem Solving and Program Design: The QuickSort Algorithm 1246 Exhaustive Algorithms 1250 Focus on Software Engineering: Recursion versus Iteration 1253 Review Questio11s a11d Exercises 1253 Programming Challenges 1255

Binary Trees 1257 Definition and Applications of Binary Trees 1257 Binary Search Tree Operations 1260 Template Considerations for Binary Search Trees 1277 Review Questio11s a11d Exercises 1283 Programming Challenges 1284

Appendix A: The ASCII Character Set 1287 Appendix B: Operator Precedence and Associativity 1289 Quick References 1291 Index 1293 Credit 1311 Online

The following appendices are available at www.pearsonhighered.com/gaddis.

Appendix C: Introduction to Flowcharting Appendix D: Using UML in Class Design Appendix E: Namespaces Appendix F: Passing Command Line Arguments Appendix G: Binary Numbers and Bitwise Operations Appendix H: STL Algorithms Appendix I: Multi-Source File Programs Appendix ): Stream Member Functions for Formatting Appendix K: Unions Appendix L: Answers to Checkpoints Appendix M: Answers to Odd Numbered Review Questions Case Study 1: String Manipulation Case Study 2: High Adventure Travel Agency-Part 1 Case Study 3: Loan Amortization Case Study 4: Creating a String Class Case Study 5: High Adventure Travel Agency-Part 2 Case Study 6: High Adventure Travel Agency-Part 3 Case Study 7: Intersection of Sets Case Study 8: Sales Commission

xiii

LOCATION OF VIDEONOTES IN THE TEXT Chapter 1

Introduction to Flowcharting, p. 20 Designing a Program with Pseudocode, p. 20 Designing the Account Balance Program, p. 25 Predicting the Result of Problem 33, p. 26

Chapter 2

Using cout, p. 32 Variabe Definitions, p. 38 Assignment Statements and Simple Math Expressions, p. 63 Solving the Restau rant Bill Problem, p. 81

Chapter 3

Reading Input with ci n, p. 85 Formatting Numbers with setpreci sion, p. 113 Solving the Stadium Seating Problem, p. 144

Chapter 4

The if Statement, p. 156 The if I el se statement, p. 168 The if I else if Statement, p. 178 Solving the Time Calcu lator Problem, p. 223

Chapter S

The whi 1e Loop, p. 236 The for Loop, p. 251 Reading Data from a File, p. 278 Solving the Calories Burned Problem, p. 297

Chapter 6

Functions and Arguments, p. 317 Value-Returning Functions, p. 330 Solving the Markup Problem, p. 372

Chapter 7

Accessing Array Elements with a Loop, p. 386 Passing an Array to a Function, p. 413 Solving the Chips and Salsa Problem, p. 455

Chapter 8

The Binary Search, p. 466 The Selection Sort, p. 482 Solving the Charge Accou nt Validation Modification Problem, p. 500

Chapter 9

Dynamically Allocating an Array, p. 531 Solving the Pointer Rewrite Problem, p. 554

Chapter 10

Writing a C-String-Handling Function, p. 585 More About the string Class, p. 591 Solving the Backward String Problem, p. 607

LOCATION OF VIDEONOTES IN THE TEXT (continued) Chapter 11

Creating a Structure, p. 615 Passing a Structure to a Function, p. 631 Solving the Weather Statistics Problem, p. 659

Chapter 12

Passing File Stream Objects to Functions, p. 673 Working with Multiple Files, p. 686 Solving the File Encryption Filter Problem, p. 716

Chapter 13

Writing a Class, p. 726 Defining an Instance of a Class, p. 731 Solvi ng the Emp 1oyee Class Problem, p. 808

Chapter 14

Operator Overloading, p. 837 Class Aggregation, p. 866 Solving the NumDays Problem, p. 901

Chapte r 15

Redefining a Base Class Function in a Derived Class, p. 936 Polymorphism, p. 947 Solving the Emp 1oyee and Product i onWorker Classes Problem, p. 981

Chapter 16

Throwing an Exception, p. 990 Handling an Exception, p. 990 Writing a Function Template, p. 1008 Solving the Exception Project Problem, p. 1028

Chapter 17

The array Container, p. 1032 Iterators, p. 1034 The vector Container, p. 1040 The map Container, p. 1054 The set Container, p. 1079 Function Objects and Lambda Expressions, p. 1107 The Course Information Problem, p. 1119

Chapter 18

Appending a Node to a Linked List, p. 1126 Inserting a Node in a Linked List, p. 1133 Deleting a Node from a Linked List, p. 1137 Solving the Member Insertion by Position Problem, p. 1162

Chapter 19

Storing Objects in an STL stack, p. 1193 Storing Objects in an STL queue, p. 1216 Solving the File Compare Problem, p. 1221

Chapter 20

Reducing a Problem with Recursion, p. 1228 Solving the Recursive Mu ltiplication Problem, p. 1255

Chapter 21

Inserting a Node in a Binary Tree, p. 1262 Deleting a Node from a Binary Tree, p. 1268 Solving the Node Counter Problem, p. 1284

'--~~~~~~~~-

Welcome ro Starting 0111 with C++: From Control Structures through Objects, 9th edition. This book is intended for use in a two-semester C++ progra mming sequence, or an accelerated one-semester course. Students new to programming, as well as those with prior course work in other languages, will find this text beneficial. The fundamenta ls of programming are covered for the novice, while the details, pitfalls, a nd nuances of the C++ language are explored in depth for both the beginner and more experienced student. The book is written with clear, easy-ro-undersrand language, and it covers a ll the necessary topics for an introducrory programming course. This text is rich in example programs that a re concise, practical, and real-world o riented, ensuring that the student not only learns how to implement the featu res and constructs of C++, but why and when to use them.

Changes in the Ninth Edition T his book's pedagogy, organization, a nd clear writing style remain the same as in the previous edition. Many improvements and updates have been made, whic h are summarized here: • The material on the Srandard Template Library (STL) has been completely rewrircen and expanded into its own chapte1.: Previously, Chapter 16 covered exceptions, templates, a nd gave brief coverage co the STL. In chis edition, Chapter 16 covers exceptions and templates, and Chapter 17 is a new chapter dedicated to the STL. The new chapter covers the fo llowing topics: 0

o o o o o o o ;) o o

The array and vector classes The various types of iterators Emplacement versus insertion The map, multi map, and unordered_map Classes The set, mult i set, and unordered_set Classes Sorting and searching algorithms Permutation algorithms Sec a lgorithms Using function pointers with STL algorithms Function objects, o r functors Lambda expressions

• Chapter 2 now includes a discussion of alterna tive forms of variable initializa tio n, including functional noration, and brace notation (also known as uniform initialization). xvii

xviii

Preface

• Chapter 3 now mentio ns the round functio n, intro duced in C++ I l. • Chapter 7 now introd uces a rray initialization much earlier. • In Cha pter 8, the bubble sort a lgorithm has been rewrinen and improved. • A new example of sorting and searching a vector of strings has been added ro Chapter 8. • [n Chapter 9, the section on smart pointers now gives an overview of shared_ ptrs and weak_ pt r s, in addirion to the existing coverage of uni que_ptrs. • In Chapter 10, a new /11 the Spotlight sectio n on string tokenizing has been ad ded. • Chapter I0 now covers the string-to-num ber conversion functio ns that were introduced in C++ 11. • T he material on unions that previously appeared in Chapter 11 has been moved to Appendix K, available o n the book's companio n Website. • Chapter J3 has new sections covering: Member initialization liscs. '.J In-place initialization. o Constructor delegation. .J

• Several new copies were added ro Chapter 14, including: Rvalue references a nd move semantics. ') Checking for self-assignment when overload ing the = operato r. ') Using member initialization lists in aggregate classes.

.J

• C hapter 15 includes a new sectio n o n constructor inheritance. • Several new programming pro blems have been added througho ut the book.

Organizat ion of the Text T his text reaches C++ in a step-by-step fashion. Each chapter covers a major ser o f topics a nd builds k nowledge as the student progresses thro ug h the book. Altho ugh the cha pte rs can be easily taug ht in their existing sequence, some flexibility is p rovided. The d iagram shown in Fig ure P-1 suggests possible sequences of instruction . Cha pter 1 covers fund amental hardwa re, softwa re, a nd programming concepts. Yo u may choose ro skip this chapter if the class is a lready fa mil iar w ith those topics. Chapters 2 through 7 cover basic C++ syntax, data types, expressions, selectio n structures, repetition struc tures, fun ctio ns, a nd a rrays. Each o f these cha pters builds o n the previous c hapter and sho uld be covered in the o rder presented. After Chapter 7 has been covered, you may proceed to C hapter 8, o r jump to Chapter 9. After Chapter 9 has been covered, C hapter 10, 11, 12 o r l3 may be covered. (If you jum p to C hapter 12 a r this point, you will need co postpone Sectio ns 12.8, 12.9, a nd 12.1 0 unti l Chapter 11 has been covered.} After Cha pter 13, you may cover Cha pters 14 thro ug h 18 in sequence. N ex t, you ca n proceed to either Chapter 19 o r Chapter 20. Finally, C hapter 21 may be covered. This text's approach starts w ith a fi rm foundation in structured, pro cedural programming before delving fully into o bject-oriented programming a nd advanced da ta structures.

Preface

Figure P- 1

Chapter dependency cha rt Chapter 1 Introduct ion

Chapters 2- 7 Basic Language Elements

Chapter 9 Pointers

Chapter 8 Searching and Sorting Arrays

Chapter 10 Characiers, C-Strings, and More about the string Class

Chapter 11 St ructured Data

Chapter 13 Introduction to Classes

Chapter 14 More about Classes

Chapter 15 Inheritance. Polymorphism, and Virtual Funciions

Chapter 16 Exceptions and Templates

Chapter 17 The Standard Template Llbrary

Chapter 18 Linked Lists

Chapter 19 Stacks and Queues

Chapter 20 Recursion

Chapter 21 Binary Trees

Chapter 12 Advanced File Operations

xix

xx

Preface

Brief Overview of Each Chapter Chapter 1: Introduction to Computers and Programmin g This chapter provides nn introduction to the fie ld of computer science and covers the fun damentals of programming, problem solving, and software design. The components of programs, such as key words, variables, operators, and punctuation, are covered. The cools of the trade, such as pseudocode, flow charts, and hierarchy charts, are also presented.

Chapter 2 : Introduction to C++ This chapter gets the student started in C++ by introducing data types, identifiers, variable declarations, constants, comments, program output, simple arithmetic operations, and C-strings. Programming style conventions are introduced and good programming style is modeled here, as ir is throughout the text.

Chapter 3 : Expressions and Inte ractivity In this chapter, the student learns to write programs that input and handle numeric, character, and string data. The use of arithmetic operarors and the creation of mathematical expressions are covered in greater derail, with emphasis on operator precedence. Debugging is introduced, with a section on hand tracing a program. Sections are also included on simple output formatting, on data type conversion and type casting, and on using library functions that work with numbers.

Chapter 4: Making Decisions Here, the student learns about relational operators, relational expressions, and how to control the flow of a program with the if, if/else, and if/else if statements. The conditiona l operator and the switch statement are also covered . Crucial applications of these constructs are covered, such as menu-driven programs and the validation of input.

Chapter 5: Loops and Files This chapter covers repetition control structures. T he while loop, do-whi l e loop, and for loop are taught, along with common uses for these devices. Counters, accumulators, running totals, sentinels, and other application-rela ted topics are discussed. Sequential file 110 is also introduced. The student learns to read and write text fi les, and use loops to process the data in a file.

Chapter 6: Functions In this chapter, the student learns how and why ro modularize programs, using both void and value returning fun ctions. Argument passing is covered, with emphasis on when arguments should be passed by value versus when they need to be passed by reference. Scope of variables is covered, and sections are provided on local versus globa l variables and on static local variables. Overloaded functions are also introduced and demonstrated.

Preface

Chapter 7: Arrays and Vectors In this chapter, the student learns to create and work with single and multi-dimensional arrays. Many examples of array processing are provided including examples illustrating how to find the sum, average, highest, and lowest values in an array, and how to sum the rows, columns, and all elements of a two-dimensional array. Programming techniques using parallel arrays are also demonstrated, and the student is shown how to use a data file as an input source to populate an array. STL vectors are introduced and compared to arrays.

Chapter 8: Searching and Sorting Arrays Here, the student learns the basics of sorting arrays and searching for data stored in them. The chapter covers the Bubble Sorr, Selection Sort, Linear Search, and Binary Search algorithms. There is also a section on sorting and searching STL vector objects.

Chapter 9: Pointers This chapter explains how to use pointers. Pointers are compared to and contrasted with reference variables. Other topics include pointer arithmetic, initialization of pointers, relational comparison of pointers, pointers and arrays, pointers and functions, dynamic memory allocation, and more.

Chapter 10: Characters, C-Strlngs, and More about the string Class This chapter discusses various ways to process text at a detailed level. Library functions for resting and manipulating characters are introduced. C-strings are discussed, and the technique of storing C-strings in char arrays is covered. An extensive discussion of the string class methods is also given.

Chapter 11: Structured Data The student is introduced to abstract data types and taught how to create them using structures, unions, and enumerated data types. Discussions and examples include using pointers to structures, passing structures to functions, and returning structures from functions.

Chapter 12: Advanced Fiie Operations This chapter covers sequential access, random access, text, and binary files. The various modes for opening files are discussed, as well as the many methods for reading and writing file contents. Advanced output formatting is also covered.

Chapter 13: Introduction to Classes The student now shifts focus to the object-oriented paradigm. This chapter covers the fundamental concepts of classes. Member variables and functions are discussed. The student learns about private and public access specifications, and reasons to use each. The topics of constructors, overloaded constructors, and destructors are also presented. The chapter presents a section modeling classes with UML, and how to find the classes in a particular problem.

xxi

xxii

Preface

Chapter 14: More about Classes This chapter continues the study of classes. Static members, friends, memberwise assignment, and copy constructors are discussed. The chapter also includes in-depth sections on operator overloading, object conversion, and object aggregation. There is also a section on class collaborations and the use of CRC cards.

Chapter 15: Inheritance, Polymorphism, and Virtual Functions The study of classes continues in this chapter with the subjects of inheritance, polymorphism, and virtual member functions. The topics covered include base and derived class constructors and destructors, virtual member functions, base class pointers, static and dynamic binding, multiple inheritance, and class hierarchies.

Chapter 16: Exceptions and Templates The student learns to develop enhanced error trapping techniques using exceptions. Discussion then turns to function and class templates as a method for reusing code.

Chapter 17: The Standard Template Library This chapter discusses the containers, iterators, and algorithms in the Standard Template Library (STL). The specific containers covered are the array, vector, map, multimap, unordered_map, set, multi set, and unordered_set classes. The student then learns about sorting, searching, permutation, and set algorithms. The chapter concludes with a discussion of function objects (functors) and lambda functions.

Chapter 18: Linked Lists This chapter introduces concepts and techniques needed to work with lists. A linked list ADT is developed and the student is taught to code operations such as creating a linked list, appending a node, traversing the list, searching for a node, inserting a node, deleting a node, and destroying a list. A linked list class template is also demonstrated.

Chapter 19: Stacks and Queues In this chapter, the student learns to create and use static and dynamic stacks and queues. The operations of stacks and queues are defined, and templates for each ADT are demonstrated.

Chapter 20: Recursion This chapter discusses recursion and its use in problem solving. A visual trace of recursive calls is provided, and recursive applications are discussed. Many recursive algorithms are presented, including recursive functions for finding factorials, finding a greatest common denominator (GCD), performing a binary search, and sorting (QuickSort). The classic Towers of Hanoi example is also presented. For students who need more challenge, there is a section on exhaustive algorithms.

Chapter 21: Binary Trees This chapter covers the binary tree ADT and demonstrates many binary tree operations. The student learns to traverse a tree, insert an element, delete an element, replace an element, test for an element, and destroy a tree.

Preface

Appendix A: The ASCII Character Set A list of the ASCII and Extended ASCII characters and their codes

Appendix B: Operator Precedence and Associativity A chart showing the C++ operators and their precedence The following appendices are available online at www.pearsonhighered.com/gaddis.

Appendix C: Introduction to Flowcharting A brief introduction to flowcharting. This tutorial discusses sequence, decision, case, repetition, and module structures.

Appendix D: Using UML in Class Design This appendix shows the student how to use the Unified Modeling Language to design classes. Notation for showing access specification, data types, parameters, return values, overloaded functions, composition, and inheritance are included.

Appendix E: Namespaces This appendix explains namespaces and their purpose. Examples showing how to define a namespace and access its members are given.

Appendix F: Passing Command Line Arguments Teaches the student how to write a C++ program that accepts arguments from the command line. This appendix will be useful to students working in a command line environment, such as Unix, Linux, or the Windows command prompt.

Appendix Ci: Binary Numbers and Bitwise Operations A guide to the C++ bitwise operators, as well as a tutorial on the internal storage of integers

Appendix H: STL Algorithms This appendix gives a summary of each of the function templates provided by the Standard Template Library (STL), and defined in the header file.

Appendix I: Multi-Source Fiie Programs Provides a tutorial on creating programs that consist of multiple source files. Function header files, class specification files, and class implementation files are discussed.

Appendix J: Stream Member Functions for Formatting Covers stream member functions for formatting such as setf

Appendix K: Unions This appendix introduces unions. It describes the purpose of unions and the difference between a union and a struct, demonstrates how to declare a union and define a union variable, and shows example programs that use unions.

xxiii

x.xi v

Preface

Appendix L: Answe rs to Checkpoints Students may rest thei r own progress by comparing their answers to the Checkpoint exercises against this a ppendix. The answers to all Checkpoints are included.

Appendix M: Answers to Odd Numbe red Review Questions Another tool that students can use to gauge their progress

Features of the Text Concept Statements Example Programs

c;j)-

a ~

The text has hundreds of complete example programs, each designed to highlight the topic currently being studied. In most cases, these arc practical, real-world examples. Source code for these progra ms is provided so that stude nts can run the programs th emselves.

Program Output

After each example program, there is a sample of its screen output. This immediately shows the student how the program should function.

In the Spotlight

Each of these sections provides a programming problem and a detailed, step-by-step analysis showing the student how to solve ir.

VldeoNotcs

A series of onlinc videos, developed specifically for this book, is available for viewing at www.pearsonhighered.com/ga ddis. Icons appear throughout the text alerting the student to videos about specific topics.

Checkpoints

Checkpoints are questions placed throughout each chapter as a self-rest study aid. Answers for all Checkpoint questions can be downloaded from the book's Website a t www.pearsonhighered. com/gaddis. This allows students to check how well they have learned a new topic.

< ) Notes

CI)

Each major sectio n of the text starts with a concept statement. This statement summarizes the ideas of the section.

Notes appear at appropriate places throughout the text. They are short explanations of interesting or often misunderstood points relevant to the topic at hand.

Warnings

Warnings arc notes that caution the student about certain C++ features, programming techniques, or practices that can lead to malfunctioning programs or lost data.

Case Studies

Case studies that simulate real-world applications appear in many chapters throughout the text. These case studies a re designed to highlight the major copies of the chapter in which they appear.

Review Questions and Exercises

Each chapter presents a thorough and diverse set of review questions, such as fill-in-the-blank and short answer, that check the student's mastery of the basic mareriaJ presented in the chapter. These are followed by exercises requiring problem solving a nd analysis, such as the Algorithm Workbench, Predict the Output, and Find the Errors sections. Answers to the odd-numbered review questions a nd review exercises can be downloaded from the book's Website at www.pearsonhighered.com/gaddis.

Preface

Programming Challenges

Each chapter offers a pool of programming exercises designed to solidify the student's knowledge of the topics currently being studied. In most cases, the assignments present real-world problems to be solved. When applicable, these exercises include input validation rules.

Group Projects

T here are several group programming projects throughout the text, intended to be constructed by a team of st udents. One student might build the program's user interface, while another student writes the mathematical code, and a nother designs and implements a class the program uses. T his process is similar ro the way many professional programs are written and encourages team work within the classroom.

Software Development Project: Serendipity Booksellers

Available for download from the book's Website a t www. pearsonhighered.com/gaddis. T his is an ongoing project that instrucrors can optionally assign to teams of students. It systematically develops a "real-world" software package: a point-ofsale program for the fictitious Serendipity Booksellers organization. T he Serendipity assignment for each chapter adds more functiona lity to the software, using constructs and techniques covered in that chapter. When complete, the program will act as a cash register, manage an inventory database, and produce a variety of reports.

C++ Quick

For easy access, a quick reference guide to the C++ language is printed on the inside back cover of the book.

Reference Gulde C++ ll

Throughout the text, new C++ll language features are introduced. Look for the C++l 1 icon to find these new features.

Supplements Student Online Resources Many student resources are available for this book from the publisher. The fo llowing items are available on the Computer Science Porta l at www.pearsonhighered.com/gaddis: • The source code for each example program in the book • Access to the book's VideoNotes • A full set of appendices, including answers to the Checkpoint questions and answers to the odd-numbered review questions • A collection of valuable Case Studies • T he complete Serendipity Booksellers Project

xxv

xxvi

Preface

Online Practice and Assessment with MyProgramminglab MyProgrammingLab helps students fully grasp the logic, semancics, and synrax of programming. Through practice exercises and immediate, personalized feedback, MyProgrammingLab improves the programming competence of beginning students who often struggle with the basic concepts and paradigms of popular high-level programming languages. A self-study and homework tool, a MyProgrammingLab course consists of hundreds of small practice exercises organized around the structure of this textbook. For students, the system automatically detects errors in the logic and syntax of their code submissions and offers targeted hints that enable students to figure out what went wrong- and why. For instructors, a comprehensive gradebook tracks correct and incorrect answers and stores the code inputted by students for review. MyProgrammingLab is offered to users of this book in partnership with Turing's Craft, the makers of the CodeLab interactive programming exercise system. For a full demonstration, to see feedback from instructors and students, or to get started using MyProgrammingLab in your course, visit www.myprogramminglab.com.

Instructor Resources The following supplements are available o nly to qualified instructors: • Answers to all Review Questions in the text • Solutions for all Programming Challenges in the text • PowerPoinr presentation slides for every chapter • Computerized rest bank • Answers to all Student Lab Manual questions • Solutions for all Student Lab Manual programs Visit the Pearson Instructor Resource Center (www.pearsonhighered.com/irc) for information on how to access instructor resources.

Textbook Web site Student and instructor resources, including links to download Microsoft® Visual Studio Express and other popular IDEs, for all the books in the Gaddis Starting Out with series can be accessed at the following URL: http://www.pearsonhighered.com/gaddis

Which Gaddis C++ book is right for you? The Starting O ut with C++ Series includes three books, one of which is sure to fit your course:

• Starting Out with C++: From Control Structures through Objects • Starting Out with C++: Early Objects • Starting Out ivith C++: Brief Version The fo llowing chart will hel p you determine which book is right for your course.

Preface • FROM CONTROL STRUCTURES THROUGH OBJECTS • BRIEF VERSION

• EARLY OBJECTS '

i

LATE INTRODUCTION OF OBJECTS

EARLIER INTRODUCTION OF OBJECTS

Classes are introduced in Chapter 13 of the standard text and Cha pter 11 of the brief text, after control structures, functions, arrays, and poinrers. Advanced OOP ropics, such as inheritance and polymorphism, are covered in the fo llowing rwo chapters.

Classes are introduced in Chapter 7, after control structures and functions, but before arrays and pointers. Their use is then integrated into the remainder of the text. Advanced OOP topics, such as inheritance and polymorphism, are covered in Chapters 11and 15.

INTRODUCTION OF DATA STRUCTURES AND RECURSION

INTRODUCTION OF DATA STRUCTURES AND RECURSION

Linked lists, Stacks and queues, and binary trees are linked lists, stacks and queues~ and binary introduced in the final chapters of the standard text. trees are introduced in the final chapters of the text, after the chapter on recursion. Recursion is covered afrer stacks and queues, but before binary trees. These topics are not covered in the brief text, though it does have appendices dealing with linked lists and recursion.

Acknowledgments There have been many helping hands in the development and publication of this rext. \Yle would like to thank the follow ing faculty reviewers for their helpful suggestions and expertise. Reviewers for the 9th Edition Chia-Chin Chang Lakeland College

Svetlana Marzelli

William Duncan Louisiana State University

Jie Meichsner St. Cloud State Un iversity

Pranshu Gupta DeSales University

Ron Del f>orto

Charles Hardnett Gwinnett Techn ical College

Lisa Rudnitsky Baruch College

Atlantic Cape Community College

Penn State Erie, The Behrend College

Reviewers for Previous Editions Ahmad Abuhejleh University of Wisconsin-River Falls

Karen M. Arlien Bismarl-

GRADUATED COMPLEXITY MyProgrammingLab breaks down programming concepts into short, understandable sequences of exercises. Within each sequence the level and sophistication of the exercises increase gradually but steadily.

--f

. .......................................,.,....... I, .... I • ff ~"I-Al t\I"' 11 '"'-'ll 1 M ! Wl'ill'l'll

..

---~

...,.,.,.....,acu.. T

so;

.............. ..

'B a'"i"f'

::::-=:: ;:,-................_,., --- .....

DYNAMIC ROSTER

__

MyProcnmmlngl.a;;:, b'_ _ _ _ _ _ _ _.....

""

,.

~.....:!:=

Students' submissions are stored in a roster that indicates whether the submission is correct. how many attempts were made, and the actual code submissions from each attempt.

PEARSON eTEXT The Pearson eText gives students access to their textbook anytime, anywhere.

STEP-BY-STEP VIDEON OTE TUTORIA LS These step-by-step video tutorials enhance the programming concepts presented in select Pearson textbooks. For more information and titles available with MyProgrammingl ab, please visit www.myprogramminglab.com . Copynght C> 2018 Pemon Edurnion, Inc. or Its :tffil~te(s). AB rights reseNed. HEL088173 • 11 /IS

ALWAY S LEARNING

PEARSON

TO P ICS 1.1 1.2 1.3

Why Program? Computer Systems: Hardware and Software Programs and Programming Languages

1.4 1.5 1.6 1. 7

What Is a Program Made of? Input, Processing, and Output The Programming Process Procedural and Object-Oriented Programming

1~ Why Program? -{_ CONCEPT: Compucers can do many Mfercnt jobs because they a' ~tJt to \oo'rfl'• nlifttt J"f'O'irO/f.ll i11 nlllC'A~ IOllZ""P· oiiHt- prof"""'11tmt laJU~ h.'nv ~ Jmwu0 ru:abm O.\tdiqCWll'!'~by.-odlcs tl!JO'lbtY

MMIR& • "'tte:of ~r116oroOPC ium:iot)' 10 hours;

12

13 14 15

II Get the hourly pay rate. cout > rate;

16

17 18

II Cal cul ate the pay. pay = hours • rate; (program continues)

9

10

Chapter 1 Introduction to Computers and Programming Program 1-1

(continued)

19

20

II Display the pay. cout

m®Wl·li·C~l!§~·+m•1:11L____

p

Quick uunch (Ctr! · QJ

~ Gross Pay . M.c:1osoft Vr~I Studio DEBUG

1t> ") •

TEAM

SQL

TOOLS

TEST

Iii- l ocal Windows Debugger •

ANALVZE

WINDOW

C.. (+

Debug

________ _______ ____ _..:·:

~

II This progam calcul a t es the use r 's pa y.

+

#include usi ng names pace std;



Solution E>:pl°'"

- 19 mainO

(Global Scope)

x

0

HRP

·0 • .,

61

~ x

.. P-

~

Surch Sclution &plorer (Ctr!·

f:§l Gross P,,y

fiiil External D~pendencies ii Header Files ii Resource Files " 6iJ Source Files

~

Fl in t main() {

double hour s. rate. pay ;

--. GrossPay.cpp

~

II Get the number of hours worked. cout > hour s ;

Solution Explortt Team Explorer

• 11 x

Properties

II Get the hou rly pay ra t e . cou t sold ; store1 -=sold; II Adjust store 1's inventory. II Get t he number of widgets sold at store 2. cout > sold ; store2 - = sold; // Adjust store 2's inventory. II Get the number of widgets sold at store 3. cout > s ol d; store3 -=sold; II Adjust store 3's inventory . II Display each store's current inventory. cout