C++ Primer Plus (P2) pps

20 504 0
C++ Primer Plus (P2) pps

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

computer. Thus, you can use the same high-level language program on different platforms by using a separate compiler for each platform. Ritchie wanted a language that combined low-level efficiency and hardware access with high-level generality and portability. So, building from older languages, he created C. C Programming Philosophy Because C++ grafts a new programming philosophy onto C, we should first take a look at the older philosophy that C follows. In general, computer languages deal with two concepts—data and algorithms. The data constitute the information a program uses and processes. The algorithms are the methods the program uses (see Figure 1.1). C, like most mainstream languages to date, is a procedural language. That means it emphasizes the algorithm side of programming. Conceptually, procedural programming consists of figuring out the actions a computer should take and then using the programming language to implement those actions. A program prescribes a set of procedures for the computer to follow to produce a particular outcome, much as a recipe prescribes a set of procedures for a cook to follow to produce a cake. Figure 1.1. Data + algorithms = program. This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. Earlier procedural languages, such as FORTRAN and BASIC, ran into organizational problems as programs grew larger. For example, programs often use branching statements, which route execution to one or another set of instructions depending upon the result of some sort of test. Many older programs had such tangled routing (called "spaghetti programming") that it was virtually impossible to understand a program by reading it, and modifying such a program was an invitation to disaster. In response, computer scientists developed a more disciplined style of programming called structured programming. C includes features to facilitate this approach. For example, structured programming limits branching (choosing which instruction to do next) to a small set of well-behaved constructions. C incorporates these constructions (the for loop, the while loop, the do while loop, and the if else statement) into its vocabulary. Top-down design was another of the new principles. The idea is to break a large program into smaller, more manageable tasks. If one of these tasks is still too broad, divide it into yet smaller tasks. Continue with this process until the program is compartmentalized into small, easily programmed modules. (Organize your study. Aargh! Well, organize your desk, your table top, your filing cabinet, and your bookshelves. Aargh! Well, start with the desk and organize each drawer, starting with the middle one. Hmmm, perhaps I can manage that task.) C's design facilitates this approach, encouraging you to develop program units called functions to represent individual task modules. As you may have noticed, the structured programming techniques reflect a procedural mind-set, thinking of a program in terms of the actions it performs. Object-Oriented Programming Although the principles of structured programming improved the clarity, reliability, and ease of maintenance of programs, large-scale programming still remains a challenge. Object-oriented programming (OOP) brings a new approach to that challenge. Unlike procedural programming, which emphasizes algorithms, OOP emphasizes the data. This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. Rather than trying to fit a problem to the procedural approach of a language, OOP attempts to fit the language to the problem. The idea is to design data forms that correspond to the essential features of a problem. In C++, a class is a specification describing such a new data form, and an object is a particular data structure constructed according to that plan. For example, a class could describe the general properties of a corporation executive (name, title, salary, unusual abilities, for example), while an object would represent a specific executive (Guilford Sheepblat, vice president, $325,000, knows how to use a CONFIG.SYS file). In general, a class defines what data are used to represent an object and the operations that can be performed upon that data. For example, suppose you were developing a computer drawing program capable of drawing a rectangle. You could define a class to describe a rectangle. The data part of the specification could include such things as the location of the corners, the height and width, the color and style of the boundary line, and the color and pattern used to fill the rectangle. The operations part of the specification could include methods for moving the rectangle, resizing it, rotating it, changing colors and patterns, and copying the rectangle to another location. If you then use your program to draw a rectangle, it will create an object according to the class specification. That object will hold all the data values describing the rectangle, and you can use the class methods to modify that rectangle. If you draw two rectangles, the program will create two objects, one for each rectangle. The OOP approach to program design is to first design classes that accurately represent those things with which the program deals. A drawing program, for example, might define classes to represent rectangles, lines, circles, brushes, pens, and the like. The class definitions, recall, include a description of permissible operations for each class, such as moving a circle or rotating a line. Then you proceed to design a program using objects of those classes. The process of going from a lower level of organization, such as classes, to a higher level, such as program design, is called bottom-up programming. There's more to OOP programming than the binding of data and methods into a class definition. OOP, for example, facilitates creating reusable code, and that eventually can save a lot of work. Information hiding safeguards data from improper access. Polymorphism lets you create multiple definitions for operators and functions, with the programming context determining which definition is used. Inheritance lets you derive new classes from old ones. As you can see, object-oriented programming introduces This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. many new ideas and involves a different approach to programming than does procedural programming. Instead of concentrating on tasks, you concentrate on representing concepts. Instead of taking a top-down programming approach, you sometimes take a bottom-up approach. This book will guide you through all these points with plenty of easily grasped examples. Designing a useful, reliable class can be a difficult task. Fortunately, OOP languages make it simple to incorporate existing classes into your own programming. Vendors provide a variety of useful class libraries, including libraries of classes designed to simplify creating programs for environments such as Windows or the Macintosh. One of the real benefits of C++ is that it lets you easily reuse and adapt existing, well-tested code. Generic Programming Generic programming is yet another programming paradigm supported by C++. It shares with OOP the aim of making it simpler to reuse code and the technique of abstracting general concepts. But while OOP emphasizes the data aspect of programming, generic programming emphasizes the algorithmic aspect. And its focus is different. OOP is a tool for managing large projects, while generic programming provides tools for performing common tasks, such as sorting data or merging lists. The term generic means to create code that is type-independent. C++ data representations come in many types—integers, numbers with fractional parts, characters, strings of characters, user-defined compound structures of several types. If, for example, you wanted to sort data of these various types, you normally have to create a separate sorting function for each type. Generic programming involves extending the language so that you can write a function for a generic (that is, not specified) type once, and use it for a variety of actual types. C++ templates provide a mechanism for doing that. C++ Like C, C++ began its life at Bell Labs, where Bjarne Stroustrup developed the language in the early 1980s. In his own words, "C++ was designed primarily so that my friends and I would not have to program in assembler, C, or various modern This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. high-level languages. Its main purpose was to make writing good programs easier and more pleasant for the individual programmer" (Bjarne Stroustrup, The C++ Programming Language. Third Edition. Reading, MA: Addison-Wesley Publishing Company, 1997). Stroustrup was more concerned with making C++ useful than with enforcing particular programming philosophies or styles. Real programming needs are more important than theoretical purity in determining C++ language features. Stroustrup based C++ on C because of C's brevity, its suitability to system programming, its widespread availability, and its close ties to the UNIX operating system. C++'s OOP aspect was inspired by a computer simulation language called Simula67. Stroustrup added OOP features and generic programming support to C without significantly changing the C component. Thus C++ is a superset of C, meaning that any valid C program is a valid C++ program, too. There are some minor discrepancies, but nothing crucial. C++ programs can use existing C software libraries. Libraries are collections of programming modules that you can call up from a program. They provide proven solutions to many common programming problems, thus saving you much time and effort. This has helped the spread of C++. The name C++ comes from the C increment operator ++, which adds 1 to the value of a variable. The name C++ correctly suggests an augmented version of C. A computer program translates a real-life problem into a series of actions to be taken by a computer. While the OOP aspect of C++ gives the language the ability to relate to concepts involved in the problem, the C part of C++ gives the language the ability to get close to the hardware (see Figure 1.2). This combination of abilities has helped the spread of C++. It may also involve a mental shift of gears as you turn from one aspect of a program to another. (Indeed, some OOP purists regard adding OOP features to C akin to adding wings to a pig, albeit a lean, efficient pig.) Also, because C++ grafts OOP onto C, you can ignore C++'s object-oriented features. But you'll miss a lot if that's all you do. Figure 1.2. C++ duality. This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. Only after C++ achieved some success did Stroustrup add templates, enabling generic programming. And only after the template feature had been used and enhanced did it become apparent that they were perhaps as significant an addition as OOP—or even more significant, some would argue. The fact that C++ incorporates both OOP and generic programming, as well as the more traditional procedural approach demonstrates that C++ emphasizes the utilitarian over the ideological approach, and that is one of the reasons for the language's success. Portability and Standards You've written a handy C++ program for the elderly 286 PC AT computer at work when management decides to replace the machine with a Sun workstation, a computer using a different processor and a different operating system. Can you run your program on the new platform? Of course, you'll have to recompile the program using a C++ compiler designed for the new platform. But will you have to make any changes to the code you wrote? If you can recompile the program without making changes and it runs without a hitch, we say the program is portable. This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. There are a couple of obstacles to portability, the first of which is hardware. A program that is hardware-specific is not likely to be portable. One that takes direct control of an IBM PC VGA video board, for example, will be speaking gibberish as far as a Sun is concerned. (You can minimize portability problems by localizing the hardware-dependent parts in function modules; then you just have to rewrite those specific modules.) We will avoid that sort of programming in this book. The second obstacle to portability is language divergence. Certainly, that can be a problem with spoken languages. A Yorkshireman's description of the day's events may not be portable to Brooklyn, even though English is spoken in both areas. Computer languages, too, can develop dialects. Is the IBM PC C++ implementation the same as the Sun implementation? Although most implementers would like to make their versions of C++ compatible with others, it's difficult to do so without a published standard describing exactly how the language works. Therefore, the American National Standards Institute (ANSI) created a committee in 1990(ANSI X3J16) to develop a standard for C++. (ANSI already has developed a standard for C.) The International Standardization Organization (ISO) soon joined the process with its own committee (ISO-WG-21), creating a joint ANSI/ISO effort to develop the C++ standard. These committees met jointly three times a year, and we'll simply lump them together notationally as the ANSI/ISO committee. ANSI/ISO's decision to create a standard emphasizes that C++ has become an important and widespread language. It also indicates C++ has reached a certain level of maturity, for it's not productive to introduce standards while a language is developing rapidly. Nonetheless, C++ has undergone significant changes since the committee began its work. Work on the ANSI/ISO C++ standard began in 1990. The committee issued some interim working papers in the following years. In April 1995 it released a Committee Draft (CD) for public comment. In December 1996 it released a second version (CD2) for further public review. These documents not only refined the description of existing C++ features but also extended the language with exceptions, RTTI, templates, and the Standard Template Library. The final International Standard (ISO/IEC 14882:1998) was adopted in 1998 by the ISO, IEC (International Electrotechnical Committee), and ANSI. This book is based on that standard. The ANSI/ISO C++ standard additionally draws upon the ANSI C standard, because C++ is supposed to be, as far as possible, a superset of C. That means any valid C program ideally should also be a valid C++ program. There are a few differences This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. between ANSI C and the corresponding rules for C++, but they are minor. Indeed, ANSI C incorporates some features first introduced in C++, such as function prototyping and the const type qualifier. Prior to the emergence of ANSI C, the C community followed a de facto standard based on the book The C Programming Language, by Kernighan and Ritchie (Addison-Wesley Publishing Company Reading, MA. 1978). This standard often was termed K&R C; with the emergence of ANSI C, the simpler K&R C now sometimes is called classic C. The ANSI C standard not only defines the C language, it also defines a standard C library that ANSI C implementations must support. C++ also uses that library; this book will refer to it as the standard C library or the standard library. In addition, the ANSI/ISO C++ standard provides a standard library of C++ classes. More recently, the C standard has been revised; the new standard, sometimes called C99, was adopted by ISO in 1999 and ANSI in 2000. The standard adds some features to C, such as a new integer type, that some C++ compilers support. Although not part of the current C++ standard, these features may become part of the next C++ standard. Before the ANSI/ISO C++ committee began its work, many people accepted the most recent Bell Labs version of C++ as a standard. For example, a compiler might describe itself as compatible with Release 2.0 or Release 3.0 of C++. Before getting to the C++ language proper, let's cover some of the groundwork about creating programs and about using this book. The Mechanics of Creating a Program Suppose you've written a C++ program. How do you get it running? The exact steps depend upon your computer environment and the particular C++ compiler you use, but they will resemble the following steps (see Figure 1.3): Use a text editor of some sort to write the program and save it in a file. This file constitutes the source code for your program. This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. Compile the source code. This means running a program that translates the source code to the internal language, called machine language, used by the host computer. The file containing the translated program is the object code for your program. Link the object code with additional code. C++ programs, for example, normally use libraries. A C++ library contains object code for a collection of computer routines, called functions, to perform tasks such as displaying information on the screen or calculating the square root of a number. Linking combines your object code with object code for the functions you use and with some standard startup code to produce a runtime version of your program. The file containing this final product is called the executable code. Figure 1.3. Programming steps. This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. You will encounter the term source code throughout the book, so be sure to file it away in your personal random-access memory. The programs in this book are generic and should run in any system supporting modern C++. (However, you may need one of the latest versions to get support for namespaces and the newest template features.) The steps for putting a program together may differ. Let's look a little further at these steps. Creating the Source Code Some C++ implementations, such as Microsoft Visual C++, Borland C++ (various versions), Watcom C++, Symantec C++, and Metrowerks CodeWarrior, provide integrated development environments (IDEs) that let you manage all steps of program development, including editing, from one master program. Other implementations, such as AT&T C++ or GNU C++ on UNIX and Linux, just handle the compilation and linking stages and expect you to type commands on the system command line. In such cases, you can use any available text editor to create and modify source code. On UNIX, for example, you can use vi or ed or ex or emacs. On a DOS system, you can use edlin or edit or any of several available program editors. You can even use a word processor, providing you save the file as a standard DOS ASCII text file instead of in a special word processor format. In naming a source file, you must use the proper suffix to identify the file as a C++ file. This not only tells you the file is C++ source code, it tells the compiler that, too. (If a UNIX compiler complains to you about a "bad magic number," that's just its endearingly obscure way of saying that you used the wrong suffix.) The suffix consists of a period followed by a character or group of characters called the extension (see Figure 1.4). Figure 1.4. Source file extension. This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. [...]... implemented C++ with a C++- to-C compiler program instead of developing a direct C++- to-object code compiler This program, called cfront (for C front end), translated C++ source code to C source code, which could then be compiled by a standard C compiler This approach simplified introducing C++ to the C community Other implementations have used this approach to bring C++ to other platforms As C++ has developed... it Thanks C++ on the Macintosh The primary Macintosh C++ compiler is Metrowerks CodeWarrior It provides project-based IDEs similar, in basic concepts, to what you would find in a Windows compiler Start by selecting New Project from the File menu You'll be given a choice of project types For CodeWarrior, choose MacOS:C /C++: ANSI C++ Console in older versions, MacOS:C /C++: Standard Console:Std C++ Console... lowercase, so DOS implementations use additional letters, as shown in Table 1.1, to distinguish between C and C++ programs Table 1.1 Source Code Extensions C++ Implementation Source Code Extension UNIX AT&T C, cc, cxx, c GNU C++ C, cc, cxx, cpp Symantec cpp, cp Borland C++ cpp Watcom cpp Microsoft Visual C++ cpp, cxx Metrowerks CodeWarrior cp, cpp This document was created by an unregistered ChmMagic, please... Enter Our System This book describes the ISO/ANSI C++ Standard (ISO/IEC 14882:1998), so the examples should work with any C++ implementation compatible with that standard (At least, this is the vision and hope of portability.) However, the C++ standard is still new, and you may find a few discrepancies For example, at the time of this writing, some C++ compilers lack namespaces or the newest template... system If you have access to the cfront translator and know C, you may want to inspect the C translations of your C++ programs and get an inside look at how some C++ features are implemented UNIX Compiling and Linking Suppose, for example, that you are on a UNIX system using AT&T Release 3.0 C++ Use the CC command to compile your program The name is in uppercase letters to distinguish it from the standard... such as Windows applications Instead, you want to run in a character-based mode The choice will depend on the compiler For Microsoft Visual C++, use the Win32 Console Application option Metrowerks compilers offer a Win32 Console C++ App option and a Win32 WinSIOUX C++ App option, either of which work (The former runs the compiled program in a DOS window, the latter runs it in a This document was created... you use depends on the C++ implementation Table 1.1 shows some common choices For example, spiffy.C is a valid AT&T C++ source code filename Note that UNIX is case sensitive, meaning you should use an uppercase C character Actually, a lowercase c extension also works, but standard C uses that extension So, to avoid confusion on UNIX systems, use c with C programs and C with C++ programs If you don't... to bring C++ to other platforms As C++ has developed and grown in popularity, more and more implementers have turned to creating C++ compilers that generate object code directly from C++ source code This direct approach speeds up the compilation process and emphasizes that C++ is a separate, if similar, language Often the distinction between a cfront translator and compiler is nearly invisible to the... precious.o: g++ my.cxx precious.o The Comeau C++ compiler (www.comeaucomputing.com) is another possibility; it requires the presence of the GNU compiler The GNU compiler is available for many platforms, including MS-DOS running on IBM- compatible PCs as well as UNIX systems on a variety of platforms Command-Line Compilers for MS-DOS The most inexpensive route for compiling C++ programs on a Windows PC is to... Linking Linux systems most commonly use g++, the GNU C++ compiler from the Free Software Foundation The compiler is included in most Linux distributions, but may not always be installed The g++ compiler works much like the standard UNIX compiler: g++ spiffy.cxx This produces an executable file call a.out Some versions might require that you link in the C++ library: g++ spiffy.cxx -lg++ To compile multiple . these steps. Creating the Source Code Some C++ implementations, such as Microsoft Visual C++, Borland C++ (various versions), Watcom C++, Symantec C++, and Metrowerks CodeWarrior, provide integrated. integer type, that some C++ compilers support. Although not part of the current C++ standard, these features may become part of the next C++ standard. Before the ANSI/ISO C++ committee began its. types. C++ templates provide a mechanism for doing that. C++ Like C, C++ began its life at Bell Labs, where Bjarne Stroustrup developed the language in the early 1980s. In his own words, "C++

Ngày đăng: 07/07/2014, 06:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan