ࡱ> dfcyY ZbjbjWW ===hV]$$$$\`$6ih h " ] :*\20hhhhhhh$jl!i#7Y ] #7#7!i@ gh @@@#7&  h$$#7h@@Fn`kh  d`Gd-$$I<Oh Introduction to C++ Trenton Computer Festival April 16th & 17th, 2005 Michael P. Redlich Senior Research Technician ExxonMobil Research & Engineering michael.p.redlich@exxonmobil.com Table of Contents  TOC \o "1-3" Table of Contents  PAGEREF _Toc510190949 \h 2 Introduction  PAGEREF _Toc510190950 \h 3 Evolution of C++  PAGEREF _Toc510190951 \h 3 Some Features of C++  PAGEREF _Toc510190952 \h 3 Pass-By-Reference  PAGEREF _Toc510190953 \h 3 Operator Overloading  PAGEREF _Toc510190954 \h 4 Generic Programming  PAGEREF _Toc510190955 \h 4 Exception Handling  PAGEREF _Toc510190956 \h 4 Namespaces  PAGEREF _Toc510190957 \h 4 Default Arguments  PAGEREF _Toc510190958 \h 4 Object-Oriented Programming  PAGEREF _Toc510190959 \h 5 Programming Paradigms  PAGEREF _Toc510190960 \h 5 Some Object-Oriented Programming (OOP) Definitions  PAGEREF _Toc510190961 \h 5 Main Attributes of OOP  PAGEREF _Toc510190962 \h 6 Data Encapsulation  PAGEREF _Toc510190963 \h 6 Data Abstraction  PAGEREF _Toc510190964 \h 6 Inheritance  PAGEREF _Toc510190965 \h 6 Polymorphism  PAGEREF _Toc510190966 \h 6 Advantages of OOP  PAGEREF _Toc510190967 \h 6 Some C++ Keywords  PAGEREF _Toc510190968 \h 7 Basic I/O Differences Between C and C++  PAGEREF _Toc510190969 \h 7 Sending Formatted Output to the Standard Output (stdout) Device  PAGEREF _Toc510190970 \h 7 Obtaining Formatted Input from the Standard Input (stdin) Device  PAGEREF _Toc510190971 \h 7 C++ Classes  PAGEREF _Toc510190972 \h 8 Default Constructors  PAGEREF _Toc510190973 \h 9 Primary Constructors  PAGEREF _Toc510190974 \h 9 Copy Constructors  PAGEREF _Toc510190975 \h 10 Class Instantiation  PAGEREF _Toc510190976 \h 10 Dynamic Instantiation  PAGEREF _Toc510190977 \h 10 Static Instantiation  PAGEREF _Toc510190978 \h 10 Popular Compilers  PAGEREF _Toc510190979 \h 11 References for Further Reading  PAGEREF _Toc510190980 \h 11  1Introduction This document is an introduction to the C++ programming language. C++ is an extension of the C programming language, which means that all of the C library functions can be used in a C++ application. C++ was finally standardized in June 1998, but its history can be traced back almost 20 years. This document will begin with how C++ has evolved over the years and introduce some of the language's features. Since C++ is an object-oriented programming language, it is important to understand the concepts of object-oriented programming. The remainder of this document will discuss object-oriented programming, C++ classes and how they are implemented, introduce some new keywords, and mention some basic I/O differences between C and C++. An example C++ application was developed to demonstrate the content described in this document and the C++ Advanced Features document. The application encapsulates sports data such as team name, wins, losses, etc. The source code can be obtained from http://tcf.redlich.net/. 2Evolution of C++ C++ was originally known as C with Classes. Bjarne Stroustrup from AT&T Laboratories developed the language in 1980. Bjarne needed to add speed to simulations that were written in Simula-67. Since C was the fastest procedural language, he decided to add classes, function argument type checking and conversion, and other features to it. Around the 1983/1984 time frame, virtual functions and operator overloading were added to the language, and it was decided that C with Classes be renamed to C++. The language became available to the public in 1985 after a few refinements were made. Templates and exception handling were added to C++ in 1989. The Standard Template Library (STL) was developed by Hewlett-Packard in 1994, and was ultimately added to the draft C++ standard. The final draft was accepted by the X3J16 subcommittee in November 1997, and received final approval from the International Standards Organization (ISO) in June 1998 to officially declare C++ a standard. 3Some Features of C++ C++ is an object-oriented programming (OOP) language. It offers all of the advantages of OOP by allowing the developer to create user-defined types for modeling real world situations. However, the real power within C++ is contained in its features. Since the scope of this document is strictly introductory, this chapter only briefly describes some of the features built-in to the language. A detailed overview of these features can be found in the C++ Intermediate and Advanced Features document. Pass-By-Reference Arguments passed to functions are strictly pass-by-value in C. That is, only a copy of the argument is passed to a function. If the argument's value is changed within the function that received it, the change is not saved when the application returns to the point of the function call. Large data structures passed as arguments will be copied as well. A pointer to a data structure is allowed in a function parameter list, but the argument name must be preceded with the address operator (&) when it is passed to the function. Inadvertently omitting the address operator in this case usually resulted with a run-time error and core dump. With pass-by-reference parameter passing, only the address of the variable is passed. Any changes to the argument's value will be saved when the application returns to the point of the function call. Pass-by-reference parameter passing is nothing new to some programming languages such as Pascal. This feature was added to C++ so that references to data types (user-defined or built-in) could be specified in function parameter lists. This allows passing a complex data structure as an argument to a function without having to precede it with the address operator. Operator Overloading Operator overloading allows the developer to define basic operations (such as  EMBED Equation.3 ) for objects of user-defined data types as if they were built-in data types. For example, a conditional expression such as: if(s1 == s2) { ... } is much easier to read than if(strcmp(s1.getStr(),s2.getStr()) == 0) { ... } Operator overloading is often referred to as "syntactic sugar." Generic Programming One benefit of generic programming is that it eliminates code redundancy. Consider the following function: void swap(int &first,int &second) { int temp = second; second = first; first = temp; } This function is sufficient for swapping elements of type int. If it is necessary to swap two floating-point values, then the same function must be rewritten using type float for every instance of type int. The basic algorithm is the same. The only difference is the data type of the elements being swapped. Additional functions must be written in the same manner to swap elements of any other data type. This is, of course, very inefficient. The template mechanism was designed for generic programming. Exception Handling The exception handling mechanism is a more robust method for handling errors than fastidiously checking for error codes. It is a convenient means for returning from deeply nested function calls when an exception is encountered. One of the main features of exception handling is that destructors are invoked for all live objects as the stack of function calls unwinds until an appropriate exception handler is found. Namespaces A namespace is a mechanism that avoids global variable name conflicts that may arise due to using various libraries from different sources. All library functions in the C++ standard are defined in a namespace called std. Default Arguments Default arguments can be specified within parameter lists of class constructors and templates. For example, consider the following class constructor code fragment: Sports::Sports(string str,int win,int loss,int tie = 0) { ... } Only the first three parameters of the class constructor require arguments because parameter tie has a default value of 0. An object created this way might look like: Sports sp("Mets",94,68); If a different value for tie is required, the fourth argument must be supplied to override the default value. For example: Sports sp("Jets",8,8,0); will assign the value 0 to tie. Most compilers support default arguments for class constructors however default arguments for templates is very new to the standard, and are not supported by all compilers. 4Object-Oriented Programming Please note this chapter is the same as the corresponding Object-Oriented Programming chapter of the Introduction to Java document. Programming Paradigms There are two programming paradigms: Procedure-Oriented Object-Oriented Examples of procedure-oriented languages include: C Pascal FORTRAN Examples of object-oriented languages include: C++ SmallTalk Eiffel. A side-by-side comparison of the two programming paradigms clearly shows how object-oriented programming is vastly different from the more conventional means of programming: Procedure-Oriented ProgrammingObject-Oriented ProgrammingTop Down/Bottom Up DesignIdentify objects to be modeledStructured programmingConcentrate on what an object doesCentered around an algorithmHide how an object performs its tasksIdentify tasks; how something is doneIdentify an objects behavior and attributesSome Object-Oriented Programming (OOP) Definitions An abstract data type (ADT) is a user-defined data type where objects of that data type are used through provided functions without knowing the internal representation. For example, an ADT is analogous to, say an automobile transmission. The cars driver knows how to operate the transmission, but does not know how the transmission works internally. The interface is a set of functions within the ADT that allow access to data. The implementation of an ADT is the underlying data structure(s) used to store data. It is important to understand the distinction between a class and an object. The two terms are often used interchangeably, however there are noteworthy differences. Classes will be formally introduced later in this document, but is mentioned here due to the frequent use of the nomenclature in describing OOP. The differences are summarized below: ClassObjectDefines a modelAn instance of a classDeclares attributesHas stateDeclares behaviorHas behaviorAn ADTThere can be many unique objects of the same classMain Attributes of OOP There are four main attributes to object-oriented programming: Data Encapsulation Data Abstraction Inheritance Polymorphism Data Encapsulation Data encapsulation separates the implementation from the interface. User access to data is only allowed through a defined interface. Data encapsulation combines information and an object's behavior. Data Abstraction Data abstraction defines a data type by its functionality as opposed to its implementation. For example, the protocol to use a double-linked list is made public through the supplied interface. Knowledge of the implementation is unnecessary and therefore hidden. Inheritance Inheritance is a means for defining a new class as an extension of a previously defined class. A derived class inherits all attributes and behavior of a base class, i.e., it provides access to all data members and member functions of the base class, and allows additional members and member functions to be added if necessary. The base class and derived class have an is a relationship. For example, Baseball (a derived class) is a Sport (a base class) Pontiac (a derived class) is a Car (a base class) Polymorphism Polymorphism is the ability of different objects to respond differently to virtually the same function. For example, a base class provides a function to print the current contents of an object. Through inheritance, a derived class can use the same function without explicitly defining its own. However, if the derived class must print the contents of an object differently than the base class, it can override the base classs function definition with its own definition. In order to invoke polymorphism, the functions return type and parameter list must be identical. Otherwise, the compiler ignores polymorphism. Polymorphism is derived from the Greek meaning many forms. It is a mechanism provided by an object-oriented programming language, rather than a programmer-provided workaround. Advantages of OOP The implementation of an ADT can be refined and improved without having to change the interface, i.e., existing code within an application doesnt have to be modified to accommodate changes in the implementation. Encourages modularity in application development. Better maintainability of code yielding less code spaghetti. Existing code can be reused in other applications. 5Some C++ Keywords The keywords defined below are just a subset of the complete C++ keyword list. class used for declaring/defining a class. new allocate storage on the free store (heap). delete deallocate the storage on the free store. new and delete are more robust than the C library functions malloc and free. inline used for inline member functions. private/protected/public access specifiers used for data hiding which is a means of protecting data. private not visible outside of the class. protected like private except visible only to derived classes through inheritance. public visible to all applications. try/throw/catch used in exception handling. friend declares a class will full access rights to private and protected members of an outside class without being a member of that class. explicit prevents implicit conversion of a data type to a particular class that may lead to unexpected surprises: array::array(size_t n); creates an array with n elements. float max(array const &a); a function that uses the array data type. max(m); where m is an integer inadvertently passed to the function. A new array of m elements will be implicitly created automatically, which is not what was intended. virtual a declaration specifier that invokes polymorphism on a function. bool/false/true used for Boolean logic. bool new data type that can only accept the values true and false. false numerically zero. true numerically one. 6Basic I/O Differences Between C and C++Sending Formatted Output to the Standard Output (stdout) Device In C, the library function printf() is available to display formatted output to stdout: printf("%s%2d\n","The answer is: ",var); Since C++ is an extension of C, the printf() function can still be used in a C++ application. However, the overloaded left shift operator (<<) directed toward the C++ library function cout provides an easier means of sending formatted output: cout << "The answer is: " << var << "\n"; Obtaining Formatted Input from the Standard Input (stdin) Device In C, the library function scanf() is available to obtain formatted input from stdin: scanf("%2d",&var); Again, the scanf() function can be used in a C++ application, but the overloaded right shift operator (>>) directed away from the C++ library function cin provides an easier means of obtaining formatted input: cin >> var; 7C++ Classes As mentioned earlier, a C++ class is a user-defined ADT. It encapsulates a data type and any operations on it. A class is also an extension of a C structure, which is a collection of one or more variables defined under a single name. The biggest difference between the two is the default access to data members and member functions. By default, data members and member functions in a class are private, where they are public in a structure. An abstract class is one that contains at least one pure virtual member function. A basic C++ class as well as a structure usually contains the following elements: Constructor(s) creates an object. Destructor destroys an object. Data members object attributes. Member functions (methods) operations on the attributes. Each one of these is demonstrated in a simple example: class Sports { private: // private data members: char *team; int win; int loss; public: // constructor and destructor declarations: Sports(char *,int,int); // primary constructor ~Sports(void); // destructor // public member functions: char *getTeam(void) const // constant member function { return team; } int getWin(void) const // constant member function { return win; } void setWin(int w) { win = w; } int getLoss(void) const // constant member function { return loss; } void setLoss(int l) { loss = l; } }; // constructor and destructor definitions: Sports::Sports(char *str,int w,int l) { team = new char[strlen(str) + 1]; // allocate storage for type char * strcpy(team,str); setWin(w); setLoss(l); } Sports::~Sports(void) { delete[] team; // deallocate storage; note use of [] } C++ comments begin with a double slash (//). Anything after a double slash until the end of the current line is considered a comment by the compiler. C comments (/* ... */) can still be used in a C++ application as well. Note that constructors and destructors have the same name as the class and have no return type. The destructor is declared/defined with a tilde (~) in front of its name. Also note the use of the scope resolution operator (::) for the constructor and destructor definitions. They were defined outside of the class, and therefore required their fully-qualified member names so the compiler knows that these definitions belong to the Sports class. More than one constructor can be written for a particular class. The different constructor types are: Default constructors Primary constructors Copy constructors Default Constructors A default constructor creates objects with specified default values. A default constructor added to Sports might look like: Sports(void); // declaration Sports::Sports(void) // definition { team = new char[8]; strcpy(team,"No team"); setWin(0); setLoss(0); } The compiler will automatically generate a default constructor if one is not explicitly defined. Primary Constructors A primary constructor creates objects with the argument values passed in the constructor parameter list. More than one primary constructor may be defined for a class. The primary constructor in Sports is declared as: Sports(char *,int,int); // primary constructor If the application requires, say, a floating-point value in the parameter list in place of one of the integer values, then a second constructor can be declared as: Sports(float,char *,int); // another primary constructor Note that the order of the parameter list has changed from the first primary constructor. This is to avoid ambiguity between the two constructor declarations and definitions. The compiler will generate an error message about ambiguity between constructor parameter lists if the order of the parameters is similar. Copy Constructors A copy constructor creates a copy of an object using the current object as a parameter. A copy constructor added to Sports might look like: Sports(Sports const &); // declaration Sports::Sports(Sports const &sp) // definition { team = new char[strlen(sp.getTeam()) + 1]; strcpy(team,sp.getTeam()); setWin(sp.getWin()); setLoss(sp.getLoss()); } 8Class Instantiation Classes can be instantiated both statically and dynamically. For example, consider a Baseball class that is derived from Sports. It has the following constructor declaration: Baseball(string,int,int); Dynamic Instantiation An object of type Baseball is dynamically instantiated using operator new as shown in the following statement: Baseball *bball = new Baseball("Mets",94,68); This statement declares bball as a pointer to an object of type Baseball containing the values "Mets", 94, and 68. Once the object is created, any public member functions are called using the name of the pointer to the object and the pointer indirection operator (->). For example, bball->getWin(); calls the function getWin(). Since the object is a pointer, it must be deleted to free memory. This is accomplished using operator delete as shown in the following statement: delete bball; The destructor is invoked at this point. Static Instantiation An object of type Baseball is statically instantiated using the following statement: Baseball bball("Mets",94,68); This statement declares bball as an object of type Baseball containing the values "Mets", 94, and 68. Once the object is created, any public member functions are called using the name of the object and the structure dot operator (.). For example, bball.getWin(); calls the function getWin(). The object remains alive until the scope in which it was created is closed. The destructor is invoked and the object is deleted. 9Popular Compilers Some of the more commonly used compilers are listed below: Borland C++ 5.02 Borland C++ Builder 4.0 http://www.borland.com/ Microsoft Visual C++ +6.0 http://www.microsoft.com/ Watcom C++ 11.0 Metrowerks C++ (Mac) http://www.metrowerks.com/ g++ (UNIX) http://www.gnu.com/ 10References for Further Reading The references listed below are only a small sampling of resources where further information on C++ can be obtained: C & C++ Code Capsules (book) Chuck Allison ISBN 0-13-591785-9 http://www.freshsources.com/ C/C++ Users Journal (monthly periodical) http://www.cuj.com/ The Annotated C++ Reference Manual (book) Margaret Ellis and Bjarne Stroustrup ISBN 0-201-51459-1 1997 C++ Public Review Document (latest available on-line C++ standard documentation) http://www.maths.warwick.ac.uk/cpp/pub/wp/html/cd2/ PAGE  PAGE 11 &HJOQX\"#$%&45OPQRSefjUmHjwUmHjUmHj}UmHjUmH jUmHmH jUCJ5CJOJQJX5B* CJ(H*OJQJX5B* CJ(OJQJX5B* CJ8OJQJX CJ8OJQJ5 !"#$%&@XYZ$@&$$d!%d$&d!'d$@&$$d!%d$&d!'d$ !"#$%&@XYZ[\o'T!U!WEq J 7 l @ v   OZ[\o'T!U! V'  V'  !$$ld$$$$@& 56PQRSThi 78RSTUVjYUmHjUmHj_UmHjUmHjeUmHjUmHjkUmHjUmHjqUmHmH jUmH=!WEq J 7 l @ v $$ V'  V' %&@ABCDQRlmnop~  * + E F G H I { jA UmH5OJQJmHj UmHjG UmHjUmHjMUmHjUmHjSUmHjUmHmH jUmH>      2 3 4 5 6 L M g h i j k       : ; < > ? U V p q r t u j)UmHj UmHj/ UmHj UmHj5 UmHj UmHj; UmHj UmH jUmHmH5OJQJmH< La BOgk:;NOPQľĵjB*EHUhnH j\: UVmHjB*UhnH 5B*OJQJhnH  5B*hnH 56B*hnH  B*hnH CJ 5OJQJ565CJOJQJCJ jUj#UmHmH jUmHjUmH3  $$ !$$ld 8>FLM 06Masyzx/!:!"*"",@W]01jk    68>FLM 06MasyzQL6Myz$)EH?Gx/!:!7>j>o>x>>>>>>>>> 5OJQJ5CJOJQJCJCJ5CJOJQJ 5B*hnH 5B*OJQJhnH  B*hnH P;;;<'<(<)<*<,<T<U<<<<== > >7>x>>>>>?????????AA8B\B}BBĬ|yskc      QRbcd  p  rtuTUiHI=>gh     I  I   )I S  &,<T<U<<<<== > >7>x>>>>>?????????A$ !$$ld$>J?L?z?}??????@E@cAjA{AAAAACC*C2CCCCC DDvD{DDDEENFQF|FF.GCGNGVGGGG0H9HHHHHLINIIIJ$J-JJJJJJJKPKcKKKLeLzL|LL>MDMVMM-NfNOOOCJ5OJQJfH56 5B*hnH 5 B*hnH CJ5CJOJQJ 5OJQJRAA8B\B}BBBBCC C&C3CTChCyCCCCCD5D6DZDDDDDE & FBBBCC C&C3CTChCyCCCCCD5D6DZDDDDDEE.ELes !/jx2k$%\]  ,EE.E?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\]^_`abiehjlkmpnoqrstuvwx{|}~Root Entry  F@0Q-@Gd-gData [WordDocument =ObjectPool8Gd-@Gd-_982576988F8Gd-ٻGd-Ole CompObjfObjInfo !"#$%&'()*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abdefghk FMicrosoft Equation 3.0 DS Equation Equation.39q(kIvI +,",,/ Oh+'0 $Equation Native D1TablezhmSummaryInformation( DocumentSummaryInformation8 A? 2^bf[)^J1?':`!2bf[)^J1?'(+ xcdd`` @bD"L1JE `xYjl R A@1 Nq 7$# !L av@Hfnj_jBP~nbKt@ڈ+ 3H>^L|!F_F+ss a T ? 7l8l.ok3pA v 0y{Ĥ\Y\ːNFf:.:v @ L X dpxIntroduction to C++ntrMichael P. Redlichich Normal.dotRMichael P. Redlich79hMicrosoft Word 8.0@xQJ@ Hc@)zn@8z1d- ?G ՜.+,D՜.+,\ hp  Exxon Research & Engineering$~Wj Introduction to C++ Title 6> _PID_GUIDAN{8353AEE6-8DF1-11D2-9A44-00C04F98282D}0* pHdProjectQ(@= l 6 J< rstdole>stdoleP f%\*\G{00020430-C 0046}#2.0#0#C:\WINDOWS\SYSTEM\STDOLE2.TMacrosGd-`Gd-VBAGd-`Gd-dirThisDocument LB# Automation ^mMSFo@rms> MSFErm@s/z p F76A702-2350-11D2-B44B-F41D05C1HF3.TWD#Microsoft = ` Ob Library9P06rP3,PJP\VBE\(EX(.E .`M KCxN@UalCxNETax + ,C aAOfficDO@`ficB=G{2DF8D04C-5BFA-101B-BDE5@AA@42fPROGRAM FILES\MICROSOFT OFFICE\MSO97.DLLHk# 8.0k'BThisDocument"N2@1T"h@6sDIcuen@HB1@B,B!"B+BBx'! (S"SS"<(1Normal.ThisDocument8($HMExAttribute VB_Name = "ThisDocument" Bas1Normal.VCreatabl`False PredeclaIdxTru "ExposeTemplate Deriv$Customizca^  *\G{000204EF-0_VBA_PROJECT/ PROJECT cmPROJECTwmi)CompObj jj000-0000-C000-000000000046}#3.0#9#C:\PROGRAM FILES\COMMON FILES\MICROSOFT SHARED\VBA\VBA332.DLL#Visual Basic For Applications*\G{00020905-0000-0000-C000-000000000046}#8.0#409#C:\Program Files\Microsoft Office\Office\MSWORD8.OLB#Microsoft Word 8.0 Object Library*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINDOWS\SYSTEM\STDOLE2.TLB#OLE Automation*\G{7046A702-2350-11D2-B44B-F41D05C10000}#2.0#0#C:\WINDOWS\SYSTEM\MSForms.TWD#Microsoft Forms 2.0 Object Library*\G{7046A703-2350-11D2-B44B-F41D05C10000}#2.0#0#C:\WINDOWS\TEMP\VBE\MSForms.EXD#Microsoft Forms 2.0 Object Library.E .`M *\CNormal*\CNormala6 *\G{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}#2.0#0#C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\MSO97.DLL#Microsoft Office 8.0 Object Library6'ThisDocument 33694c41b*D!8oDO(-DO(-H&')WordkVBAWin16~Win32Mac&C++ Intermediate and Advanced Featuresstdole`MSFormsC ThisDocument< _EvaluateNormalOfficeuProject-Module1b NewMacrosjCourierNewAndBold SelectionZTypeTextDocumentjMacro1NChangeFileOpenDirectory= InsertFileXFileNamejRange ConfirmConversionsLinkh Attachment^6Macro2N ActiveWindow+ ActivePane_ SmallScrolltmDown;MoveDown̝UnitwdLineCount0vMacro3N TypeParagraph InsertSourceCodes` ID="{0F9B6F92-A613-11D2-9A44-00C04F98282D}" Document=ThisDocument/&H00000000 Name="Project" HelpContextID="0" CMG="8C8E3BC94B514F514F514F514F" DPB="26249141B1414A424A424A" GC="C0C2777878787887" [Host Extender Info] &H00000001={3832D640-CF90-11CF-8E43-00A0C911005A};VBE;&H00000000 [Workspace] ThisDocument=0, 0, 0, 0, C NewMacros=22, 22, 813, 511, Z ThisDocumentThisDocument  FMicrosoft Word Document MSWordDocWord.Document.89q* [$@$NormalmH H@H Heading 1$<@&5CJKHOJQJFF Heading 2$<@&56CJOJQJ@@@ Heading 3$<@& CJOJQJ<< Heading 4$@&5CJOJQJ<A@<Default Paragraph Font8Y8 Document Map-D OJQJ,@,TOC 1 xx5;&&TOC 2:&@&TOC 36&&TOC 4XCJ&&TOC 5 CJ&&TOC 6CJ&&TOC 7CJ&&TOC 8xCJ&&TOC 9@CJ, @,Footer  !&)@& Page Number0Z0 Plain TextOJQJ. .Index 1 8CJ. .Index 2 8CJ. .Index 3 X8CJ. .Index 4  8CJ..Index 5 8CJ..Index 6 !8CJ..Index 7 "x8CJ..Index 8 #@8CJ..Index 9 $8CJb!b Index Heading%%$x$d %d &d 'd 5CJOJQJ(U@a( Hyperlink>*B*.".Caption 'xx54B4 Body Text(B*CJhnH .P@. Body Text 2)CJ I!)8,MSETV%MuŴ  QH+D8>OyYZ/3567;AGJRYZ! zL%'x,/+7,<AEDGL/QkUW@BDFIKMOPSUVX"&y,4;BFfNiUhXZ19=?CEHLNQTW#%4PRe5QSh7SU%ACQmo~*FH 35Lhj;>Uqt:NPV %t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t: !!?b$֋{v#Wg2$k ?Y9Mbdjal@0(  B S  ?V  _Toc440301999 _Toc443272430 _Toc445547843 _Toc445877302 _Toc446001303 _Toc446007711 _Toc446007799 _Toc446136730 _Toc446411875 _Toc447795944 _Toc447901642 _Toc510190949 _Toc437683654 _Toc437683738 _Toc437683655 _Toc437683739 _Toc437684510 _Toc440080858 _Toc440302000 _Toc443272431 _Toc445547844 _Toc445877303 _Toc446001304 _Toc446007712 _Toc446007800 _Toc446136731 _Toc446411876 _Toc447795945 _Toc510190950 _Toc445547845 _Toc445877312 _Toc446001313 _Toc446007721 _Toc446007809 _Toc446136740 _Toc446411877 _Toc447795946 _Toc510190951 _Toc445877304 _Toc446001305 _Toc446007713 _Toc446007801 _Toc446136732 _Toc446411878 _Toc447795947 _Toc510190952 _Toc445877306 _Toc446001307 _Toc446007715 _Toc446007803 _Toc446136734 _Toc446411880 _Toc447795948 _Toc510190953 _Toc445877307 _Toc446001308 _Toc446007716 _Toc446007804 _Toc446136735 _Toc446411881 _Toc447795949 _Toc510190954 _Toc445877308 _Toc446001309 _Toc446007717 _Toc446007805 _Toc446136736 _Toc446411882 _Toc447795950 _Toc510190955 _Toc445877309 _Toc446001310 _Toc446007718 _Toc446007806 _Toc446136737 _Toc446411883 _Toc447795951 _Toc510190956 _Toc445877310 _Toc446001311 _Toc446007719 _Toc446007807 _Toc446136738 _Toc446411884 _Toc447795952 _Toc510190957 _Toc445877311 _Toc446001312 _Toc446007720 _Toc446007808 _Toc446136739 _Toc446411885 _Toc447795953 _Toc510190958 _Toc445547846 _Toc445877313 _Toc446001314 _Toc446007722 _Toc446007810 _Toc446136741 _Toc446411886 _Toc447795954 _Toc510190959 _Toc445877314 _Toc446001315 _Toc446007723 _Toc446007811 _Toc446136742 _Toc446411887 _Toc447795955 _Toc510190960 _Toc445877315 _Toc446001316 _Toc446007724 _Toc446007812 _Toc446136743 _Toc446411888 _Toc447795956 _Toc510190961 _Toc446136744 _Toc446411889 _Toc447795957 _Toc510190962 _Toc445547847 _Toc445877316 _Toc446001317 _Toc446007725 _Toc446007813 _Toc446136745 _Toc446411890 _Toc447795958 _Toc510190963 _Toc445547848 _Toc445877317 _Toc446001318 _Toc446007726 _Toc446007814 _Toc446136746 _Toc446411891 _Toc447795959 _Toc510190964 _Toc445547849 _Toc445877318 _Toc446001319 _Toc446007727 _Toc446007815 _Toc446136747 _Toc446411892 _Toc447795960 _Toc510190965 _Toc445547850 _Toc445877319 _Toc446001320 _Toc446007728 _Toc446007816 _Toc446136748 _Toc446411893 _Toc447795961 _Toc510190966 _Toc445547851 _Toc445877320 _Toc446001321 _Toc446007729 _Toc446007817 _Toc446136749 _Toc446411894 _Toc447795962 _Toc510190967 _Toc445547852 _Toc445877321 _Toc446001322 _Toc446007730 _Toc446007818 _Toc446136750 _Toc446411895 _Toc447795963 _Toc510190968 _Toc445877322 _Toc446001323 _Toc446007731 _Toc446007819 _Toc446136751 _Toc446411896 _Toc447795964 _Toc510190969 _Toc445877323 _Toc446001324 _Toc446007732 _Toc446007820 _Toc446136752 _Toc446411897 _Toc447795965 _Toc510190970 _Toc445877324 _Toc446001325 _Toc446007733 _Toc446007821 _Toc446136753 _Toc446411898 _Toc447795966 _Toc510190971 _Toc445547853 _Toc445877325 _Toc446001326 _Toc446007734 _Toc446007822 _Toc446136754 _Toc446411899 _Toc447795967 _Toc510190972 _Toc446001328 _Toc446007735 _Toc446007823 _Toc446136755 _Toc446411900 _Toc447795968 _Toc510190973 _Toc446001329 _Toc446007736 _Toc446007824 _Toc446136756 _Toc446411901 _Toc447795969 _Toc510190974 _Toc446001330 _Toc446007737 _Toc446007825 _Toc446136757 _Toc446411902 _Toc447795970 _Toc510190975 _Toc445547854 _Toc445877327 _Toc446001331 _Toc446007738 _Toc446007826 _Toc446136758 _Toc446411903 _Toc447795971 _Toc510190976 _Toc445877328 _Toc446001332 _Toc446007739 _Toc446007827 _Toc446136759 _Toc446411904 _Toc447795972 _Toc510190977 _Toc445877329 _Toc446001333 _Toc446007740 _Toc446007828 _Toc446136760 _Toc446411905 _Toc447795973 _Toc510190978 _Toc447795974 _Toc510190979 _Toc445547855 _Toc445877330 _Toc446001334 _Toc446007741 _Toc446007829 _Toc446136761 _Toc446411906 _Toc447795975 _Toc510190980 xxxxxxxx////////L!L!L!L!L!L!L!L!L!i!i!i!i!i!i!i!!$$$$$$$$)))))))))))))*********+++++++++---------000000000i2i2i2i2i2i2i2i2i2,8,8,8,8,8,8,8,8U8U8U8U8U8U8U8U87:7:7:7:7:7:7:7:;;;;;;;;;FFFFFFFeHeHeHeHeHeHeHKKKKKKK/M/M/M/M/M/M/M/M/MNNNNNNNNPPPPPPPPSSITITITITITITITITITV  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                  99999999))))))))g!g!g!g!g!g!g!g!g!!"""""""%%%%%%%%1)1)1)1))))))))))*********+++++++++---------000000000z2z2z2z2z2z2z2z2z2S8S8S8S8S8S8S8S888888888w:w:w:w:w:w:w:w:;;;;;;;;;FFFFFFFyHyHyHyHyHyHyHKKKKKKK6MBMBMBMBMBMBMBMBM&N&N&N&N&N&N&N&NPPPPPPPP,S,SgTgTgTgTgTgTgTgTgTVB H I S &:=f h ""43>3333466 6&6]6b6S7\777778888888899<9B999 ::*:-:j:o:::::::::z;};;;;;\>f>p?s??????? @@*@4@h@o@v@{@@@@@@@IAOAPASAAAAAAAB BBBdBnB|BBBBBBBBBBBBBC CCC"C.C=C`CjCDDDDhErEGGGGGGGGGGdIkI4J>JAJDJSLXLmL{LLLLLLLLLLLLLLLLM MMMMNN&O*OOOPPPPQQeRqRRRRRSSUUUUhVVV BO:=QWejf i y } P1Q12222+313^3a33333=4D4i4r444445566M6R666;7B7777777888888<9C9 ::::::::;;??*?1?>?E?\?`?p?s????????? @@A@G@b@f@@@@@"A(ADAHAqAtAAAAABB/B3BTB_BBBBBBB CCC"C4C6CNCTCLENEEEcGjGGGGGGGGGGGVI]I-J4JELLLsLuLLLLLLL MMMNNNOOOOPPSQYQeRqRvR{RhVVVmpredliAH:\My Documents\tcf\2002 Proceedings Book\Introduction to C++.docmpredli4C:\TEMP\AutoRecovery save of Introduction to C++.asdmpredli+C:\Data\Docs\Word97\Introduction to C++.docmpredli+C:\Data\Docs\Word97\Introduction to C++.docMichael P. RedlichAC:\My Documents\tcf\2003 Proceedings Book\Introduction to C++.docMichael P. RedlichAC:\My Documents\tcf\2003 Proceedings Book\Introduction to C++.docMichael P. RedlichAC:\My Documents\tcf\2004 Proceedings Book\Introduction to C++.docMichael P. RedlichAC:\My Documents\tcf\2005 Proceedings Book\Introduction to C++.docMichael P. RedlichAC:\My Documents\tcf\2005 Proceedings Book\Introduction to C++.docMichael P. RedlichAC:\My Documents\tcf\2005 Proceedings Book\Introduction to C++.docM|F} _t~58nw 3ӈD3aT d } b I   ; 8 E_ UM   7 l} B '  $ ( j( X2+ =]- . s,1 ~3 7 _9 T; N?= [> ?9? /PB d3B B 1B h%E =H = nJ *@J 3DJ )O mOQ T]S E.pS ;T 5W 1Z ^ ^ Y/a eFa Ea db :d BYi E?i X i Ok [3>m Qm  [m  ?o xBgu [u uz q{ || 2R ..88.. OJQJo( OJQJo( 88OJQJo( OJQJo(hh. hhOJQJo(* hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo(hhCJOJQJo(q hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo(hhCJOJQJo(q hhOJQJo( hhOJQJo( hhOJQJo(hhCJOJQJo(q hhOJQJo(hhCJOJQJo(qhhCJOJQJo(q hhOJQJo( hhOJQJo( hhOJQJo(hhCJOJQJo(qhhCJOJQJo(q hhOJQJo( hhOJQJo( hhOJQJo(hhCJOJQJo(q hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo(hhCJOJQJo(q hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo(hhCJOJQJo(q hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo(hhCJOJQJo(q hhOJQJo(hhCJOJQJo(q hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo( hhOJQJo(hhCJOJQJo(q hhOJQJo( hhOJQJo(QE.pS;aT_9U4V;TVI Qm82RY/aBYiE_V1Z[> ?o^0Wd' *@J^[u||1BeFa)O.xBguBd3B7Ea[3>m [mb~3h%E/PB?9?mOQT]SB7X2+=]-= nJX i5WdbT;l}q{N?=~}|uzj(E?i}3DJUMOk=Hs,1:d$ (U @CJOJQJo(" @V @CJ@OJQJo(" V`@CJOJQJo(" V @CJ8OJQJo("