ࡱ> 5@ Ibjbj22 XX_ATGGG8G$GvlHH:IIIRRRvvvvvvv$wRBz)vSQRSS)vIIy>vqhqhqhSH @IIvqhSvqh*qhiktuIH *`G]$ u"uTv0vu"zgXzDuzu$R"RqhRRRRR)v)vAGUhGIntroduction to Object-oriented Programming Review of structured programming concepts: Modularity Cohesion Top down design Example: What does this piece of code (pseudocode) do? (spaghetti code) 10 print headings 20 goto 50 30 print j 40 goto 200 50 j = 1 60 goto 30 80 j = j + 1 100 if j > 1 then goto 30 200 if j = 100 then stop 210 goto 80 same as: print headings do j=1 to 100 print j Go-to less programming: Why? High-level constructs are clear, concise, efficient, elegant Exceptions break, continue, use judiciously any program can be written without the goto statement. (goto can be either an unconditional branch or a conditional branch) Even without the built-in high-level syntax, we can write structured code: print headings j = 1 10 print j j = j + 1 if j <= 100 then goto 10 Until now, structured programming referred to control structures governing OPERATIONS. Now we will see how to structure DATA, and then OBJECTS. Objects and Classes (A class is a derived complex data type containing members -- data items and functions that operate on these data -- that may be of different types. A class specifies the traits (data) and behavior that an object can exhibit. Attributes ( member data Methods ( member functions An attribute is the data defined in a class that maintains the current state of an object. The state of an object is determined by the current contents of all the attributes. A class itself does not exist; it is merely a description of an object. A class can be considered a template for the creation of object, e.g., Blueprint of a building ( class Building ( object (An object exists and is definable. An object exhibits behavior, maintains state, and has traits. An object can be manipulated. An object is an instance of a class. (A message is a request, sent to an object, that activates a method (i.e., a member function). (Inheritance, encapsulation, and polymorphism are the basic principles of object-oriented programming. Inheritance is the guiding principle for the relationship between classes. This is an explicit is-a relationship. E.g., Zebra is-a mammal Flower is-a plant Subclass ( superclass The more specialized class inherits attributes and behaviors from the more generalized class. Encapsulation means that a class is cohesive and self-contained. Polymorphism - poly (many) morph (form) - if two (or more) objects have the same interface (what the user of the class sees), but exhibit different behaviors, they are said to be polymorphic. Similar to function / operator overloading. Interface - the visible functionality of a class -- the "what" Implementation - the internal functionality and attributes of a class. A class's implementation is hidden from users of the class. -- the "how" Defining a Base Class A base class is one that is not defined on, nor does it inherit members from, any other class. //fraction.cpp //modified from Hubbard, Ex. 8.1, p. 221 #include using std::cout; //this example uses only the necessary using std::endl; // objects, not the entire std namespace class Fraction { public: void assign (int, int); //member functions double convert(); void invert(); void print(); private: int num, den; //member data }; int main(){ Fraction x; x.assign (22, 7); cout << "x = "; x.print(); cout << " = " << x.convert() << endl; x.invert(); cout << "1/x = "; x.print(); cout << endl; return 0; } void Fraction::assign (int numerator, int denominator) { num = numerator; den = denominator; } double Fraction::convert () { return double (num)/(den); } void Fraction::invert() { int temp = num; num = den; den = temp; } void Fraction::print() { cout << num << '/' << den; }  The access specifiers provide three levels of visibility. This is how we implement information hiding. public - members are accessible by functions outside the class. private - members are accessible only by functions inside the class. Even descendent classes are denied access. protected - only member functions of the class and its descendents have access. These can appear in any order. If not specified, the default is private. If a class is kind of like a user-defined type, then, x is an object declared like any other variable. Its type is Fraction. The prefix Fraction:: is needed for each member function definition given outside of the class definition. Function definitions can also be included within the declarations inside the class. This is how the print function is defined in the next example. It is not the recommended way of defining class member functions, especially for functions consisting of multiple statements. Constructors The assign function in the previous example is an awkward way to initialize objects. A constructor is a member function that is invoked automatically when an object is declared. It has the same name as the class and carries no return type (not even void). The default constructor, e.g., Fraction(), does not take parameters. If the programmer does not supply it, the system will generate one (without default parameter values, of course). //fraction2.cpp //modified from Hubbard, Ex. 8.3, p. 223 #include using namespace std; class Fraction { public: Fraction (int n, int d) {num = n; den = d;} void print(){cout << num << '/' << den;} private: int num, den; }; int main(){ Fraction x(-1,3), y(22,7); cout << "x = "; x.print(); cout << " and y = "; y.print(); cout << endl; return 0; }  Overloading the constructor function: //fraction3.cpp //modified from Hubbard, Ex. 8.4, p. 224 #include using namespace std; class Fraction { public: Fraction() {num = 0; den = 1;} //default parameter values Fraction(int n) {num = n; den = 1;} //only 1 default value Fraction (int n, int d) {num = n; den = d;} void print(){cout << num << '/' << den;} private: int num, den; }; int main(){ Fraction x, y(4), z(22,7); cout << "x = "; x.print(); cout << "\ny = "; y.print(); cout << "\nz = "; z.print(); cout << endl; return 0; }  Which constructor is called? That depends on the parameter list in the declaration of the object. Using constructor initialization lists. The following program will produce same output as the one above: //fraction4.cpp //modified from Hubbard, Ex. 8.5, p. 225 #include using namespace std; class Fraction { public: Fraction() : num (0), den (1) {} Fraction(int n) : num (n), den (1) {} Fraction (int n, int d) : num (n), den (d) {} void print(){cout << num << '/' << den;} private: int num, den; }; int main(){ Fraction x, y(4), z(22,7); cout << "x = "; x.print(); cout << "\ny = "; y.print(); cout << "\nz = "; z.print(); cout << endl; return 0; } Also this: //fraction5.cpp //modified from Hubbard, Ex. 8.6, p. 226 #include using namespace std; class Fraction { public: Fraction (int n=0, int d=1) : num (n), den (d) {} void print(){cout << num << '/' << den;} private: int num, den; }; int main(){ Fraction x, y(4), z(22,7); cout << "x = "; x.print(); cout << "\ny = "; y.print(); cout << "\nz = "; z.print(); cout << endl; return 0; } When actual parameters are not passed, the default values are used. Constant Objects and Constant Member Functions Objects may be declared to be constant, eg. const Fraction PI(22,7); This will limit access to the object's member functions. For ex, the print function could not be called for PI.print(). To enable access of the objects member functions when the objects is declared a constant, we must declare the member functions const as well, e.g., void print() const {cout < using namespace std; class Fraction { public: Fraction (int n=0, int d=1) : num (n), den (d) {} int numerator() const {return num;} int denominator() const {return den;} private: int num, den; }; int main(){ Fraction x(22,7); cout << x.numerator() <<'/' << x.denominator() << endl; return 0; }  Private Member Functions Sometimes we need private "utility" functions, used only by the object itself. No outsider needs access to them. //fraction7.cpp //modified from Hubbard, Ex. 8.8, p. 227 #include using namespace std; class Fraction { public: Fraction (int n=0, int d=1) : num (n), den (d) {reduce();} void print(){cout << num << '/' << den;} private: int num, den; int gcd (int j, int k) {if (k==0) return j; return gcd(k, j%k);} void reduce () {int g = gcd(num, den); num /= g; den /= g;} }; int main(){ Fraction x(100,360); x.print(); return 0; }  Copy Constructor The copy constructor builds an object by copying the state of an existing object into a new object of the same class. There are two default constructors; if necessary they will be automatically provided by the system. These are, e.g., Fraction (); and Fraction (const Fraction&); It's better to include it ourselves. This gives us more control over the program. //fraction8.cpp //modified from Hubbard, Ex. 8.9, p. 228 #include using namespace std; class Fraction { public: Fraction (int n=0, int d=1) : num (n), den (d) {reduce();} Fraction (const Fraction& r) : num(r.num), den(r.den){} void print(){cout << num << '/' << den;} private: int num, den; int gcd (int j, int k) {if (k==0) return j; return gcd(k, j%k);} void reduce () {int g = gcd(num, den); num /= g; den /= g;} }; int main(){ Fraction x(100,360); Fraction y(x); cout << "x= "; x.print(); cout << "\ny= "; y.print(); return 0; }  Destructor Just like a constructor is called automatically when an object is declared/created, so a destructor is called automatically when an object comes to the end of its life. The destructor has the same name as the class, except that the name must begin with a tilde (~). It has no return type, not even void. If not defined explicitly, a default destructor will be created by the system. A class may have multiple constructors, but only one destructor. The destructor is not called explicitly. //fraction9.cpp //modified from Hubbard, Ex. 8.11, p. 230 #include using namespace std; class Fraction { public: Fraction (int n=0, int d=1) : num (n), den (d) {reduce(); cout << "Object born";} ~Fraction() {cout << "\nObject dies";} //destructor void print(){cout << num << '/' << den;} private: int num, den; int gcd (int j, int k) {if (k==0) return j; return gcd(k, j%k);} void reduce () {int g = gcd(num, den); num /= g; den /= g;} }; int main(){ { Fraction x(22,7); cout << "\nx is alive and = "; x.print(); } cout << "\nNow we are between blocks.\n"; { Fraction y; cout << "\ny is alive and = "; y.print(); } return 0; }  Static Data Members Static attributes are used when a single value for a data member applies to all objects of the class. The variable must be declared globally. These variables are automatically initialized to 0. //fraction10.cpp //modified from Hubbard, ex. 8.15, p. 235 #include using namespace std; class Widget { public: Widget() {++count;} ~Widget() {--count;} int numWidgets() {return count;} //access function private: static int count; //private and static }; //accessible to all objects of the class int Widget:: count = 0; int main(){ Widget w, x; cout << "There are " << w.numWidgets() << " widgets.\n"; { Widget w,x,y,z; cout << "There are " << w.numWidgets() << " widgets.\n"; } cout << "There are " << w.numWidgets() << " widgets.\n"; Widget y; cout << "There are " << w.numWidgets() << " widgets.\n"; return 0; }  A function can also be static. Since a static function is not "owned" by any single object of the class, it can be called even before any objects are declared. Improved Program: //fraction11.cpp //modified from Hubbard, ex. 8.16, p. 236 #include using namespace std; class Widget { public: Widget() {++count;} ~Widget() {--count;} static int num() {return count;} private: static int count; }; int Widget::count = 0; int main(){ cout << "There are " << Widget::num() << " widgets.\n"; Widget w, x; cout << "There are " << Widget::num() << " widgets.\n"; { Widget w,x,y,z; cout << "There are " << Widget::num() << " widgets.\n"; } cout << "There are " << Widget::num() << " widgets.\n"; Widget y; cout << "There are " << Widget::num() << " widgets.\n"; return 0; }  Exercise (a) Implement a Student class. Each object of this class will represent a student in a particular course. Data members should include the students ID number, first name, last name, and four exam scores. Include a constructor, access functions, a displayStudentInfo function, an inputStudentInfo function, and a computeAvgScore function. In main(), create an object of this class and use it to enter values for some of its data members from the keyboard and display the values of its data members in the console window. You may ask the user to enter the number of students in the class. Use a loop to enter data, compute the average, and output data for successive students. Use the following test data: 100 Robin Williams 90 85 67 99 200 Duncan McLeod 35 67 88 100 300 Bart Simpson 67 44 89 67 (b) Modify the program in (a), above, to compute and display the value of the overall average score for the class More Examples: (from Hubbard, p. 245) Implement a Computer class with data members for the computer type (e.g., "pc"), the CPU (e.g., "Intel Pentium"), the operating system (e.g., "DOS"), the number of megabytes of memory (e.g., 16), the number of gigabytes of disk space (e.g., 9.8), the type of printer attached, type of CD_ROM drive, type and speed of modem, internet service provider, purchased price, and year of purchase. Include a default constructor, a destructor, access functions, and a print function. (modified from Hubbard, p. 245) Implement a Student class. Each object of this class represents a student. Data members should include a student's name (first name, last name, middle initial), date of birth (month, day, year), student identification number, major program, grade point average, and credits earned. Include a default constructor, a default destructor, access functions, and print function. Also include a member function update (int course, credit, char grade) that processes the given information (course, credit and grade) for one course, using it to update the student's grade point average and credits earned. (modified from Molluzzo, p. 489) Implement a HotelRoom class, with private data members: the room number, room capacity (representing the maximum number of people the room can accommodate), the occupancy status (0 or the number of occupants in the room), the daily room rate. Member functions include: a 4-argument constructor that initializes the four data members of the object being created (room number, room capacity, room rate, occupancy status) to the constructor's arguments. The room rate defaults to 89.00 and the occupancy status defaults to 0. A destructor accessor functions a print function a function changeRate that sets the room rate to the value of its argument a function changeStatus that changes the occupancy status of the room to the value of its argument. The function should verify that the argument value does not exceed the room capacity; if it does, the function should return -1. Write a main() that creates a hotel room with room number 123, a capacity of 4, and a rate of 150.00. Suppose a person checks in. The program should ask the user to enter the number of guests to occupy the room. Change the status of the room to reflect the number of guests that just checked in. Display the information about the room in a nice format. Now assume that the guests check out. Change the status of the room appropriately and display the information about the room. Next, change the room rate to 175.00. Finally assume that another person checks in. Ask the user to enter the number of guests to occupy the room. Change the room's status accordingly and display the new information about the room.  FILENAME \* MERGEFORMAT n_objectsNEW.doc.doc  PAGE 15 of  NUMPAGES 16 ,-` j 9  XYijstw}&Y_|}Ϟ hZH6 jhZHCJmHnHu j/hZHCJ hZH>*CJ jhZHCJmHnHuhZHOJQJhZHhp]hZHCJOJQJ^J hZHCJ hZHCJ hZH5>*CJ 8,-Xcl|}  ! ; T ` a j { ! ^$a$_III! " Y    6 9 : ; ^^$a$ h8 @`rs{|]sAB/0op^ @ 0^`0 0^`0^ BNW[dh09p~z  &`gdkmy{9[ { ""B$$$$$% &&H&X&hZHhZHOJQJhZH56CJjhZHUhZHCJOJQJ hZH>*CJ hZH6CJ hZH>*CJ hZHCJ hZH6 jhZH6mHnHuCz<=NV- h8@ @@$d%d&d'dNOPQ, h8@@$d%d&d'dNOPQ$a$ V )P], h8@@$d%d&d'dNOPQ- h8@@$d%d&d'dNOPQ467Qbn{}~ ` h8@@80^8`0 h8@@, h8@@$d%d&d'dNOPQ"#mnXYlz{89Irs* h8@@$d%d&d'dNOPQ $ h8@@a$ h8@@ h8@@80^8`0'*+7Sp* h8@@$d%d&d'dNOPQ-BCT\09HKLXt, h8@@$d%d&d'dNOPQ* h8@@$d%d&d'dNOPQT !#!$!5!, h8@@$d%d&d'dNOPQ* h8@@$d%d&d'dNOPQ5!=!a!!!!!!"" ")"F"e"""""""""""#, h8@@$d%d&d'dNOPQ##!#)#^#########$'$6$A$C$D$E$$$$$$, h8@@$d%d&d'dNOPQ$$% &&E&F&G&H&Y&Z&'''''((()(:(B(w(((* h8@@$d%d&d'dNOPQ$a$X&&&& '&'+''I)K)L)N)g))+++++,,,,-\/_/`/c/n/{////_1 4 444#44777J8::::::y>>7B8B_BBBBBBB_I`IjhZHCJU hZH6CJ hZHCJ hZHCJhZH5>*CJ\ hZH>*CJhZHOJQJ hZH>*CJjhZHUhZHCJOJQJhZH6CJ] hZHCJ>(((((())=)H)J)K)M)g)h))))**)*>*?*P*X** h8@@$d%d&d'dNOPQX*****+[+^+_+k++++++++++,,,--^$a$* h8@@$d%d&d'dNOPQ-/-X-Y-m------.?.H.W......//0/P/[/]/, h8@@$d%d&d'dNOPQ]/^/_/a/b/n/o/^1_1o11111111252, h8@@$d%d&d'dNOPQ$a$52l22222134353A3V3333333333, h8@@$d%d&d'dNOPQ- h8P@@$d%d&d'dNOPQ3 4 4 4#4$4444$5%595N5O5^5f5}5555$a$, h8@@$d%d&d'dNOPQ55/606H6I6U6c66666687E77777, h8@@$d%d&d'dNOPQ- h8@@$d%d&d'dNOPQ77777888J8[88888888889#989;9<9S9T9`9, h8@@$d%d&d'dNOPQ`9999999:>:y:::::::::::6<7<===$a$, h8@@$d%d&d'dNOPQ===>>x>>>>}@~@@BCD)D*E8EKE\EEFF^I_IIIII & F`IzI{IIIIIIIIIIIIIIIIIIIIIӾӾӸ hZHCJhp]hZH hZHCJhp]0JCJmHnHuhZH0JCJjhZH0JCJU hZHCJhZHCJmHnHujhZHCJU hZHCJIIIIIIIIIIIIIIIIIIIIIII &P/ =!"#$%n |ʙP1Rd2!PNG  IHDRW[}k#gAMA KIDATx=`PUVȡ:c8+ll8'p)s<†J:(K0?F_?OH$·SYr|(|>=Xz-nۊSU|`5sV,,c -PUuM^t:UU5ex> M)Өѿ}#I^j3ROK_gk<"Z[!N9'o|~zӻԻ w=JCtVj>+~ǧFLw/oF7»L{gRgL 㿐lt'Ƀ"aػH=C)cg G ǾA6 "FLh7F8~peYcuFS]~N$pl襱?k9QJRf<ß_ Q?v1 kaLk`wWڕZw+)g8gU[9[Pg  ]ݶ~ZECi'OZٜ<3igt|'<8y] !\Gg_pf#\/.y0fmOLg;~r[{ kqȇi{zʻ/=ɽڙq\?q-CWˉ?5;/yp}Z+*aA8Y6>ls.v?Vu q&N#mOz5c%J?BHpS`Нzk8)=*b?2z>e:":_ &Ciogcج3$4a f^ey^iw)x>W|L뗫9/.%tn`5u^~IUUcּw-`$t^t:%JZp[2.lA AR0P+PUU?`-m4j v'Lشv vQmy!y- |W3o_6~x͸s8 97{ګ;u Rws+Lv2Ÿ7jx@8{a;ǔǚ".6w݃܂~d¿悛2 ž^{ifQu!rOXk [(D^LMîu^pޮyDzRP= ߎ[lZ29d.ebjt^1`<ځ(+m} ()؛ {@5}ش,7,ZjmW5@h&~; /\3V -'L 8~7%z1;W,v=y 's?B4ꗅHA{.$ ؊O).籋tJAvM5K /)@ K /)@ K /)@ K /)@}Av'sHAr2#OUUeY8Rn96ǑOrn8R / / / / / / / / / / / / / / / / / / / / / zSYmjYR}sN й]3RJk /)@ K /׈{e݁CPԅ#C7F`!8fD`!8{EF`!8, 9K /)@v'sHA'+FywDt:MYY4өh*˲jz)˪Y>NO 4e-l UUUu:S\{xL-l UUUu:j)8VP!715KR -)`UU///qRyAi`BˆUUUM3VUU///Su[E`B&L/s'-"p\ TUUUjAS8zRD`TUUU7R[XyAUUUu|4y)WǔUUUUV[SI/St:km>h \d V'6V%&GXn*˵7|m>0`kP nackQ)X=-- ^ |/I$/._NK/,VfPUUUo)x*|>ny v~4`5^kOWy$08IENDB`n4 .2^/w9PNG  IHDRW%gAMA IDATx?6q03q*Sc+s' 2RM@G2mTYWI*,AI~FD?(Z+@ Rt:m=r6 @蛭'pg|m4 $Oezmh]M\R9Q???Gmj1lyA~|/}y|| |bݫ?UrR u/_~xs~W>Mگtu5(w1 أ3pέ;WGIx:{ Ook]OU7^Vy(~z*XVN;Jp)\ќrnߣ|شfnxzvmgwCey`'ٻ|Iy^~xÿ)|^~0)]~Lf3y'dvÆ܋x24 Dl'd0jPj߿WbgՃ؛@ 8.$>]e~SL]0DEvO,6c!k,=uSl[$Uݹ=ۨ}M)݄&6jh<'3xw[i'j[8ϙa)KR$6#!]r$tٽ>>,#,懲d+O4ƃ;x&pa|BҞWkhbM :-rZDf+l{[m]\N8q+K? 3{% ;,IRW]Mʩq$DZee]ާn](O}rPw%yCTe*79S{{ւd[LxL[4wy[mf(|cRÑ<佇oNMv.=IkJ:\CjzHhIK}أ1tLuzutMCcfy*옛4Q*3WC&PC6@ -gm?[­X' N6Էhh8%_!I^A^t][B `/z6kڭ$6$̓cHֵ!1̄m9 92z5h8i=R(]!a=85a]dm|k;Dh P/ ` h;qOjJ8o$4F4 'g I kL-w1G^T:]m%7؍4BqI@w#gO@ؽ©]6FpgM;EǐxX?m9>r_!"`p keh]^=^{H@g}@ jVm[|]PRv ixVQ:6d,kM4k@KJڤ6^ZB -k@K%zmh 6^ZB 9`pf\CjzE@KHmh -!%6cH`y&u`CzmT4#[q@F"`CvLK"[>Hm؜< m!%6HX HmXC#QެRu]J=JVu]3(3f].am PTj5q<6PmT*j_ajàRTy[T*UR r^鵩TѪ#ʙ=1..6^J6T @B6\.{Qj&6^JXe\.ѩ&kSԆ}ɴ6-T*hʄ6T*[ yYצR(mFn*Jھ` $ImMReajNO oKR5W$\dRJk6XQjT**pjȮqJk@jAdϤ%I?Nζ5T*5\u^9,/VAR5'[&2kjwZԟ PոSJ]׭j>IENDB`nAZ1l{>aSPNG  IHDR+gAMASIDATxݿvDqs.\J:^~ vyvty#[P_YSDhb?_Ic:عxupX{&P|>w]w7p\V j @wei@ ce3Jů@k}oYNsq_Fyy`NkUpQ8|p>Ϗffw6ǫ~ϖ|ұćK?日&-z# -LG=w "Oo q xtsmoxpIq}}w+|CN֞Ѽ~Ö$F6renM;d/ )O%\͘>Í<*3ۓ M+vힽ%dMw 2gw3_X"& &^?XFzn\cpʲ߰[ckH1wWW~ݙ -}"M6k[eS*-ţE}VFC.<}_S ҹ6&q5l?=& šak^\MdncgXHA_6ֻnG{nӣW@Zz*)]~)gp28ZԶ!yK]^n|eC/s׷>/=kz¡>kS?x.%*w'gjNovo{~s[YpGcx.>O̍.e[;!a; R i[LL_W܋XݍѢ33w=}70dLq*xxJ⍜{וt/. gT>)RӅmqOMF;GUe@k5s;>;Z |_R/]֩7Eo>;3ܯx}ygaixOxR q`_J3 ӯ;N9^'2SQ;B'GXߝ44MÏ}߻?- .FhKLʲޘ) f^gwЃ g (AP8q@ %3Jg (AP8q@ |]4h]lX1Z[Vq3+;˥gVVegVFw@ 3JНP tg;%(Aw@ 3JНP tg;%(Aw@ 3JНP tg;%(Aw@ 3z }Vn6sg8o3+&%3Jg (AP3x<-2+ҝؖ̒#l4Ygͯ,35Xbu-Kϲ8q@ %xWM?q`e»ټfݮ©TFjMe֎l4S.J{5&@a@ TJt ̬}OPV58}@Rk{!jq6U3*:VVq6n1/„НQ:{%D3ktrI34023*UY$G.ktʎ3U„JQ .9@~ɲ8^ MwFR3 $ JmX ݙ}e9vFRWOcgve% g6TX .!:LNPƙugT*5zJ3;eqP[TjMu/K3283kT*U3+fٸ *ZS 8,ΦYRj!lBETdx-T*ش,; q֭d{JVp,3_7`.߳ @7{DIENDB`n k~NMGPNG  IHDR)zGgAMA nIDATx?arr}s߿_]٩fv_QRps=g'%,n"4O+b0;s{;/o}Gp>6 ~{C?c߽;Z-?7f)zQN73~推8%toX<w1L?my#ikCYL-NU.=v~ k,}t9̪GZn[4!jrZ4ߊhi7{k/Amz -Q!\38gaTTBn *F~%gê0J!{yp]ɣRM}sЫP<: jR OUD0pݞJ J׫si@Ւk 44q9#hi@8 ܤ[rs\.s\Gp ~F[qiyM:2u9Gqi@HsG8+ϑ4R¯h>mD"!Cg3M3.OZqD"8ވ5eLc?4QD"4Ws@$׈ ܰ3A$׎QvKssK#sѾaXf€ ! yis\~Ti>,+ (VF5G$6eVe\.i0QrbIKsGKs{D\oܒ挗9"et7-}sD"qh߰7grbH+H̋! 1i΄r\bH Ŕi48D"ERJs5<D"qh[LsFq+JsH\;FӜYq5n5}COHsF%ON"F q!u; kĜ0g"s#0NВ~ݸN+=uvE}IENDB`n Ik^  ^PNG  IHDRr0gAMA xIDATx=``KULVp:+p+(ی6sԙn9M:ld;4H|WW!5 QVUUxPp{$|.^{Cuap;UuhnB0(>g-˲5͋~ Nچ?ӧOz[w'wBMje ;i e~_GF V:EOrPJjm?sG/X4E6ѷN-vzh3s~w6=G'$=ow'y;C-zo7c 7T˷_gg|,?t ew؟3 v]drOopCM'E+=$~nQ:icA4|!xeO~f4#LniXOK|n#1GO M5O,_:8` 8a#c67VHm,L䀙v@(q`졥;nsNtm )O{79yn:wO댕pmL3iԙg0V1trn|es+3dmdeuw 74i~;g$Cm͍WzgaCxZ wx3O#oGhi{_|[oO[r}>.}%;x"S99|.e&o+24sOgYO[y{cbs6ݐ66rqF:9L<f̧MNWztne拼%]L0]2>0h0=S%Pߥb4~ϛgQ~GCP  mv$<+coI㾖YY;6߰6i`{cx w@UvxN`LXxTs4֟E א <ķG,k,W-~(b,jNSO^DQˍYwK?i Mڊ(ƌ(1iQ#Ru]Nisvib@Lj@EIOyi-,K{]DQbF[zHu/TQVlڀ(α}mõr+g (^3v$jIr@f|n@Eqؾіgz$䧁o+3.2' S94p(c|iNfw Q}"4PO{<(t(c|4PiϚ~(>9;y9HNEQ}\3sV s@[(:bwOy}(|>= iI|#IENDB`n* u|8t%67~PNG  IHDRmLgAMAIDATx=6q23q*S"^;iOq2mt-ݦLuB z xh%>P]uaؤunr[yweneRwGs}k%wIއ?}CV///n\e5ƭWld#???Oo^5ëoWNؔƛ݇[#?. {Zmٺm{urpO{`{_'$= טxSL}ᒎc}[=G~yz0swoZ8wTQqlf"Vӛ-I4 Q`vn8՟-RwWz?M·맄;ovގޞ#OHt] 3ɹOiÉPp7 $M[5OOOFRwH?|c3e~nH;k$³[U.^eUK5 ܼWܼb#& ܇~@;s!yHtGN`Wg[3?ZAp>k#3 @zdԯ n^/E2G|ƺpk$V c? d#uMm>&Zx+H"fL g UteHY Gyd``6G&ﴊ)lL%$ `gO=b eF7=,0 $rGJ*f̪*Lh*1g9 $x/#Q5?R0ٺ2yGb$271q;VL%b$pr05VB5]69YO__y5gPX_+u#+j>+Evquah_^ q [}\x1 ,̤7ZTTG8<+0GjZO+E[gЦ`u |V->+cUgϳ@Jh_p8E_IZҕ<)R#GHQ E=@z)R#GHQ E=@z)R#**hUk0Hty;k5####8_8uR*!/E8t&7eDHG`1GJ#\CHL"yWz####>+kD#~R{]:Dc@gRJit4S"XsVhhǓG-H̍t7GZx1ĭ,7G/h^HZ+Bӄ0{#lCSPh^0Ƭt2I#ɝ@ۆQ%qZNװug]:kUVo.>/?[o||T<ӷ|? [3~Sru]_WaSnqG9іaǽÖfȽSѷ;Cᅯ5o<%+ޟg #E?b|w|yGci^ּcZߣYHF^#k7vD+.N1hxr |^t>%EOC=?|#ٓ ;$^qi)̃$MzB(f^*{Eեhw#?YR&@:_.4lΐC.ǗJKP5=rkC\[yopTkPsJ=mQ_!ٸIlzX|k~QY[o8܀?{f rcWT7N4Ռ~/+ _suּl YXw뿮)bVRSW?qoTq#qϯ;z\r窚[MM>;8We~ Sw6 7r4uʭZeFqCI6e͉R2DrD `r\)0:jGOs=ftׅ&5oiQDXӅ RN9;6Rh_рorʧeN[/EKwiɶ`]F w/UEEc5o߾}>(#ɡC3h_~nLXg$GLJUW+4L,ӌ5u]Oް K#,x ~ ɭ?CVy͙ڽrН!z}}!Z8BzͲ%Gϭ@5ǵs HnDi6h&7pNty=Nz+tH+Z2E| TuiH{xp2^S3V9f Mlb~Ѯ9kJ%ZeuCR}ruC]0ǘ5yU/:o5͝'4=eVs&m.t!ZVeURUEM7``r}K|͵/UG[5Yn۶tfkʽ]λ [e\ nu11TyM0\P5ؘq5A<15$cf@th)ڲf1o̭j֓CRe5uT=992q'5f7ۚEi[qWshkӕ;7 [[ۦ*=썐 Dʭ6J䆣TnYr;m7Lǜ:=p1s):8喋-bpvT1;o:ji*f*;%B ri nk: [-*ͭR6מώc[)0oɰ>o%W4mj1Ͱފ}yMвh}3h\t_OE'V߯E-+;5+뢺cvO-Cd[SOeTѺjf[vo /:[V1 J3筲+1ԤB] -fViaWFu̾ w4Ty[cCV>h,|zr~O$Ǹ|ɳh[_=L+s?y&J·~ecuϭE^}q@ ov_{Er˝H9)S[mk"u ̃7UW~[ndǽ<՘.XբXgoT մlf7|TvW{U+ W,oIkʭ4Lys9B%)2pUxa|m>0^V]i{Yy]浓[[5 R[K<3 7*0lH{x'_S3V9f Mlb~Ѯ9kgVluCR}ruC][Vc" 5̭@onNfmR-Ϳ"VUd4ykܲv^\ӯ"t4 \[ ?O8 W*|r8EwWshzamHpf&Tp0O[6{.+xͭnQ:rj:q]fPhs}X}|3B}sp{~7:zE߅}[mu+Yl+Vo`&*߅N{ Qs+pm8h59`Yc.0 Rtp-[<쨲cw*u\YT6#`UvJdC_ݠu:ZU [xFϭUnE9[9[9[9[5K*-X@w^=Bpoʀ3As Z V@0 8sjr*[8T*$ɡj!Z8^j!Z84j!Z85H)CBp"}ZVfA09́.\Zπh/V"7goVV]+7SRRPz.˶mގuPN$ZjRrAo%%,rr@II)zETVSz`Tˢ>%/ (UW@nEI9E"å.ZmⶣVDa@Ѻ2r+JʹJ28ڶ8Zy_w}12r+J)Jlj{Uejm܊qJ" j BՅ܊R_?Vm{dފ4ڂPeepMK.%j*c}+JJʀjK*{.%%嘥&ZmPu*ZfPRRj"hjqhu9 K=9ZmP5o%%,"DM2NMJJTy;=.Tj9o%%P[[aGr<==]W_}'`F ;hNIENDB`nrY]0r4C+PNG  IHDR&ROgAMA IDATx=FɍzdLy{cț+^U@L#LY$YQ1?I  =#` 91+eY&8)4M˥wO>}v |qvdY.g"zawgcL4&,?O>eWvázWd%,Oϟ? Mݘ~~3mW1~ӿjv !|?>M|_?d/MrdNBN 9Rq_\u9|ܱ"wϿSr^v[@|-a\<;\WoH]/CsJ[LVדMlHhږݠdz79@u <DO?ׄӞ_dEG/=YCZuofTwPj!ftY+rs{i"G4ŚH!M3>/C_OQX_U>1yw"|_)9dYm麤uյm *Zhn>w[#=kq*7XO%QZXmO3ZmZ8TD?뗱H6T6@rW~Yr9]x=>< 0v^o2WDNegz|]0iЍߣ.jcp:eG7bx!'M}q26soƊ__jc2Y Pg22'{JUn,IvS.ڍM #+rI0v#MkT~~n+79y}n^GG1Y>HR{{{yyw D] a寿TyƵrG! KT[Y?8+>+kWdeXѽb%6=;UQ@""et_.N:9zqQ9 MTKcfp#cgx`߱^ws) ""b@!nD a&_wyP(#BR(HLo٢]lv)4MK8A"Y kѣXt_]wkwO$% XL<_ۑ {M_?vbדD,?# S-y). A uiIL4mwm]΁ǿɇx<9[ڮ^6%/6{>c} ^4qaXcž= .Y\9(enR/ {[+fYjU*P ]`C3V|q'8( I֞nNyOeY1:k׃ ry}}Y`P*l)z38"9]U3wØ"!p>2 ̴蝩WYo0ԢVDϞvE U_9Xt,X)ǹB[1=#Þ3E!T8#8Ghv).%Oz *Ў,[.$/ūE$OjYu 3.?98M>JȸiBJ]KЈ#z;ʓu}K۝FG~0[l.T_9-/*Ԋ3>=c`}0ƎkTg7!ZlT~n,7D}'$ A#z (e= '8"D *pP!nF"<3"9]Ø"!p>2 ̴蝩gXjQ+gX}*c(](t =gr>A +A[ͱ#>vs} ax%Upn\L|uȰg,0mQ-ڡ] ]\\JIݠ Ȳ%NRZT6eF`n{zFc}u(n&Gd܈~z=cw=1Bp |MT 8'tzӃ '_`P5xy2sm,=1Rd,1f-3nX,{>˪< *X,{V ~gb-! I`XlkE7JDb1kuP~: bObQ]ʄszޞ#t(+CDbm61ve 3SPbdXXYZuBo|O VMDb1kU!Sbu#z^cXlsk7kcf`XluDuzRy/̣b|ku@UI|H@i@a.KvaWw;>^h~47sqy.)> /}xT⊧~ۧOjkX; \/ WdO۟ϟ? dHNmmUS F^0srcZoYRrEhްvocX\ujMtoc{4gAwpnU>`[Ji/_S\8o9UWo\aP%$ooyjm=YMrdv A:垛hT?@ KэQR?>Wх o*{a?Iў,YClww}` @ ձxRaVq)m}nO0(„72K5 }74ءmٝz6M#O?2} S]#`YmٺdS͵~9hE`fel˴~z'l&sk"xEV|PkP0~.iK6Tmt| _woA)j8؈{=۽ν].7Yjh>y Pns[QK sϣl~Pzm):S2n2"_KڟgQ^Q3JMW{r6n8Kb{u+Y$ ZqlXb%.6ପ܇n'n=MFޥҨyawSmvy[H`,I8<8.J.WO`UhsNx߮ 7[+3%m«dmy'7m9嗜x.M5Jr9}ʟ릚h׭Xz9D*Cf%-_8wݹMY9یg$m|vs]yzܝ`?ʷ 8i{.qڮy~a| 7gw[֫6&!8lm:\0C4쳷4R6m+s-i%eZmVn+PRP{Lγ0U3n[y%#g@sY7O< 1Pmp\rmvr k`%y׸7叶{arP-Ve"޷= xBh}8Kݵ'bf\>g"]Ϣ} oGmߊ-G}DFMj$yp*?[em=ܭ=׎ ܒ{3IcagpG,me@D ؈e=n2k]S6e|ov?*9 %כ$'gnENB-iJmѮW@ Eau [倒&}/W7 Mʹ]2Z>pWia ޖTd^eW_ljE\廤?eޡla(sa0K̯.׬חl*9ږW gm[pv7ZyVn+PRP{Lγ0U3n[y%#g@sJ=L^iyE6\.zHlΜ/[ikh{Lp bcNu] km{ˏY,pڽESZmﶅ_Qn2|stoXܥ/+ǭmvTὥBsTj;G˴Dfr+xN-GꤱR }vmZrj^=RѶ@NB-iJmѮWmބݍպrݧVw2r=EM>J~GCnxxr2V8vG`eeK V쳷Q_I\X<:/m^{59xj+O{Y9\pް% Wk6mGG͑F ק- ij`볦]ltLG(/Ǥjgvsvoj[ŅTP˕)罥B[Tj;G˜Af w]S6%}v˶KB&x-)oK`R[=P3QXFjj9SppW7(=me#V&}/W7 Xhɗ-)X.t .w,6Wpw\#h$ySvK\ب45eQpcjTsF5F\,>U|(Fwt0_ =6:^f m1چ9c$۵vvmp8 FO[9l5ܽ£(Z>Y`` /Uv)sj-?f5U1NjO}۲%V*rqa{AD> 4 r%-iLHl'z"Sn=Gvs3k|m;:-4oR8`dvlD^9,q}}Z&OS[;ml- ,^52Iz޸Yvy[׶r?m)0g*Tb%syl v+%f{v0r\&k &isU0뭵9.2ڮw(x.( jI '~LkV<̗{}(+.[@E}Xg}vf}v^rXJWs@VY'#>Q7}nIY9V:ϒ4Dq:t^Si (-+,쁴 С0C쁴}J{s&gmzdkeHi!mpm ap4p+!m9nYM߭q,)hH$Ğ8S5M<˾9ROIY"H$LWQO$m**)D"?NgH$D}r´9 D"QzvUFD"H|葳ra^ZK5CFD"Hg/-rmH$DKT=9۲$mb%9H$>99i{wD"H$2mωmO۫2D"(G=MڞrUڞZ "H$1jڞŜQD"(G=9mk9I D"Qi{V앴b\s@$D,u9EHC#H$0ӹ̜=}K4M~`Zan9jԟIENDB`<@< NormalCJ_HmH sH tH >@> Heading 1$@& 5>*CJ B@B Heading 2$$@&a$>*CJDA@D Default Paragraph FontViV  Table Normal :V 44 la (k(No List 4@4 Header  !4 @4 Footer  !.)@. Page NumberDZ@"D Plain TextCJOJQJtH u2B@22 Body TextCJ A            A,-Xcl|} !;T`aj{!"Y69:;@`rs{|]s A B / 0 o p      z  < = N V ) P ] 467Qbn{}~ `"#mnXYlz{89Irs'*+7Sp-BCT\09HKLXtT#$5=a )Fe!)^'6ACDE EFGHYZ ( ) : B w !!=!H!J!K!M!g!h!!!!"")">"?"P"X"""""#[#^#_#k##########$$$%%/%X%Y%m%%%%%%&?&H&W&&&&&&''0'P'[']'^'_'a'b'n'o'^)_)o))))))))*5*l*****1+4+5+A+V++++++++++ , , ,#,$,,,,$-%-9-N-O-^-f-}-----/.0.H.I.U.c......8/E////////7080J0[00000000001#181;1<1S1T1`11111192>2y2222222222264745555566x6666}8~88:;<)<*=8=K=\==>>^A_AAAAAAAAAAAAAAAAAAAAAAAAAA000000000000000000000000000000000000000000000p000000000000000000000000000000000000p0p0p0p0p0p000p0p000p0p00p0p0p0p0p0p0p0p0p00p0p0p0p0p0p0p0p0p0p00000000000000p0p0p0p0p0p000p00p0p0p0p0p0p0p0p0p0p00p0p0p00p0p0p0p0p000p0p0p0p00p0p0p000p0p0p0p0p0p0p0p0p0p0p0p00p0p000p0p000p0p0p0p0p0p0p0p0p0p00000p0p0p0p0p0p0p00p0p0p0p0p000p0p00p0p0p0p0p0p0p0p0p0p0p0p0p0p00000p00p00p00 0 0 0 0 0 0 0 0 0 0 0(0p0p0p0p0p0p00p0p0p0p0p000p0p00p00p0p0p0p0p000p000p00000p000p0p0p0p0p0p0p000p0p0p00p0p0p000p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p00p0p00p0p0p0p0p000000000000000p0p0p000p0p0p0p0p0p0p00p0p0p00p0p0p0p0p00p0p00p0p0p0p0p0p0p0p00000000p0p0p0p0p0p0p00p0p0p0p0p00p0p0p0p0p00p0p0p0p0p00p0p0p0p0p00p0p00p0p0p0p0p0p0p0p0p00p0p0p0p0p000p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0000000p0p0p0p0p0p000p0p000p0p0p0p0p0p0p0p0p 0p 0 0 0 0 0000p@0@00 0000000000000000000000SSSVX&`II%*5@! V5!#$(X*-]/52357`9=II&()+,-./012346789:;<=>?AI',3:=BMPV!Tb$|ʙP1Rd2! "b$.2^/w9< ώb$AZ1l{>aS b$k~NMG b$Ik^  ^ b$u|8t%67~2 jb$z͉uE9]b$rY]0r4C+|b$tE/|߼} b$1)HT$tb$82kb THz+ b$H88x@'b$Ppy R,`Œ}sb$ӕqw %"b$*.`R/ lVb$` xr(K*OI )b$|)YcU$>Ko!rb$E!p +nb$ N_[o/b$X"x+hb$:dp;vzĔad"b$[,xF2Ib$99x'EeX$b$l;Wkk'L b$Va\$_[#0b$(P´.w32zF b$`3fk`jq6Y V#b${Q@X (  <  # AJ  # A"J  # A"J  # A"J  # A"J  # A"<  # AJ  # A"J  # A "B S  ?K!#_' ,/2Aw4t4484X4H4oQ 4444À{55A55A8*urn:schemas-microsoft-com:office:smarttagsCityV*urn:schemas-microsoft-com:office:smarttagsplacehttp://www.5iantlavalamp.com/  37X\IMZ^.2|   d g i l    % * . ; D J N Q Y ^ b q x | <LRU}+.TXelqu#+:=LOuy mp*.;BGKQSZafjpry69?Blp  #(,04lt"&>B  O R X [ x { !! !!$!1!7!;!"'"e"h"n"q"""""""""""""####/#2#7#:#_#b###c%k%%%%%&& &&#&'&I&L&Z&]&^&a&c&f&j&m&&&&&&&&&&&''%','3'7'='?'E'L'))))))*!*E*I*O*V*z*~***************++ ++5+8+Z+^+d+f+z++++++++++++/-7-------0.3.I.L.f.j.~.........//#/H/L/`/l/0011-101<1?1@1M1T1W1a1e1y11111111222$2A2E2Y2d22222333 44+4@:C:;;&;/;8=@=g=q===_AAAAaejo{} "%Z^=?@LW\ . ( .   = B N T W [  * . Q Z ^ b 7;RUcfor~ &`g+.ACTXqu-2CHTZ_h 07:=LOeguy$)5;@Idm*.GKfj!'FI_c  (,7=lu    ) . : @ _ b x { !!$!2!>!D!)"."?"D"P"V"u"x"""""""""###_#b#u#w#####$$m%r%%%%%%%%%&&?&F&I&L&Z&]&&&&&&&''3'7'Q'W'))))))))**9*B*m*q*********5+8+M+O+Z+^+++++,,9->-O-T-^-d-i-p---------0.3.I.L.f.j....../H/L///0000000000001!1&1,1<1?1T1W1a1e1111122A2E22222:4?46688]9a9.:>::;;;)<*<==>>_AAAA3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333<)<*=\=_AAAAAAA_AAAADefaultDefaultprofesssor friedmanStudentStudentStudentprofesssor friedmanprofesssor friedmanprofesssor friedmanRachel Friedman@uAr } u?(r t$n /r/1nR7FVWr]*;X~Nqr[rM`^ViAor~>h~nhh^h`o(./hh^h`56789;<B*H*OJQJS*TXo(hh^h`>*./hh^h`56789;<B*H*OJQJS*TXo( hh^h`OJQJo(n/hh^h`56789;<B*H*OJQJS*TXo( hh^h`OJQJo(nhh^h`o(.hh^h`o(.0^`0o(..0^`0o(... 88^8`o( .... 88^8`o( ..... `^``o( ...... `^``o(....... `^``o(......../hh^h`56789;<B*H*OJQJS*TXo(z^`zo(.z^`zo(..0^`0o(...0^`0o(.... 88^8`o( ..... 88^8`o( ...... `^``o(....... `^``o(........ ^`o(........./hh^h`56789;<B*H*OJQJS*TXo(hh^h`o(()/hh^h`56789;<B*H*OJQJS*TXo( hh^h`OJQJo(n } M`^R]*;X /FVW@Aoqr[/1 t$~>h~?(AZHp]u_AAA@@A@UnknownGz Times New Roman5Symbol3& z Arial?5 z Courier New;Wingdings9WP MathA"qh fu& 7!v 7!v#24d>A>A3QH?u-Running your first C++ program in Borland C++ ProfessorRachel FriedmanD         Oh+'0  $0 L X d p|.Running your first C++ program in Borland C++ 1unn ProfessorurrofNormaloRachel Friedman3chMicrosoft Word 10.0@G@NE#@@` 7՜.+,0, hp  Dell Computer Corporationtv!>AA .Running your first C++ program in Borland C++ Title  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxz{|}~Root Entry F *`1Tabley:{WordDocumentSummaryInformation(DocumentSummaryInformation8CompObjj  FMicrosoft Word Document MSWordDocWord.Document.89q