3,529 1,175 2MB
Pages 458 Page size 252 x 329.04 pts Year 2011
Jesse Liberty Rogers Cadenhead
Sams Teach Yourself
C++
24 Hours in
800 East 96th Street, Indianapolis, Indiana, 46240 USA
Sams Teach Yourself C++ in 24 Hours Copyright © 2011 by Pearson Education, Inc. All rights reserved. No part of this book shall be reproduced, stored in a retrieval system, or transmitted by any means, electronic, mechanical, photocopying, recording, or otherwise, without written permission from the publisher. No patent liability is assumed with respect to the use of the information contained herein. Although every precaution has been taken in the preparation of this book, the publisher and author assume no responsibility for errors or omissions. Nor is any liability assumed for damages resulting from the use of the information contained herein. ISBN-13: 978-0-672-33331-6 ISBN-10: 0-672-33331-7 Printed in the United States of America First Printing April 2011 Library of Congress Cataloging-in-Publication data is on file.
Trademarks All terms mentioned in this book that are known to be trademarks or service marks have been appropriately capitalized. Sams Publishing cannot attest to the accuracy of this information. Use of a term in this book should not be regarded as affecting the validity of any trademark or service mark.
Warning and Disclaimer Every effort has been made to make this book as complete and as accurate as possible, but no warranty or fitness is implied. The information provided is on an “as is” basis. The authors and the publisher shall have neither liability nor responsibility to any person or entity with respect to any loss or damages arising from the information contained in this book or from the use of the CD or programs accompanying it.
Bulk Sales Sams Publishing offers excellent discounts on this book when ordered in quantity for bulk purchases or special sales. For more information, please contact U.S. Corporate and Government Sales 1-800-382-3419 [email protected] For sales outside of the U.S., please contact International Sales [email protected]
Editor in Chief Mark Taub Acquisitions Editor Mark Taber Development Editor Songlin Qiu Managing Editor Sandra Schroeder Project Editor Mandie Frank Copy Editor Keith Cline Indexer Lisa Stumpf Proofreader Leslie Joseph Technical Editor Jon Upchurch Publishing Coordinator Vanessa Evans Media Producer Dan Scherf Designer Gary Adair Compositor Mark Shirar
Table of Contents Introduction
1
Part I: Beginning C++ HOUR 1: Writing Your First Program Using C++ .
5
.................................................................................................................................................................. 5
Finding a Compiler . ............................................................................................................................................. 6 Compiling and Linking the Source Code Creating Your First Program
. ....................................................................................... 9
. .................................................................................................................... 10
HOUR 2: Organizing the Parts of a Program
15
Reasons to Use C++ . ......................................................................................................................................... 15 The Parts of a Program
. .............................................................................................................................. 19
Comments . ............................................................................................................................................................... 22 Functions
. ............................................................................................................................................................... 23
HOUR 3: Creating Variables and Constants
29
What Is a Variable? . ......................................................................................................................................... 29 Defining a Variable . ......................................................................................................................................... 33 Assigning Values to Variables
. ................................................................................................................ 35
Using Type Definitions . .................................................................................................................................. 36 Constants
. ............................................................................................................................................................... 37
HOUR 4: Using Expressions, Statements, and Operators
43
Statements . ............................................................................................................................................................... 43 Expressions Operators
. ........................................................................................................................................................... 44
. ............................................................................................................................................................... 45
If-Else Conditional Statements . ......................................................................................................... 53
Logical Operators
. ............................................................................................................................................. 56
Tricky Expression Values
. ........................................................................................................................... 58
iv
Sams Teach Yourself C++ in 24 Hours
HOUR 5: Calling Functions What Is a Function?
63
. ...................................................................................................................................... 63
Declaring and Defining Functions . ..................................................................................................... 64 Using Variables with Functions Function Parameters
. ............................................................................................................ 66
. ...................................................................................................................................... 69
Returning Values from Functions . ......................................................................................................... 70 Default Function Parameters
. ................................................................................................................ 72
Overloading Functions. .................................................................................................................................. 74 HOUR 6: Controlling the Flow of a Program Looping
81
. .................................................................................................................................................................. 81
while Loops.
........................................................................................................................................................... 81
do-while Loops for Loops
. ................................................................................................................................................ 85
. ............................................................................................................................................................... 86
switch Statements
. ......................................................................................................................................... 90
HOUR 7: Storing Information in Arrays and Strings What Is an Array?
97
. ......................................................................................................................................... 97
Writing Past the End of Arrays
. ............................................................................................................ 99
Initializing Arrays . ......................................................................................................................................... 100 Multidimensional Arrays
. ....................................................................................................................... 101
Character Arrays. ............................................................................................................................................. 104 Copying Strings
. ............................................................................................................................................. 106
Part II: Classes HOUR 8: Creating Basic Classes What Is a Type?
111
. ............................................................................................................................................. 111
Creating New Types . ...................................................................................................................................... 112 Classes and Members . .................................................................................................................................. 112 Accessing Class Members
. ....................................................................................................................... 114
Private Versus Public Access
. ................................................................................................................ 115
Implementing Member Functions Creating and Deleting Objects .
. .................................................................................................. 116
............................................................................................................ 118
v
Table of Contents
HOUR 9: Moving into Advanced Classes const Member Functions
125
. ....................................................................................................................... 125
Interface Versus Implementation . ..................................................................................................... 126 Organizing Class Declarations and Function Definitions Inline Implementation .
. ............................................ 126
.............................................................................................................................. 127
Classes with Other Classes as Member Data
. ........................................................................ 129
Part III: Memory Management HOUR 10: Creating Pointers
137
Understanding Pointers and Their Usage .
................................................................................... 137
The Stack and the Heap . ........................................................................................................................... 146 HOUR 11: Developing Advanced Pointers Creating Objects on the Heap Deleting Objects
155
. ............................................................................................................ 155
. ............................................................................................................................................. 155
Accessing Data Members Using Pointers
. ................................................................................... 157
Member Data on the Heap . .................................................................................................................... 158 The this Pointer . ............................................................................................................................................. 160 Stray or Dangling Pointers const Pointers
. .................................................................................................................... 161
. ................................................................................................................................................ 162
const Pointers and const Member Functions
. ..................................................................... 163
HOUR 12: Creating References
169
What Is a Reference? . .................................................................................................................................. 169 Creating a Reference
. .................................................................................................................................. 170
Using the Address of Operator on References .
........................................................................ 171
What Can Be Referenced? . ....................................................................................................................... 173 Null Pointers and Null References
. .................................................................................................. 174
Passing Function Arguments by Reference . ................................................................................ 174 Understanding Function Headers and Prototypes Returning Multiple Values
. .............................................................. 179
. .................................................................................................................... 179
vi
Sams Teach Yourself C++ in 24 Hours
HOUR 13: Developing Advanced References and Pointers
185
Passing by Reference for Efficiency . .................................................................................................. 185 Passing a const Pointer . ........................................................................................................................... 188 References as an Alternative to Pointers
. ................................................................................... 191
When to Use References and When to Use Pointers . .......................................................... 192 Don’t Return a Reference to an Object That Isn’t in Scope! . ........................................ 193 Returning a Reference to an Object on the Heap Pointer, Pointer, Who Has the Pointer?
. .............................................................. 194
. ....................................................................................... 196
Part IV: Advanced C++ HOUR 14: Calling Advanced Functions Overloaded Member Functions Using Default Values Initializing Objects
201
. ......................................................................................................... 201
. .................................................................................................................................. 203
. ...................................................................................................................................... 205
The Copy Constructor
. .............................................................................................................................. 206
HOUR 15: Using Operator Overloading
215
Operator Overloading
. .............................................................................................................................. 215
Conversion Operators
. .............................................................................................................................. 225
Part V: Inheritance and Polymorphism HOUR 16: Extending Classes with Inheritance
233
What Is Inheritance? . .................................................................................................................................. 233 Private Versus Protected
. ........................................................................................................................... 236
Constructors and Destructors. ................................................................................................................ 238 Passing Arguments to Base Constructors . ................................................................................... 241 Overriding Functions . .................................................................................................................................. 245 HOUR 17: Using Polymorphism and Derived Classes
253
Polymorphism Implemented with Virtual Methods . .......................................................... 253 How Virtual Member Functions Work .
.......................................................................................... 257
vii
Table of Contents
HOUR 18: Making Use of Advanced Polymorphism
269
Problems with Single Inheritance . ..................................................................................................... 269 Abstract Data Types
. .................................................................................................................................. 273
HOUR 19: Storing Information in Linked Lists
289
Linked Lists and Other Structures . ..................................................................................................... 289 Linked List Case Study .
.............................................................................................................................. 290
Linked Lists as Objects .
.............................................................................................................................. 299
Part VI: Special Topics HOUR 20: Using Special Classes, Functions, and Pointers
303
Static Member Data . ...................................................................................................................................... 303 Static Member Functions Containment of Classes
. ....................................................................................................................... 305
. ........................................................................................................................... 307
Friend Classes and Functions
. ............................................................................................................ 313
HOUR 21: Using New Features of C++0x
331
The Next Version of C++ . ........................................................................................................................... 331 Null Pointer Constant
. .............................................................................................................................. 332
Compile-Time Constant Expressions . .............................................................................................. 333 Auto-Typed Variables . .................................................................................................................................. 335 New for Loop
. ................................................................................................................................................ 338
HOUR 22: Employing Object-Oriented Analysis and Design The Development Cycle
343
. ........................................................................................................................... 343
Simulating an Alarm System
. ............................................................................................................ 344
PostMaster: A Case Study
. ....................................................................................................................... 351
HOUR 23: Creating Templates
373
What Are Templates? . .................................................................................................................................. 373 Instances of the Template . ....................................................................................................................... 374 Template Definition . ...................................................................................................................................... 374 Using Template Items
. .............................................................................................................................. 381
viii
Sams Teach Yourself C++ in 24 Hours
HOUR 24: Dealing with Exceptions and Error Handling Bugs, Errors, Mistakes, and Code Rot
389
. .......................................................................................... 389
Handling the Unexpected . ....................................................................................................................... 390 Exceptions
. ........................................................................................................................................................... 391
Using try and catch Blocks
. ................................................................................................................ 395
Writing Professional-Quality Code . .................................................................................................. 400
Part VII: Appendices APPENDIX A: Binary and Hexadecimal Other Bases
409
. ........................................................................................................................................................ 410
Around the Bases Hexadecimal
. ......................................................................................................................................... 410
. .................................................................................................................................................... 414
APPENDIX B: Glossary
419
APPENDIX C: This Book’s Website
427
Index
429
About the Authors Jesse Liberty is the author of numerous books on software development, including best-selling titles on C++ and .NET. He is the president of Liberty Associates, Inc. (http://www.libertyassociates.com), where he provides custom programming, consulting, and training. Rogers Cadenhead is a writer, computer programmer, and web developer who has written 23 books on Internet-related topics, including Sams Teach Yourself Java in 21 Days and Sams Teach Yourself Java in 24 Hours. He publishes the Drudge Retort and other websites that receive more than 22 million visits a year. This book’s official website is at http://cplusplus.cadenhead.org.
Dedications This book is dedicated to Edythe, who provided life; Stacey, who shares it; and Robin and Rachel, who give it purpose. —Jesse Liberty This book is dedicated to my dad, who’s currently teaching himself something a lot harder than computer programming: how to walk again after spinal surgery. Through the many months of rehab, you’ve been an inspiration. I’ve never known someone with as much indefatigable determination to fix the hitch in his giddy-up. —Rogers Cadenhead
Acknowledgments With each book, there is a chance to acknowledge and to thank those folks without whose support and help this book literally would have been impossible. First among them are Stacey, Robin, and Rachel Liberty. —Jesse Liberty
A book like this requires the hard work and dedication of numerous people. Most of them are at Sams Publishing in Indianapolis, and to them I owe considerable thanks—in particular, to Keith Cline, Mandie Frank, Songlin Qiu, Mark Taber, and Jon Upchurch. Most of all, I thank my incredible wife, Mary, and sons, Max, Eli, and Sam. —Rogers Cadenhead
We Want to Hear from You! As the reader of this book, you are our most important critic and commentator. We value your opinion and want to know what we’re doing right, what we could do better, what areas you’d like to see us publish in, and any other words of wisdom you’re willing to pass our way. You can email or write directly to let us know what you did or didn’t like about this book, as well as what we can do to make our books stronger. Please note that we cannot help you with technical problems related to the topic of this book, and we might not be able to reply to every message. When you write, please be sure to include this book’s title and author as well as your name and contact information. Email: [email protected] Mail:
Reader Feedback Sams Publishing/Pearson Education 800 East 96th Street Indianapolis, IN 46240 USA
Reader Services Visit our website and register this book at informit.com/register for convenient access to any updates, downloads, or errata that might be available for this book.
This page intentionally left blank
Introduction Congratulations! By reading this sentence, you are already 20 seconds closer to learning C++, one of the most important programming languages in the world. If you continue for another 23 hours, 59 minutes, and 40 seconds, you will master the fundamentals of the C++ programming language. Twenty-four 1-hour lessons cover the fundamentals, such as managing I/O, creating loops and arrays, using object-oriented programming with templates, and creating C++ programs. All of this has been organized into well-structured, easy-to-follow lessons. There are working projects that you create—complete with output and an analysis of the code—to illustrate the topics of the hour. Syntax examples are clearly marked for handy reference. To help you become more proficient, each hour ends with a set of common questions and answers.
Who Should Read This Book? You don’t need any previous experience in programming to learn C++ with this book. This book starts with the basics and teaches you both the language and the concepts involved with programming C++. Whether you are just beginning or already have some experience programming, you will find that this book makes learning C++ fast and easy.
Should I Learn C First? No, you don’t need to learn C first. C++ is a much more powerful and versatile language that was created by Bjarne Stroustrup as a successor to C. Learning C first can lead you into some programming habits that are more error-prone than what you’ll do in C++. This book does not assume that readers are familiar with C.
2
Sams Teach Yourself C++ in 24 Hours
Why Should I Learn C++? You could be learning a lot of other languages, but C++ is valuable to learn because it has stood the test of time and continues to be a popular choice for modern programming. In spite of being created in 1979, C++ is still being used for professional software today because of the power and flexibility of the language. There’s even a new version of the language coming up, which has the working title C++0x and makes the language even more useful. Because other languages such as Java were inspired by C++, learning the language can provide insight into them, as well. Mastering C++ gives you portable skills that you can use on just about any platform on the market today, from personal computers to Linux and UNIX servers to mainframes to mobile devices.
What If I Don’t Want This Book? I’m sorry you feel that way, but these things happen sometimes. Please reshelve this book with the front cover facing outward on an endcap with access to a lot of the store’s foot traffic.
Conventions Used in This Book This book contains special elements as described here.
By the Way Watch Out!
Did you Know?
These boxes provide additional information to the material you just read.
These boxes focus your attention on problems or side effects that can occur in specific situations.
These boxes give you tips and highlight information that can make your C++ programming more efficient and effective.
3
Introduction
When you see this symbol, you know that what you see next will show the output from a code listing/example. This book uses various typefaces:
. To help you distinguish C++ code from regular English, actual C++ code is typeset in a special monospace font.
. Placeholders—words or characters temporarily used to represent the real words or characters you would type in code—are typeset in italic monospace.
. New or important terms are typeset in italic. . In the listings in this book, each real code line is numbered. If you see an unnumbered line in a listing, you’ll know that the unnumbered line is really a continuation of the preceding numbered code line (some code lines are too long for the width of the book). In this case, you should type the two lines as one; do not divide them.
This page intentionally left blank
HOUR 1
Writing Your First Program What You’ll Learn in This Hour: . . . .
How and why C++ was invented How to find a C++ compiler How to create and compile your first program How to link and run the program
Using C++ In 1979, a Danish computer scientist at Bell Labs in the United States began work on an enhancement to the C programming language. Bjarne Stroustrop explained on his personal website that he wanted a language “in which I could write programs that were both efficient and elegant.” A lot of other people wanted that too. Stroustrop’s creation, which he dubbed C++, has held a spot among the world’s top programming languages for decades. Many programming trends have come and gone over the years, but this language remains a contemporary and useful choice for software development on desktop computers, embedded devices like smartphones and MP3 players, and many other computing environments. C++ is a portable language that works equally well on Microsoft Windows, Apple Mac OS, Linux, and UNIX systems. The best way to learn the language is to write programs without regard to the operating system the program runs on. Sams Teach Yourself C++ in 24 Hours offers a hands-on introduction to the language that makes absolutely no assumptions about your operating system. This book can
6
HOUR 1: Writing Your First Program
achieve this because it covers standard C++ (also called ANSI/ISO C++), the internationally agreed-upon version of the language, which is portable to any platform and development environment. The code presented throughout the book is standard ANSI/ISO C++ and should work with any development environment for C++ that’s up-to-date. New features that will be part of C++0x, the language’s next version, also are covered. Some of the most useful ones have begun showing up on an experimental basis in popular C++ development environments ahead of its scheduled release date in early 2012. C++ programs are developed by a set of tools that work together called the compiler and linker. A compiler turns C++ programs into a form that can be run. The compiler translates a program from human-readable form called source code into a machine-runnable form called machine code. The compiler produces an object file. A linker builds an executable file from the object file that can be run. There are several popular environments for C++ programming that you might have used before or know how to obtain. Some of these are GCC (the GNU Compiler Collection), Microsoft Visual C++, NetBeans and Code::Blocks. If you have a C++ compiler on your system and know the basics of how to use it, you will have no trouble completing the programming projects in this book. If you don’t have a C++ compiler, don’t know how to use a compiler, or don’t know how to find one, relax. The next section will help.
Finding a Compiler The programs in this book were created and tested first with GCC, a free and open source set of programming tools that support C++ software development. GCC is extremely popular on Linux and available for Windows and Mac OS systems, too. GCC works in a command-line environment where you type in a command to make the C++ compiler and linker create a program. Some computers have GCC installed along with the operating system. If you know how to use the command line on your computer, you can type the following command to see whether GCC is installed: g++ ––version
Finding a Compiler
7
G++ is GCC’s C++ compiler and linker. If you see a message like this, you have it on your computer: g++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1 Copyright (C) 2009 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY o FITNESS FOR A PARTICULAR PURPOSE.
The version message displays the operating system and version number of the compiler. G++ is all that you need to create the programs in this book. If you don’t have GCC, you can install it on Microsoft Windows as part of MinGW (Minimalist GNU for Windows), a free set of development tools for creating Windows software. Visit the MinGW website at http://www.mingw.org to find out more about the software and download it. Click the Downloads link on the home page—which may be in the sidebar—to open a web page where it is available for download.
Apple users can get GCC by installing XCode from their Mac OS X installation CD or by registering as an Apple developer at http://developer.apple.com.
The download page is on SourceForge, a project-hosting service for software. Click the proper download link to download an installation wizard for MinGW on your computer. After the download completes, open the folder where it was downloaded and doubleclick the MinGW icon to run the Installation Wizard. Click Next to begin. Follow the instructions to review the software license agreement and decide how to install the program. During one step, the wizard asks which components you want to install, as shown in Figure 1.1. Check the MinGW base tools and G++ compiler check boxes and click Next. You’re asked where to install the software. C:\MinGW is the default folder. You can either keep that default or choose another folder, which will be created if necessary. Click Next to continue. As the final step, you’re asked which Start Menu folder to put shortcuts for MinGW in. Choose one (or accept the MinGW default) and click Install. MinGW is downloaded and installed on your computer.
By the Way
8
HOUR 1: Writing Your First Program
FIGURE 1.1 Installing MinGW’s C++ compiler.
A progress bar marks how the process is going. If it completes successfully, you’re ready to open a command line on your Windows computer and see whether it’s there. To open a command line
. On Windows XP or Windows 7, choose All Programs, Accessories, Command Prompt.
. On Windows Vista, choose Programs, Accessories, Command Prompt. The command window is a plain window with a blinking cursor next to the folder you are currently working in. To change to another folder, use the CD command followed by a space and the name of the new folder. The following command moves you to the folder where MinGW’s G++ tool is located: cd C:\MinGW\bin
In this folder, you can run the command to see that G++ is working properly: g++ ––version
To make it possible to run G++ from any folder, you can add its location to your Windows computer’s Path variable. Path holds the list of folders to check whenever a program is run and it can’t be found in the current folder. To edit your Path, open the Environment Variables dialog, as follows:
1. Right-click the My Computer icon on your desktop or Start menu and choose Properties. The System Properties dialog opens.
2. Click the Advanced tab or Advanced System Settings link to bring it to the front.
Compiling and Linking the Source Code
3. Click the Environment Variables button. The Environment Variables dialog opens.
4. Choose Path and click Edit. The Edit System Variable dialog opens. 5. In the Variable Value field, add the following to the end of the Path value: ;C:\MinGW\bin (being sure to include the semicolon at the beginning).
6. Click OK to close each of the dialogs.
The next time you open a new command window, the g++ ––version command should work in any folder. Switch to different folders to see that it works. Microsoft Visual Studio also supports C++ programming—the current version of that integrated development environment is Visual Studio 2010. Although the installation of that software is too complicated to cover in detail here, some guidance also is offered in this book for people learning C++ with Visual Studio.
Compiling and Linking the Source Code Before you create your first C++ program later this hour, it’s worthwhile to understand how the process works. C++ programs begin as source code, which is just text typed into an editor such as Windows WordPad, Gedit, Emacs, or Vi. Although Microsoft Word and other word processors can save files as plain text, you should use a simpler editor for programming because you don’t need all the formatting and presentation capabilities of a word processor. Source code consists of plain text with no special formatting. The source code files you create for C++ can be given filenames ending with the extensions .cpp, .cxx, .cp, or .c. This book names all source code files with the .cpp extension, the most common choice of C++ programmers and the default for
some compilers. Most C++ compilers don’t care about the extension given to source code, but using .cpp consistently helps you identify source code files. Source code is the human-readable form of a C++ program. It can’t be run until it is compiled and linked. After your source code is compiled, an object file is produced. This file is turned into an executable program by a linker. C++ programs are created by linking together one or more object files with one or more libraries. A library is a collection of linkable files that provide useful functions and classes that you can rely on in your programs. A function is a block of code that
9
10
HOUR 1: Writing Your First Program
performs a task, such as multiplying two numbers or displaying text. A class is the definition of a new type of data and related functions. Here are the steps to create a C++ program:
1. Create a source code file with a text editor. 2. Use a compiler to convert the source code into an object file. 3. Use a linker to link the object file and any necessary libraries to produce an executable program.
4. Type the name of the executable to run it.
The GCC compiler can handle compiling and linking in a single step.
Creating Your First Program Now that you’ve been introduced to how the process works, it’s time to create your first C++ program and give the compiler a test drive. Run the text editor you’re using to create programs and open a new file. The first program that you will create displays text on the screen. Type the text of Listing 1.1 into the editor. Ignore the numbers along the left side of the listing and the colons that follow them. The numbers are there simply for reference purposes in this book. As you type, make sure to enter the punctuation on each line properly, such as the :: and