ࡱ>   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoqrstuvwxyz{|}~RdO)A PicturesPowerPoint Document(pSummaryInformation(3 WE@: A1Ag-r.u<0(I2) >L;@CP$ ~$ ~$ ~$ ~OߔQu)] EQ*Gc0tw :y)AЏ!AЏ!AЏ!AЏ!AЏ!AЏ!AÖ[i_DkZp2/E_ld͢+̳O4#6t nÇ6թ>s9n 7d^ᓝMvd2'OaÇ;Y^O9Ld&]xiXK \hԽ=7dB^iAJ/L+1qp7Go;'_%|!0 퍝kΎ0-[,)﫣v;1͛aǫ?[5۹#P/S 茰&seQoFTڽަɟ9aU9d.=X\3otd>"ljߘ`K 5n:5)/:ԘscCtPNG  IHDR0'gAMAܲ pHYs   IDATxy\TU?w``mXE0T@PDEqI@ W@1Q (-[Zړ JTPDYwT5`ν3,**( ^{s=sY)Vvt,u +A z%Du蕠N W:AJP'^ +A z%Du蕠N חP1wQw}#>ISuZ$\,񋣱PÄ$aS#gH4;:T%V^Ue88<<նg3'sh}9Z>F@]8[eb>Ȭl > y%Pd}^o~e9:~pz6ض `σ-,]>j.a #7K$bH{U{V~r$=aqIy!9.x.,"V c -uh)hc'8p@oqn`묽[Rr4hP@uq-V|neVc OiH/_:5UTW@NWxXXzt(3D"-mxbYAC{4^j,=*W%z: 2sy:tly $TC\ @' 6\I,=-9 2U3,/4BhRVN:^0 6jm+<#[gO讁Z @) mgn>* (PJnᅐHB1BY2(j-⊰RLsg4$D:S[%@PwY#AJP'HN W:AJP'HV(H7DC_oAۗ=,ز%pبde^[ˣ؋>_]/hY{ee?=.&:>W%#*z[9̈ɎNZG/L's 099du밨 ZחǍ|SFD 2%UBD\X0{Q|Zq쯽ƺc5;_' a"],`Tѷb:}c쏚q!j޲uO?+v-C޷PM/=?T; @X6 AkXQ\ٸR|y6^J zX<1ĥ)0e;ʯ& mggiSS`*z-n8 ,ð:f4auB9 0r-g,H (׳$:u3unp40YW㞘VBwPI͚-r_oe$i]ƫOr g:-Ssnlk^W)ʛѫżJXTU 0lҫeTrmBCZ %b4{cE%A5 0Ri iX(d4ejUS%6W$ab/3|͒։bVǀU#=b枾IXwq΋VNnGg@]zvGgSAyq u蕠N W:AJP'^ +Ah[(# Y*ʊ:Yg6'd)v#WߞxSV@<9|~%ԫ(۹sZz]139 PP鶁ȭkut6EyO5`!搦 0` X4%|w4ƦcD~d p[VGdiIk;w iѵ_w{xo@.RϜYܸZb₆RW'4>\Kg^F?4mY.Msckȥ)GOֱ1k̀עb3zLp3 }fML.p,B`Lw>x)#[BN/揦ÿV5:3eI-GP~B]n\޼ fݻ FBw`_+QZ=ٳF9jYY6+̱5- eiZmuZϷ`wKsҏ<,@V_ @PNm\@ ޸zr|3gCj9k{4 U kՕN?rr6G_UʤZRXa8Xu6-Q `7=uc4snq/ .Kj95w@HH\/]wj:}GϞ:*{jˁ"D{oploJUY\剤f|{ ǮXIXLl39 :9[_tȣSB+P.K5#k tZ/0K?}l۲# ۯu>YV m^U.5*pfl<;jǵi߁vznй2  (̟,(^.vzJ7{ ]0VI)US|N"K<+?(xrXy9 lc Ͽ/ܴa3Iʀ<Ǣgax~k*P뫪(LT]-yFZ2aigYJG`l[KORyK:D+-Cq:ce o`ڬ3oDGDπI~&ͣ6zɎϤoYoԐ$WG`ȇVs*Gjʰw;:ojjWB{Ff$e5i^;VK< x~#d}DzdoYb #-{(~偿?gAf䚯"ҁc~BR})R)oT~xajSr \a3<vWJ#nxH7WWב#ѝ۷z0m$SQX#V~,› Z6_ӪD9fkԥ?7谤FhD썼rR %WKfXyHS0®-T;s ̝=߈=FnN!fWyGUG nK2||jTD#qT8ㅼ μ^YFN4MOsѰ49&;5GwILZ֛#6MkN7nj{P|`3?Sv-Yᵟ%%x?= f끬pД @o?螼Vl_k=&+kϓ,+C{GΛ6&x~;ZzrÿRX@C Y亢L`KOm93Œk]Vy)NM8O@|JNSkCHा({p)Tv2p>^[=)Wa4HNv6S&U=pe,Edh\<7Zzsfja-Nda0ٜOx2$Қ@Q,t| XvyzVŃӟ[/prqcÚ6~OBDQA+"(jTmRk֭Vjշ֢R*VֺaE}YAe d#U$´wu13g9\=y mDڜ //}f?[U'9Udrkœ--~K2W(b{-P 2g @ /xMIµݻ|@xF q7 oa\Xs"B0PLP0p@2.&s]2!]595 :/оc72c_#?].rj|[tzmUߌg}Z:䞔E{T9_[BUY7'9, qߎnYr[ZGzv<%sEF̌"1Ոdx"#'Rn!&|Н2CO7ZZahJX.M'e6ztpa:L# "sDƼeBS(Z:ZJf e<巂ysJy޾nu'f1":ϥ|˖>nvǰFGh܈1BKj fKf-ta O{&@vrqx|D !#27Q珪uR !_0N_ިuO֟w>?$w! W z%OX7.@vj˞ M_cS?OX7.El/>/@!yn蓝}"n`L,p0(NY}TbvӀ,ڬ"Y}s2tOddtH}!aL9xcǯV:e'L d )ʻ_DXp[ુvaGo:~)3Aflh)mAͩmBA`=~mYl jV`k@\z^t*u`}Sn*5 nF!5+0o_(TNOϥHhxcq?]VnDϮϋ޽veL8+dKg]y}E93[{"h鉇?7}$-A$Wmɍ;ՠ) dJ-_(5CvVtT=a o5}79:|Ε_U XPVJG.& ݆10YJi e')Ohu>5Es12G͚4q\6onJKp*xiLފ>>k.kLJ5ƌJuu>Ck44UV%,d|$f{Qr~&+wY;_̢֞ȶhk]X&4[=*FO%A3Wm]VTɝkY.&4/ӆpgMsPrh['l86J2?aA_ τ&^ l&^ l&^ l&^ l|ߐ&zwq~= q~ W z% W z% W z% W z% W z% W z% W z% ׆@#?:>úI[i򬌒By4+!zmtKfheJOn徺+τkי̜;|;ڷȏ'=P(-\;z&~ k㫩qۛB-;}0Fv2&kحau@}rٷ{ƏhtF (nm-R顗ͨ,䅝Ͷӭfʻ2y<#W$޴Wd}sn8- \_ km;uUe6 B(|V񳝋Oa~DUߏۄ81 ſ,X'ʽ@u""`uخȪ^7L[M#?SEͭ|uPf $jyI@s=&WAz8la`T$TPV{)v6WT0[MZ9.xvF>Jl=2pENe\Bι,hSŐ-%3vNSG4! '2B% 逓eβgwxOq @hkl^PJ<31[4zg -DmL`rS5k )p~e[n">.)΋,M36 ^Y_J+0qSd/D/Akhj @aZmR?Mo;/c-[*٩Y2.^Z'׿@~/4߱Dplo~ORWH%[~5@~f{Y.޽tg cӔ"D:94R4aC)qk^EG g*1  RjrtRmZJNU,JU,QL8*BJjڊ/-Q+ZkX,L!Q0ƦcqTf_8վV^.[S #L*M?IDAT2hxvT6v5DMR. z% W z% W z% W'{Ʈ¿5C!S?頨צVPK[q~uj|2~% }U~o {]ҙБF{=]So.Hhs<)- [>3ƾg Uҟѻ2NǭL\,.7;VߣiE~o\Uיߎ}d7C`!m~:zzmӆ?hV~bVQѧ^)J|;A\[k3+,koLl£"U1X[\|g  bn@/O6vhԻ]#RK"C̡=cXNCOqBlFrde[&~n;bHj. eMM> ;.Ln?` ^oU}*۲JFYp|ܓn>]fE5+f/;3ɹC{*Û1V urc?5:zbL>YW'b 9dž}QBxȈsUaf  6Fw<4MO:LK_oOeS~W`dN*ȸ#tnJ? sP0ǿ012^Sxr! j4d"fΞpT`fqF$(3} 4j_t]L+YlÀjh ǮdP|&Pa3_~͊=<,=(?|hTo6>&Y0w@)Vw7fN۳ټG]{JD 57CF 9y̨mL l¢Mlb7hu5{zrԼW!3g'ΝO<;(}@D@#)8r ޙDU5l3 &b*QfVnR &X$DZ) #,32,cE@dq;f{\sw|Čـ$,o0<2l'e\;{ _m}>-y֚m6~ w֎Ob峠c`h6*\>sC*z97~O=J,P =#9%Z >P.lvޛBhcu>|e맺{Ύ+H@{vB4`'[Ɋ޽,lw. <*j,ISMY7 1Qih{@۱h}:",-FZk@z2}i:jH?ETI[{km` x(S*TswAFzN^3b[0[2Ynuj2Rl6J޴g_4@@|>|@/R\Y`XrU ;L|+#a og.@oɟ`ɩ@Z4&,KRrX:r565ݪթŠm P˄偔!Dz 6_3 o_>ZY T7:W[:+;wwu ,higfߘn8?Y`7ly^[sumpGN?H'~бLQTY]kIUXT  WJT`3ErCcS@y~+j")ئ&5on4Tu~iܧ6p(7[]_QU65Pz2puUUu 6T_^-i2261duN-yCKū&/~W71W #c3!_`wG18&v^ϸܵKg97gڸ3дzFoYa:Z1+@z%<-t]kOBB^^%~ o/ ;т^e_YSFUCM5AG3 'fӆ@ͯWF?"jդĤĤrYq}|c fgu]yCw7w'b=zc{*AtxͼGHGʦn df@ %>'w4-\_%/hjL X-+M ?tC17ZPfsy3e;š؟Nu٫~' D;I:$ ,%5--5%"%Aư hZ9чm ȩ?nE*^јGgѲuS~+J_ @,xLկjWOn* qwXHp_L )S&h&Gzrt =~&N4d--ƵÚWM8_R,wɂS99U1z `4)6[[oꈏvk04TvT׼}bAcW&0HSEb[6eIݚW9-VCR&˘P-5[@|G=w3џbfvYמgoLOۏ_8kƖKxAv-_;6h1 S4(r@@k" _Bi3!fIv *zȬFNϏ\;l$KJfA΃t9 ow|0?2wLv5:ǣyb7o< C _qdh4 $Z+w31WW iFx˅¥ .ޟ a6JA×n883_(-い>8t4=b-!831bY[:!z)j[~5[hPc|چ;*}sWR!Sg< lK=(%j&Đ&\@+)E%F=4@e8e<жoׂceՈ<#U^KΗՂcW[[@W>oIύ$y.AJ%^ D_vW @{ptTWLHH'k7D }-O5^ikL~s˕:OopwvF /޲Z3A zV(ϟCBB~8PѠ|wh7/gV"C}fIL^jSdYl/'yzWKߚ'<d;KNa9 gRn܎b%:.>3'e_zӡ PxbwNGAZ:u }]P緡…Y׃w=?6cژʒ쏭wmC9Aǥ>pߥ\D"A$I:A4y+e/~sk* oJ_4ʞ4T7!oCcoZ`ΤcZh*6IerMSH`MVdn^i $ǀA׊64xc3koL)܌)T# ;g ߛ0? jQ*)& S4*RE`0YMm\B{3ۜMG#cfQ9x0ή%CGO֯nꨴ橝6V)Is@j^69_@;t~#=I%uБ'[PrsJ!JcKrn^<$Y'jL%-3gW 4o$EgHXZ?sWBR,e5z ttNyB%֞{x̨U#^kNJUVn#CgbJyl>eΣqnm-kKTV|pѼYJ&0e%K4[yǮfJP5{~J^:J2H8~ 61F_9f}ajUQߍ5wTZuNK9̫wS1(rky?bq4WF^Yj'ߧ-9;I_ǯA4{cae@ #}\ka#:*gmR"w3#:z:\w+E c4&LK/3writ6'!n7bANKSjqĈ ;v󄝭HI+7A'!M N^ +A z%D]蕠Kt W.AJ%]kzvn@q~ ]蕠Kt W.AJ%^ +A z%D]蕠Kt W.AJ%^ gI%8IENDB`nPߩK*6v#Hj֨+f\@-PNG  IHDR-m٫gAMAܲ pHYs   IDATx{TTU0""TP4 @,}YxW,}3)h(` Hb" vJBMejASi3`1$7vj9ھs~Z(2\X'ysKV'y?+*F }d{ 'myП[8% jPH}򰽼I3B:0He25Tp c-< @C6> '9jwc$ k;1 tƃ/<,`g>pW%zEMDv^a@ޖi榮q5lq/SvaJq 0Ģ{L}>8kHfQ'QʚzRURBM<]k}@n?Mx>&Z^?}B++w e/HT- k*6WD.,/}/rSP*úowx{}{͎ )m76׶>eGz(Hoͧ}@}AJ r7= YrNZDnm Fَ, h@gbVEhkWňBT)_>^5w\9]v\L.MPT]޳` `40 eIGФW T1"P)>K|E`C4 8'L2h Ŗ= BXKt\M.ό霓좝 /1 iؔmK0تN#݁(+,@T\ cG!6h{qLJẉٻ!>h~؈.aޢA/qꊽSAЏ[HH=>AЏȼ G G%ڨwg}q%81cF /Z O;&Vf^<Č_zn&yH8k/ȫK-/8PZ"R4 )X!V9yN[$~Yфs$^`W&0P,2Y, Ll ВC_$^CvΨ`1_u#yH5kh{?_(7CCz =MS-E;k?آt`يTʤ2㥕(S(_)CzHgKDoF@sGf&?Cɤ0ˈ9;v}ퟃ9E>]AM!C.Ő޳qЀˆcnYծ#O=x׶e%& 0_yA h(D ن=E*61DEFZhxyj<_l>0~nj&] )\^ 3Xzgք&N==)>ܱ˦Zf@*fm'qx<7JWWA$aj otn)R [uF:\,ntU 15xIgn$I.hI\CM쥶^=16@-Mvhq7=jFjb(K;Bqgpaɱ/]<|l{CZ4,@#'&w 7Q ϔgjJ?>wm_(RPRBdD2fnƖ1_&[m2%KQv؛dH *mݺqӦa:yu}g9y,Bhve_施 p|IT?GXv$4Y&Y,LgG)Pv jx'.3;|0$ܹ抷OT|r2jkI(ea[^-6)g#R)\돻LgG)PvIbS7I.Hs3?m 7f놤YqTz7  2vǕTD~-{/(ʮÝ jմFíQ +i`f ilGÄ,>zݻ2 (NeԲtU% Hnnۯv+D݁HTs2JjZc2Uެmu9hƒ֭.2f![MjښgK`T9Tw5VJʸ# HuLjeOW+${q}&VYU ƃ6e'чCwnuiZgΥ>#a™Ta@{"} _¥@wcS;]N[<i}rIk_z0 j6ԠI!D\xs|H$pYlͦ6l^Z+ Xl7DbUR;)dW_xڭFhV7ۤXK]]~urÔ \AeK*]U7to{jW"'*6 ?j@'GIPj~ztv:Yfסv8/7KVU47YQ@zJ8\wAhtȥQ}ãN#0Mci{^?$?wړFͦ55v)~[;zh, ?U(qf!w{6M>f@g'|+oUC%vѭQgZH `9b΀73r7SA&I-U5fB./ݦNx)4U='4tÔ(GK]iZzK_-H/-vRmk +Jf!mC*)D3Ptӯ44 ꛞ_T3F}fMr)!:l[ h 2ÖL!<*S/]!f톘ap(Í*;T5jt(u_vPR/%@`Cy !:$@`Cy !:$@`Cyd|kQO7 $m&f 6DġϻJ̣2q>]]KK::M?I!7.{wo'W?$C_C;}P oCY{vȔsOvPVz5-b/.(yq5,Xhwfܺx\TBӀTn 8`ȡ dJY.s/o7Cpږu> θ0Rx4ɗBC/=dں>Otɧ^&Qz\[ `Q,@yܝ:àrm>O8~RRިlEqN^!aȡqgN3&yUdhBΜamPAN$0hѥy'T)Qި>o459aI7Dw5Wxa';Φ]s!%ebA񛕨ڕet1Ζl S#mQmi4OhОV6}~ 0ƹPlT;W8 P|}%y׿W,'FݷE那7C ,,̺[h5>w>mX-`LPUZz]}pډ6us0H/-0R6JK粁;v0+G-1 9 Q&T2/ʚ&[8T}xɈc/_<\sWӪ-(,(t1AQ*.+,W6}ןWC-'x0[˭"׭^{=b#0)FKږxC?}Ml@ŝYDxF9ø-N\.t,)H:mݺUn;/CIzR&˃Lr l^lHLp1eT+DbQ\/UvTgN _=hW׵7IG">Jk^7TCaw{X0bq;_GFP=HtjI 3`çi9P,JbFL%V'd PTx IDAT݈޴sMK!MˁryTm"=? ZzeԲ}?kʤrw+6:͡C]ӮzeۥNUӣ>KgM=w3~Xz66_b2¡S$x[E N MZ ~x?6ph]5cWXm =/zdcC~Ck>GeGQZdo,㺖gBQ$yw‚_N=ge "Gl'ġc//qVpS1h~c;& lvT:V ߱#^>W[Oޖ222Ddih*V=#{1VSna@0vXD͝0v;ϰoϮk=i|y{5V3=ƒSgg6TC?E%%2uC3%|]} .0 Xy4@o[<(ZTbArrvΦ8EZ҂2hkToKKxmtU>ʨhɢZѫmjKS)mm4@Wi%lV?؟ Gsh`yHhsuOȊ#](Hi@{ExXZV"Ғԝ^ qawMu6%!!opw=vw^Nd0_35GD]Rr;ݣ4 Z ꄟ(gÚ6ߓ$D6 (HU.˧mm?QZZo*Z U+ ((*k @2l.K&g&g2Us/ {.DׅyԪS z8@9~RCQ~Va;ĥ婈D8p?܃"઴@ooiRS҂ Sɺ}G~wUha @{dH~Tٜ!ੈ@u4 XnS1%ٴ߾6OGe׹]PtCo5_q$qҖ6/Z8вJ]F9^gѱ]V[D(ޱ0jA4FQcF pr?WjƠ\R,jTdw,v/x5Sa}vb7߰?s;~g9Xuu hp|)[+XRd254@>->3"ͬFvm= tU[>S=Fv0L!KU𐳨' 8H l:{~8?^풕6~רUiEp|\\P7XeJccQusVVXXo0VnUO[,OEcx%چF< =cEIqv;CBVZ x<2@d ؾjRK^% ViFm瀪ZVXy=iR+V4S ~逾"Q=CBGuH !!ܣ:${TpRR耪ZFRBGuH !!ܣ:${TpQ=CBGuH !!ܣ:${TpQ½F -gb3/׸bIFRBGuH !!ܣ:${Tp+N ?aW\wUu~fB>]!D3S#펮n=0ym^~V)g̑{?:eBսgwggWMqI8q]gz2E:Cf TXQ‘Cb,(θp$:ݤESfv6-OK:pʴ]܎Q8͙+fw5i<3pE6Eks[5z=WtAQUٟw}r7'F~&D.’TEvۧɗ3F?ZeEWRV_ʟa\Ղ͋{Ϥ.|wmryKR RB44'1!plYAG@"hhmIJ{?qb.׭Sr?l'*vM5@~f`xtY.U[bR,c)0q3G?$aٻ'r Q!+juرA?w2vo&M(`Pw@ Ru  Hh3&~5ѫnՏ3`kbjt{#!}+ʡL=x `x_!`5t |0< &-TC*zե^倗 ?|{檋ƧC 5zDJ?uDO*ʊ5m yVY)SR.WNY~'q#hh |T{f{}D ep;ڝ],f]=+N7miu:d,\i{Sr$riWUrY!.h`1H\;)n|$f iwTݽyz)i!~r }@ů%u4Mӿ父Sfw6/H\Z[t%NK i :73'_#A ~V݇E7}GJC=(f!ϥχO.}dK,iF,T$g6i#2Ѵ ?w>hkФj_Ԩ=U>v}Ǯ`yQ{+6G q7(׮q|Î}Fޞ*rz0rҫG$)'Y'> 'PL^vyՇ#"1bj!!y {z~&# >?qe?kuFs >څϵK}:[}K+B:wQH**bV" (豚MQ=m S~gC6xY>V?~^60aVչ)+{4y_-nW4[fÛtHGaιOښ,yze~ NzwB.2|ՙgǬx13ӝf歏Ο4mr]]M>D횳%IQK _|)J 秝b[{;=UN>^Գ1zqW"1bb%+' rӶn TTƬr)Ԅ|7W6 ٵcԫlьu `̩>.<\ݼN p ԃK)|b3KF# 9dД~.fe`fëook IQ1Ԝˊ K+xZ(M)QhY:dg(<дN͆gH- L]o=$N'k+-I~q "#-*$EEHWYѽ6d}FUfޢՠ:lKZ{RB׸ˊ45!и:lc\wjt^J^_?y訕G/.=Qt6V:, ,J6fKo[u(k.z/1 fqVɌKYƍ݂6bm`YnBoFv=qSR>}@Cz-sh1:#G{w3}Qiqyf4tlFxOۯsWiINNA9(w_8S}+zv^_bq?Vԩd;$?/K:K}؆*w!Еl,{y{e;k"sékSNWo/'!;@/'N-P\{DZ51l7|RhcCO}U8 eYv3-k`oKS]t3PVj|yN"}lVkgB`Q.--:(7 khBQ;1j};ÿx$K+u;ʛ%P'~#*j9Ii% /БFmϐa˲dO 9.H̬]a/R^)D'~haJU%&1G*kGt1{߹CoLX=qɒ=~n~w3Pۓp4|Oæ|g="DԘh_RJ :D(ɼ_dbh&x\ lT>HuPgaҨˌ)@eVgK @t'_6hopg]/mCZR5ԦGnEE^1fPvf5*4ۼAujWas &u机pq+!:vQނQ===:/%{TpQ=CBGuH a &^Ww5UnMIR a2a:2 _41Cd'?|32Y)&IITmuM2t;:s9>y,;g(DOLDP Doݩj֘+ɹg%0i*:ʟ}Tl֭i[0Z6Pκ_{I"ud~y|Q n6u!z:̸S 0{ZtP-P|~ݾSǻ0?z,ߜgz+Ng3n*k,E9,l6aEJo eӭ1?#!:T Ҏ^Şi95}߯N eJEUj髹l[l& M )Y%y7 bP솑 ёن=TUQʗ[fyyQHA ѡ:vd灁=k9 \BF1ii ;+ vdziCuvlIʮ-R KUM3V3^++>66X(jd2-=]- @Miea\ GژRF |jCIW$\]̙vh5fwPX"':$|h@)F*:z?L"|h#/E>ʹ/J L %Jd}!T밸Xt#>W_XXɬ?*+sȰo.()ߵ檯_LЩu2fkU>a{K-QwMgj'(?tYLTq k^V毻~Cq!#^~HyN2- E/wޭQ:,mM-R WXw-qaqe fOs.O-w"ʞ_9%PNL,>U|Ҽ'%90BS-/ַW'&kKN]݌<}Y+#eF 0ak,Zq)Ly2zq;lp,Krgogx;gۗI1)U#:J5~WWHhj3iiqxL\D>\ uO<Ɗq#(H i2k^]bQ͡حiurYaJƺHd8  %jYKٚ_32pmmm' <۩  <;!t;wOOدjr`=т EaVwX\ Pk~zK@.+M9 L(%1X n<օ}@by:֩ro0ָ֛ۥlMn?&3Q{ћ]%vk"|L۾N\EΨ<bi'z)C}T@ ~~KuMa谙гw.ula'M[@2k\Tn!FZ-8]aXlAnYQ5׶~]R$ϞzEhL6&tf+r2lXkϓ6i;cӆ?Qlq &G>'#Vd d5oCy4\!{l= C3jr4}Z!hz@I@`Cy !:$@`Cy !:$@`Cy QI~C"r@+--9M>C's$}"_c}zdi:W&<|`pLy⥅."|^/=VO /\ rgo<fggO(M1nc~24{@;l|o5ЎScad UA3i2wfؽ v3K(ɻD2pF%]|[7R, 7h=K#Ҷ|=VB[v5clccŎGUCIDATz {feDvLtaLTyGHKMvb[_g ^_dEj*@8Ďc#r\6p{g  44&zOÅi jWxT^xd.c/ߗ/yg[ 90,ҩb_[w, xjAEY6~i5z:[684{@7 `UJ+~k }CZ^1cmBB='7; Sk8bR|/i3'mN|9ʲv2 @Z>wWmjϮԐiP@s,rA̯xu~ޔzUuGTHJڮzSW..Ywh#//R&&-JkmhgAQUVZC $Ue72P]^R%Up-uj IQu NuZ^SVZIi誼2AQ**(^~6s@5@ :$@`U0VCRTCRHOCtH 0:|p`g5uB($*kCmޓ*Uf?taK0~ٱ&9:Cae!;66EnFiMW]&FKV/iC4(Mz07`YhD^W!m /UƮ ^!?G/ա+œ9%|3ai>>y>񙮥Q dgwGjQgeZq->SQ6n%ÛWqjWDXέgS' ]6 eٱ5z=ڷa @OtK{c3p,yJw =m[\ 6߇gݱR4s!~YOSjwYJϲ뿢KL_rQNGJr;Z}/' Rm;\q֜r7q Cۯ"ro`>$XRF⾽Q O/?oﲟVdI_e+7R=C8A+r 4q { Z|C&+wiWmY'wϽ]Xx֮&|X/Êqd_ lr"_7/>מES`v孒Qk:_\,㲟6$+NY-a qvo~XDz&p{&9އI[=\.v}{Uzz kW<| |Lai,1ӣ#!29Uِ-p?ĂcMYKPHkYY.pڈm)ۉA=r?xv@^X񦥷IX H-IW l;+QTH@СԔ䐉vXhR|_EX%B doB-j6uu[; d^y3Єж҇)~]띒i;rzry*/?z l)9\PAlh]Dj B˃k\dž= {Ds:oXTĘúUSS4dbRТ5Q oݟOk㦛K'UZoz9M57iФ@> 06QmKv\&f7v҅fj`~3ʪ߯}8rT>!9m7_Xj~ +UƼ8t?kqI5٥"0.@ODal Ja ]qׇڭ]6}W0׬_֕6UvrxW?zYVegdedl{Bpkvć;w~qG=3~]K|_5,>w3+9P nPx'vf%NXc|Clk3T⧟yG *|5۴*G'ԶԥJGxע'/O=3QGxბ»cuSby|1d| tֲ[d.^o憏~br?_gpxz/[+s{ф : NyΤ:<+:LXѿ+g xrLIS×C-+ߝrg׭n-1@#3L]Wi]#2p; `||йY>+Br@AoҨCrO<@"11} mf2ƻWwOB`_+bz[Dc&3>}z/bHĖ*=9ۑ=mm5y1ʎbV&~_0c1D?3WSs<2 IwVuKUf#ֱ˽E2CSAݏq=%Yվs+K\u}r s^Oy"HGgt}( fܥ,='ktO\/AM[ͩao;-Jox~;G4ơG|i_0gw',bқvB,(is:o=ےwr__䕊з{I%:s8 PAKY`q,pq~<%)[sy(,P4\f#G&ޒ&ûV=K.ILBᇍ7:7rO*]lEɷ+J: ;^5zehшB}x/m7h|\̚FVn ?;g:E*M152,rxK+kB\`1è }dbUkhxVH ˢ︩%p$rmm/F؇~= ۤ)05D{"d>${ԇpQ=CBG}H !!ܣ>${4 tH Iނ@s)!ܣ>${ԇpQ=CB?X5IENDB`nrT8Y$ ` vL3@PNG  IHDR-m٫gAMAܲ pHYs   IDATxyT$6(PPTRZ}O}V֊Uk[[B-(TM+(VDEvY@!ɼ?ח9sH^ߓɝP B}A$i~JLlPI4âB ww?bu{[4lop$7W7y%'SKGLivWGű]l;ixcJO]qt4E*B=}1(m]׵Egh&#K.}=ulpRR ^6~7{M߬k06e|iWӋL>پXYo؜Z$!Ӿ,ܙ4Pނnxx|dlIdlH2 ;2C6(\_Jv\*͗{:-@C@LnpvN-? =,Em V (&@coDF{p u1h]S\:9vHuWHӷ1I%7ʺBH}ʳ3ayJSŔ`3uc;]Ko;[°:7'+]llb`{gUldE(-gẀW] gxmm  ra7G=[?'2('f"pl s_ʼn_VtDAvgma`FltO.8oѽu@G~g Ag!fF!8odLHR;5Vp>β##.&Qp=#3NΣlݴ;Fm{P gʡް%+cSqp:T4c(7I+ٌrw53qe8vhw~vAa{:^7V9.:ҶO:laF%>KU=^FK>>ik^zR_ 3W [QPBY꼶0u 쥸 8CP?䐗!00VwX2aeyM P~öDDD)wh47mY˿ J_i;Gֹi4@!?)":Qƶ5E -T䉌R+}fO6%t&;S;t m˓(*2ONiPMYfJ&Ft;yPx7U|U@\x K`0 ТbP\fE˘ v=2ѧ(7ǿOXWw&$5W,r(}-y!qX,~Jߗ~ ¿?G.uz.5|ŅKzVcg~ t2),IEj5 aǍbeK2y74xt=q~?#> 1`[m~)\2k-4PߎYxNwUBŔ^*55ȘZw'&262^V&,FX1iZ* l`h sӹS}鵒a]?J~wnܑXX|=#BO(7d@̻] -= Gݍ}[Wt-hᝬڧT6j_XC$5Q_4@ _BwϳE1hJ3ZE҃' o^#5sk SL /?n=t8IdF_~=y&V^)<)i^gDW u- AnR/rLe/ LmCݲ@Q9)w"?*YWmNK7׸1>/N̋-9c+qʶU"sQ9Io 7E9|s N;&7RLc{t: g"4@n)khnk @&nmtgA'#ǥ~$~$7;tű n67=7rcL̥Cql^KI %3+<s%@Vu!^WVq[\"7WmNFnWV-:S=әPbNP,L&u!I`0[2ˀP% &Y\W9CBiE~ p=?H OPzoi?y|MS yʏΧ6J@C+в'|>OIC"J(+= M;NzcdJat;Z;[//tŌVЕKLh*%_{4'5e^i6wu`@\WQXIk y6t l>WqcydnIs&q2:飨W) wd[rt$on4lXtU6-!nMxwF 2$8l0BKY~ݝ#Gi͊9mص"a,W#%Lč@'}1́WC,4e^0t:;ۗm ՅhǮ{tnj^[]I1 5!9Ty'^ݕvff*&{^-u . 9~&uڿ6 zL?=9&A j_o:l|_>ػ_^f-'O*dv t.E ,MZdi s[y"#h8lmYGsDӔ&ː"s}m L_CgϡE0ch`RLWg6`9nҎ4zwY :9ufuLw/VE_`$uT0Ψ cdF{{_ 56#?@n{}}`>@K))gKM8`-#I!{njy{!z@[^L-?+=`;wn2xd' |*-վxz`PgCpMژӭhKLR9qd&89'}lw1NA'ċiT=^uXėi{ն{R(FTHAXPc5«MlA?K/@р] E* XibD]\f=sf99OL g3=.yw<#(јZLYmN.G@SU3UIʫ>(A ~ @`M!BL0SQ!e;Q?,6oSWW<3t~Pr"#,>_ ҽΈty%4E6?LQw=p~G@ހJAe`o@&(=LDJQB(:;J밤&&~a|baqqb: mxGf3VK],k]n)VہdEgG)PvHSey}1Is7>d=-k]Ҭ*,z.F HB.wt;!$VVևD|YR(ʮ}I53uu(KմISƮ'cy '*[\HCHiۓPzWgd6|P<)ͯi3N{vH-(,lj))MH,TW7{Vqy+;Z9bH=H aP?TPRr3G1Gcz4I<g+Y6b8 tA3Y]YH0{mͱMG'3r?$*/\zb1X* HH :(\|<:l`(<ל`dLvMnIq`HkWHcgB+<U~N55>HW.w%O"rY,E &NF|ߊRpNk~v//mX7\9jI@ :t$_n\.pa.=%Au4tjga׳yP64-( ?X4TQQT@"i ("jUt҈szjr?hN~4Baܽ^R'@mRw&d.`=X{;#a+ycSj?˲|Z4Pʡc&-p=^c:F*}5´5~A |NSKfIƉ:I1Lb05)MyS^Πйfo[-%b_?2|oL]Q4@XxR|F}6P~m]P=I={-L{]YzC~qP ݥ7+#]2{:0y*[u2]CS3tj9Q1m-6pS -m᪋^`዇7LY wkw99˒MݮD /krn\l gYzפQt:# [.ohs k!cVeGZ@eFxlxN]M.D%KyhfJЀccw@Zvj3pn>榤:*C IP1m\6 -3bӜS}&BtPt't'vh8}ŷ?] Sbq)*eKҁ{{`.@OcB`֯J/.?&Lo>LKMuf3pʱS6|–3M-lO U- j8}[On<;zlFԖP#|#p<mnJ|S繥M!zAw ׄ6'egI[;ӑv(^^!q:zۖCŽzG-?*U^Z^޿ݺvL@/P@ kѫw:=̗/'_LH v= s-ֵb!nRq)Do!ZfPy*l4ruhEٲ|)PrMi8_ūգh,5uj㫄WS,0U\^Z%yeuPf IUtu4ռZhvVZ(au_j^E]G©oQCA*UQroLP0 CtH (y*U+!+!iֿ''}OH<>G:|t6#Tq˪%ګg 漪Ue6vݢ':rSmr]e8(\Ug^W r&ie[M~i{ͼ>DCRe=F.2 (h*1ġAK%1M ]?ϳ1lCTh>yr3vOUBnv\6WAT 3oe5ɥOI/>6h4DPyr7f@#u: Ȅ:.Zter!s^rX[wT:&[ uJ:\f^ x/Ş)e9,|&/qM&)aRqk?5d'D\t bFcvww<(9p)ǮsIō{ivp0ӞöƂ kt -ue7% E2Px"L>+O58[*qX)ޓ;ġRX,-CW s+DZ%Qʼn>Kg2co7BI떟|P@6N`9sƯ 0Иa)/Lj&-a7A_EE߆|T=w^j̰a[wtEԦMoGvz_AVЪ~5{wRNI750)9559)Ӵ8ͬllmLklZj};5`k5z W =zj,=,!b 177'G^x 3v5&!4 i&T/fK-!lY |~^"ÖTr(—]6w…]I<LUqh f8=PX`A ns=-_Ç&]zեO q.\2E/ Q-Jp816/U./N h;N{xդŶCQ7OZ `Ɉ^4')`ϱvYsAoiQR/}gÝ ƒ7TC+K+jzMf"J+YZ:4^~S@^n>y35V_ =ufj ʪQWиyTo a XiEVりJ[Vq_XV}nVmZh]ť"DDe By40 93w֟?2s3 inSv;6.+HKyPaš#,TG nXsS*ˑ|5L\R2l<*'_9IPI@_qI=>777+}4mO*oqSԹ<|KP@,ql;\[0SZJ>mmF h?_q SzΩ×P~`0ʅ+)qy,4,oc4,aq(Q %=c a]O\)-?:>M<靓K#9a5_оy3GvmI hPӳǮY}ڿmSuX[ϗ%w?:Ww?)oQWPq:uoK Gd@&La9Ⳛ~(3Nw2V@nU 9m('& `d8pW2٤x-_l{C9u'udW bӉx5,o)Ї3#}{5ewک%۽ys d97 eIu{`WUF8`ꗟRI"6PMy& <*"+'n&L8^'U6e8ո󠨱|oצ{ҝjP{ ",&_eYYr;/ݐ穀}l?/q#:MYhIޛ#C:4/UJKY\sCJV,y&LRH<ʼ9%/) %Lnizuwϙ hy<xMψ8XūʴPfons&Ng1 q H>WP @EyTu/4XSbՂ$4;V8ݭFUz,`P(*/zy؇^UB _Ipw7KwvsQmZpܝlDc*RD|FF`X$д.Hڡ`E @YQVGM)/P|Vfj$mtI)+k|_[ ~Y2^?g:7b %a0r =޴2^PѼCve=o8:G3Ay$>>](K@ }6@oj x+Ɨ#yHk<NtjWJ*Y^VF#M&~7{rhPaf5BMGok|/GJԾkg孼6 +~=,Y-aR>격0a![=ԕY3?:f*aG4i?X aœnT4|]r18x§&5%H#~p}T r<˅D<54{j\dYf@}5bT@KcF4"'j[80qO' N* i6O,`"LΫ)ܑGLс;(j479 hJO}Q)^&hΥrX,l=dSt7 j&B!V{&<}m C.R "JޠP*,;""Q:RbsT&mvk&F-IY] [ `+ʻ s.CR:XE'D*$Rv))9lEAz-pDo;KޝDQq+ Iȡqi jiZiieަRy(xqG( .{".+/wvfvgf  ȑIlý?9QXAmPTt7*+`<4:S*%N /ܶc_1TiR(-;H.l[Peen8WYhqBhSQj 3+Uۻx9Pj%l;_rQ=@E X[? q JrfNy @}T"TwrD Sk^֍G|sl:/@/h#ļ (=wxnTg/'M'H~u2#|djA uH?j8H C߮@ ߮@ 9.%:$:$:$:$:$:$:lCJщ|~L)ݿ˯naH휷eevxDVg E{c*U+ׯk0I*ـU=dI%~͎ -/TyV^P^<^ķ۩t3[CCP 8Swm0mAǵ~glf[0x@7\rnOY>@b' $u#ǥzQuu9?WV6}#qe``@ɷ6Rߔ"P{p8&g\Anߗ!?o1 NN`L:Aͭ\#7i\W3]^D#uYOZt7lAh֯]gcSګZXHڨq>( a'\@cқǁYf*>^,o>NgecxVdi=,M䥒?+*~`A_;qIJqù}n'Cۦ\5sqKl`+:1^ O{fYee >ͤ I7rӁ;4/X8-˯0۫*F)K֖n~P ?Pt8yԔib*@mdIw '#Я\s{g=:#Ax;foZ:o7o)=x7rr'W"q'x;eA7_V*)V-523^S71(wlRԿۡes4F^Mjt^"&;ycKi9WyC|c&=2@buhTT`bl}Cf-e0O&ER h@qab%thH3KRbRp9Oƅ=5jݵ(畯鯧Wy*/i61,}ND{M"Vtb.vkEG~Ԯ8m :/(CzJd8d/8M1gYU'G<+]Α~*:l% /b9Hjɞ*S]4hn3߫Bapb^Y֝]Zxzb>IDATئO^w?2䱋/ RDgl5rNdmZN _-ic ,Q锠-CB8v.`# :4N e@莡FCq믭^ǀnFL #x.>8:6cHHHHHHHHHHrз.v0IՉfKK)j5hמHpȷ2cZ.V؎h%X\ԣg^9o2jϊϾY3w`ִx(wէk9\,1dʼC[rT޺@e;)Qq@+Jw.Kl8eﮍ=9Jc_n]‡;,V WgܲE0ԡ(i{5J4:~:Z{%ǵ֖:cduHglNo 7vԘW>?xmKg~}lXҌG .DO=ߝ8ڄ`t\8V%[޶ڧn,Ϳy*QNŴVo53Xkb4 xɟB'\~z Ɖq5a9xΰΔ%kduQ|;3c#-?t@yN'|wΡ]SM~%O1k?icćzѼXtW⿗B?-,Tu3tNFVRT| /uɲcCWs"m(DMoe0 SpEZ5NIh6< Օ 1&,UBV;tE:e pB:ӝG>^>}/06C߁ n kfc])+Bi.Kʸy}ߚȋ `1n?gwsIy (r7Ϩ1@3.kω2iLDLlQ3(jGW(m{D?Y.|-Ux{kqmk8Re3:twSJ.ZsW  iT^TqOP=tت|9>d ˤjJT'l=s w1NpfȜe oFy~cB&}wsC{>>{ fܚ@خs* ߴ>o8!@;zLt~O-M\Q*ɣK`}ʽ{v<ަvF?@\u-#CB q+!lp'ާo.p*PK+T;rTPJ+X$*`S#c*:j4SJ#yTr\ 9:)h&}:0 Z͢xݜ5<:}4:=ݎ BV=ݔcnƮ*?,,Y8wQVrU-JZ~DͲkİh͢C\ͫLl8گ[Y-F°1+wPwVJUB\'4p_PUK67ԝ,/PY-_ QՏTu0x|FVG{v@: AdHHuԠ/WCrZ = aHÊ=S#>U5:'F%rjU6GL][ Nwh~~soϠs  (Ca[~lO uIruYTwc[b7L=u[EC%*>piïύ@C|#ʮwrwwtފ$+Ez*C _GXAqks/]c rc\1ޙ5qa,$@"IdW@₊RKk]Z\E*(ZmuXኊZ-ZZ *UE *b bX.rޙ̜'S𯫗r]ڻ:((\.v ak^+n8w!boWwk ԎgYF}C%~.|̀޽AǦAaډ;.M?^-(vMvvQ}4);}|B@; }*dյC?yq@cIOC}cr ?g]ݩP8HP׎lc}Qq(u y;'- Kcnk>Wlj:{~C4ն7OOmX,B FDߔO`vN:߮nd3:cH1pNp/53×k<)ԁDI,rW;ur7C/m|3؅RAGܪUW~2Y@9%HkF{c>;8Ǝ?fAo/^VqjA+|>[kǓqkG7Z$6ؼ޸.o0ۙ׾xLʭT\.th&8p\<+jVmx)`ӆwhEA[SJu6S=0pay׎,WkmEĕ;_#W\2 x,WPD8޼<ٛ]3?I"Td鶮4Wؤ۶um%H`hiF楥Sb\P#L=y W,3 ӧ5HY5Ɋ'(˘-77j/T2$~|)Nc̅K͖/7EN|F6RB A=Z?B%aԇ 2? !yH {yN_=nۥFwֱeic^7~sugeOj]1yqO2uƌiӂyVAB쾨_{ qS?R^@b]XIv=t%[v0ЯߠAN8e~1/څcGo{'7RQs>ڛj 3.kFM$SkO,Պ|Vݤ\Ե.(1+Fa㚲S?_\p :1bIcMS:ࣔM~JѮ"kՉ?W\iu*h.Rv]f{p"udRGQ$Y4%{cjT@e7O]{K#֘G)džݥ}p[T|VUTe4\]RUl[Lda.,ը=A; (5OKQփGO?`Tl+Cdk04;/P[{{ KbS$NCDՑ{H^FDR}Ia1W,1eTD*LYJU G[IFT-L3zzttEkoXc8Ņ @|DR3X'hiaJks8:F(0x+TvY04I$H0R"?A|O%a v|OMmB!6*d&JSAY@h<$؇!>$ !yH C}HC@`<$؇/%DFQ R}HC@`<$؇!>H2m IENDB`(   H6"Wagner@cs.ucr.eduN:http://www.cs.ucr.edu/~wagnerH4http://www.cs.ucr.edu/cs12/ 00DTimes New Roman0F '; DArialNew Roman0F '; " DWingdingsRoman0F '; 0DComicSansMSman0F ';  ` .  @n?" dd@  @@``    <P'        /       !"$%&'()?b$scCtB5۰b$#Hj֨+f\@-PB5۰b$L3@zT`۰c $ n3f3@8d sʚ;+4ʚ;g4]d]d@t@0pp <4!d!d,gX<4dddd,gXg4\d\d4@@8p@ pp>___PPT9 h___PPT2001D<4X?- 2003 WL Truppel ZCS 12: Intro. Computer Science II " Lecture 9O =qReview of Operator OverloadingWagner Truppel Lecturer, Dept. of Computer Science & Engineering UC Riverside wagner@cs.ucr.edu http://www.cs.ucr.edu/~wagner http://www.cs.ucr.edu/cs12O  O`a~ RemindersRRead on your own Ch. 9 (String class) Ch. 11 (Namespaces Ch. 12 (I/O Stream classes) Home programming project 2 is already out and is due on Mar 3. That s 2 full weeks!6ETETOperator Overloading^Overloading: having two or more functions (or operators) with the same name but with different signatures. What s the signature of a function or operator? It s made of the function s name plus the number and types of its arguments. int f(int a, char b); int f(int a); int f(); Note that int f() and char f() are not overloaded versions of the same function. The return type is not part of the signature. The compiler will complain!RZ-ZZ T   8 - >3t Operator OverloadingThe most commonly overloaded functions in a class are its constructors and some operators. But you may overload other functions too! Why is it useful to overload operators ? Because we can then use our classes in a more natural fashion. Example: Money price(50); // a $50 item Money tax = 0.08 * price; // 8% tax Money total = price + tax; // amount due instead of having to manipulate the class member variables every time.ZHZlZHZ:   WHlH3 ways to overload operatorsNot as member functions of the class Somewhat inefficient because they won t have access to the class private member variables and, so, must use the accessor and mutator methods. Have as many arguments as required by their nature (unary, binary, etc) As member functions of the class Have access to private member variables Have one less argument than required by their nature Have an implicit argument, the object on which they re being invoked. As friends of the class (more later) %ZZ!ZZ%ZZ"!-n&, ;Not as class membersclass Money { private: int dollars; int cents; public: Money(); Money(int dollarAmt); Money(int dollarAmt, int centsAmt); int getDollars(); int getCents(); }; const Money operator -(const Money& amt) { return Money(-amt.getDollars(), -amt.getCents()); }Z ZZZeZdZ e  C     >   As class members class Money { private: int dollars; int cents; public: Money(); Money(int dollarAmt); Money(int dollarAmt, int centsAmt); int getDollars(); int getCents(); const Money operator -() const; }; const Money Money::operator -() const { return Money(-dollars, -cents); } Z ZZZZNZ e          %     r!Friend fs and opsIs this legal? Money bill(10); Money cost = bill + 2; Well& here s what the compiler does: Is there an overloaded version of + taking one argument of type Money and another of type int? If so, no problem Is there a constructor taking a single int argument? If so, no problem If none of those happened, then the compiler complains How about this? Money cost = 2 + bill;Z'Z%ZZZZ'%  ,;z"Friend fs and opsHow about this? Money cost = 2 + bill; It may or may not be legal& If + is overloaded outside the class, it s legal; if + is overloaded as a member op, it s not legal That s because if + is overloaded as a member op, then its first argument is implicitly an object of the class. Here, though, 2 is not an object of class Money, so the compiler complains. Confusing, huh?RLF#Friend fs and opsJSo, it pays to have ops be overloaded outside the class. But, then, they don t have access to the private member variables, which is inefficient. What s the fix? Overload operators as friends of the class! Friend functions: not member functions but they do have access to the private member variables of the class. Friends are always public ! Some compilers get confused by friends Who ever said that C++ is friendly ? :)l GY$ As friends%class Money { private: int dollars; int cents; public: Money(); Money(int dollarAmt); Money(int dollarAmt, int centsAmt); int getDollars(); int getCents(); friend const Money operator -(const Money& amt); }; const Money operator -(const Money& amt) { return Money(-amt.dollars, -amt.cents); }&Z ZZZZYZ e              9     % References2; // the value 2 int x; // the variable named x int* p = &x; // p is a pointer to x // ( the address of x ) int& y = x; // just another name for x y = 2; // sets x to 2 ! *p = 2; // does the same& y is not a pointer to x& y is a reference to x.0  D Z >K&References and functionsReferences are most useful in the context of functions int f(int x) // dumb function& { return x; } What s f(z)? It s the value of z& int& g(int& x) // same dumb function? { return x; } What s g(z)? It s the variable z.8Z-Z#Z5Z"Z8-4Z8FL'References and functionsSince f(z) is the value of z, it does not make sense to try, say, f(z) = 3; However, since g(z) is the variable z, it s ok to write g(z) = 3; The result is setting the value of z to 3. How about this? int& h(int x) // another dumb function { return x; }<Z6Z5,*(References and functionsBottom line is: there are important differences between the  value of an object, the  name of an object, and the  address of an object. Date getDate(); // returns the actual obj Date& getDate(); // returns a reference Date* getDate(); // returns a pointer You need to think carefully before you decide what the input params should be and also what the return result should be}Z}b!W4) Overloading << & >>@In the expression cout << x; the << is a binary operator; its arguments are cout and x. It takes cout and x, appends x to cout, then returns a reference to cout, so that we can chain more invocations of <<: (((cout << x) <<  ,  ) << y) We don t need the () s, but that s what s happeningZZ4Z ) $ /4tL2**!Overloading << & >>So, if we want to overload <<, we cannot do it inside the class because overloaded member operations assume the first argument to be the object we re invoking the operator on. << must be overloaded outside the class. For efficiency reasons, make it a friend of the class. But, wait& why do we want to overload << for a given class to begin with?&ZZ+"Overloading << & >>BBut, wait& why do we want to overload << for a given class to begin with? So that we can output an object s contents more easily, simply by saying cout << theObject; Example: suppose we want to print the Money object Money(3, 17) as $3.17. We can overload << so that cout << Money(3, 17); does just that. Read the details in the book& the rest is similar to what we ve seen already. Similar comments apply to >>.BZg> i,# Overloading =\What really happens when you write Money m1(10, 0); Money m2 = m1; = is the assignment operator. It s a binary operator. If you don t overload it, the compiler gives you a default version, which copies the values of all the variables from one object to the other. That s fine if none of your objects have member variables of pointer type. If your class uses pointers as member variables, you should overload =. More on this later.#Z ZlZ#  ` -$(Overloading prefix and postfix operatorsExample: ++x and x++ They re both unary operators, and they have the same signature. How can you overload them both? You need to pass a dummy variable of type int to the postfix version (How clunky is that ??) Money& operator ++(); // prefix version Money operator ++(int unused); // postfix version Note: no const ! Note different return types !\ZZZ/ZZ.,iK.%!Back to Dynamic Memory AllocationsRecall that we talked about pointer variables, and their connection with dynamically allocated arrays and structs Recall that if you have a pointer to a structure, you can access the structs member variables in one of two ways: struct Point { int x; int y; }; Point *p = new Point; (*p).x = 2; (*p).y = 3; // set (x,y) to (2,3) p->x = 2; p->y = 3; // set (x,y) to (2,3) nZZZ6 $"bj E%u0&!Back to Dynamic Memory AllocationYou can do the same with a class: Money *mptr = new Money(4, 50); cout << mptr->getDollars(); // prints 4 Wait& we ve never seen new used with classes before. What s the difference between Money(5, 40) and new Money(5, 40) ? The difference is that the first one returns a reference to the object, whereas the second returns a pointer to it. Either way, objects are always allocated in the heap.Z%ZZ9   b) d2'this|Suppose you re writing a member function, say, g(), for a class, say, Money. How s g invoked? Money m(4, 50); m.g(); // this invokes g() Now& how do you refer to the object m inside g() since, at the time that you re writing g(), you don t know about m ? You use this: a pointer to the object on which the function or operation is invoked. this is a member variable defined for every object; it s a pointer to the object and cannot be changed.X^Z,Z5Z/ +$( ?7 4(thisWhy would anyone want to use such a creature? Well, consider this& (no pun intended) You re writing a member function that does something to the calling object and, in the end, you want to return the calling object itself. How would you do it if you did not have some way of referring to it? Case in point: overloading the assignment operatorZZZ5) Overloading =If you don t do it yourself, the compiler creates a default version for you Why would you want or need to overload = ? The default version just copies all the member variables from one object to another That s fine if your member variables aren t pointers But&  Z 6* Overloading =zThe default version just copies all the member variables from one object to another That s fine if your member variables aren t pointers But if you have pointers, you get more than one object pointing to the same area of memory. The pointers get copied, but not what they point to ! This is called a shallow copy.X>Z<7+ Overloading =UOften times, what you want is a deep copy. In a deep copy, everything gets copied from one object to another. The way to get a deep copy is to overload the assignment operator. You can only overload the assignment operator as a member operator. It should return a reference to the object on the LHS of =. Use this for that (another pun).VZ   v'L8, Overloading =Correct way of overloading =: Class& Class::operator = (const Class& rhs) { if (this != &rhs) { // copy rhs member variables into  this // according to your needs (shallow, deep, // or a mixture of both) } return *this; // note the dereferencing of  this } The test prevents problems when you try assignment an object to itself. The book has more examples.MZZnZ5ZZdZ1n5g  >F 9-Copy Constructor\Typically, if you need to overload =, you also need a copy constructor. It s a constructor like any other, except that it takes only one argument, an object of its own class: Foo(const Foo& fooObj) Note: call-by-constant-reference Should create a complete and independent (deep) copy of its argument.ZZhZ#j h>j:.Copy ConstructorCan be used like any other constructor. But is also invoked automatically in certain occasions: When a function returns a value of the class type : Foo f() When a function takes a class type parameter  by value : f(Foo fooObj) You get one if you don t define one yourself, just like with the = operator. Default performs a shallow copy.X`ZZoZ`A-,@ r;/ DestructorsRecall that dynamically allocated variables need to be disposed of properly. If your class stores dynamically allocated variables (dynamic arrays, other objects, variables created with new), you need to clean up.<0 DestructorsIf you create a local variable of a class type (a local object) then, when that block of code ends, the object  goes out of scope. The system automatically invokes a certain member function of the class before the object goes out of scope, to give you a chance to clean up. That member function is called the class destructor. &IZ6=1 DestructorsThey have the same name as the class, but preceded by a tilde. They have no arguments. They have no return type, not even void. There can be only one. You cannot overload it. ~Foo() // destructor for class Foo "ZZ6>2 The Big ThreeTypically, if your class requires one of these: Overloaded = Copy constructor Destructor You require them all so, if you define one, you should define all three. The compiler will generate default versions of them for you, but those default versions may not do the right thing. R0)Ju0(Y/PsxHH@Rg(HH(dh   ` www3ff` 3fff` ___>?" dF@,?n<d@uA @ " d`  n?" dd@   @@``PR   @ ` `P0p>> - 2003 WL Truppel ZCS 12: Intro. Computer Science II " Lecture 9 X( = 2  NU0?"! :    NT0gֳgֳ ?"`  T Click to edit Master title style! !<  H V0gֳgֳ ?"  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  NV0gֳgֳ ?"`p  Z*    N`X0gֳgֳ ?"`   \*     NY0gֳgֳ ?"`@  \*   N  6n޽h? ? www3ff $Blank Presentation1  - 2003 WL Truppel ZCS 12: Intro. Computer Science II " Lecture 9 +#  ( |  B  N1?"442  NZ0?"! :    NY0gֳgֳ ?"` D T Click to edit Master title style! !  H[0gֳgֳ ?"P  D W#Click to edit Master subtitle style$ $  N\0gֳgֳ ?"`p D Z*    N`^0gֳgֳ ?"`  D \*     Np*gֳgֳ ?"`@ D \*   N  6n޽h? ?  www3ff  `<f(  < < 0P "P   ה R*   < 01 "   ה T*  r < c $ ?"  ה$ < 01 " @ ה RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S < 61 "`P  ה R*   < 61 "`  ה T*  H < 0޽h ? ̙33> D( @ $  D D 0 "P   ה ACS 12 Lecture 9  D 0 "   ה T*   D 6 "`P  ה ACS 12 Lecture 9  D 60 "`  ה T*  H D 0޽h ? ̙33  @ L(  P   c $1 "0P D   c $01 "P  D B  s *޽h ? 3ff   p( 00// l  C *`  D l  C * D H  0޽h ? www3ff   ( 00// l  C #`  D l  C `#0` D H  0޽h ? www3ff   (   l  C ~C`  D l  C 0C D H  0޽h ? www3ff   ( 00// l  C 0C`  D l  C ЁC`` D H  0޽h ? www3ff   $(  r  S pC`  D r  S C D H  0޽h ? www3ff   $( $ӌ r  S C`  D r  S C D H  0޽h ? www3ff    ( 00// l  C ЄC`  D l  C ,0 D H  0޽h ? www3ff  ! (  l  C )`  D l  C `) D H  0޽h ? www3ff  " $( | r  S  -`  D r  S , D H  0޽h ? www3ff  # $(  r  S $`  D r  S $ D H  0޽h ? www3ff  $ ( 0E l  C r]`  D l  C q] D H  0޽h ? www3ff  %  D( 00// l  C t]`  D   C s]<$  D H  0޽h ? www3ff  & 0( | l  C x]`  D l  C w]0  D   Hx]gֳgֳ ?0 ,$D  RWhat s h(z)? It s the variable x, not the variable z. But x is local and disappears after the function exits, so& trouble!B{ZVH  0޽h ? www3ff  ' @$(  r  S u]`  D r  S Pq] D H  0޽h ? www3ff  ( P( 6j l  C `>^`  D l  C >^ D H  0޽h ? www3ff  ) `$(  r  S D^`  D r  S `D^ D H  0޽h ? www3ff  * p$( p0_ r  S @^`  D r  S A^ D H  0޽h ? www3ff  + ( y  l  C F^p  D l  C  E^` D H  0޽h ? www3ff  , (  l  C >^`  D l  C B^ D H  0޽h ? www3ff  - 0( | l  C t1`  D l  C ~1@ D H  0޽h ? www3ff  . $( 00// r  S p`  D r  S 0W`p D H  0޽h ? www3ff  0 ( 00// l  C I`  D l  C F D H  0޽h ? www3ff  2 $(  r  S M`  D r  S `L D H  0޽h ? www3ff(  4 P(  r  S ``  D r  S ઢ D $  C Afig1.pdf 00128204Earth B9B583FF:4H  0޽h ? www3ff^  5 (  r  S `F`  D $  C Afig2.pdf 00128204Earth B9B583FF:    TJgֳgֳ ?@  D H  0޽h ? www3ff^  6 ( 00// r  S @N`  D   Tgֳgֳ ?@  D $  C Afig3.pdf 00128204Earth B9B583FF:  H  0޽h ? www3ff  7   ( \Ư@   l   C ]`  D l   C 0 D H   0޽h ? www3ff  8 @(( 00// (l ( C Y`  D l ( C [ D H ( 0޽h ? www3ff  9 P,$( 00// ,r , S  `  D r , S  D H , 0޽h ? www3ff  : `0( 00// 0l 0 C 0`  D l 0 C  D H 0 0޽h ? www3ff  ; p4$( 1111 4r 4 S ``  D r 4 S e D H 4 0޽h ? www3ff  < 8$( 00// 8r 8 S _`  D r 8 S  D H 8 0޽h ? www3ff  = <( 00// <l < C Pa`  D l < C  D H < 0޽h ? www3ff tlPH(  HR H 3 <   4r H # 1< @  4  H H 0޽h ? ̙33dxp^RЀ3ÿ lHbP  @AL G@;b `B&V\Ȥ0ļ00R4D2>DocumentSummaryInformation8Current User. Oh+'0X3 px  'GeneraleneeneWagner Truppelo302Microsoft PowerPointrP@S@@S@@S@oOLG22PICT2* HH HH  ]+xnnnnnnnnnnnnnnnnqgkgPiyOfgkgPiyOfnf,.9Nne,MnC"-nY4",Ingdn " 0!V " 0!Vna=n_9n]7nH%nT QnU)b0ޮޮׯy J Үwׯۻ)b0ޮޮׯy J Үwׯn)a*nncnn`KZnn`UjnnXZjUann`KZnnX]njUanfUgn]K_ni>4_ngRnb GnY]fM]n hNRjnnX^[Smm[K[nj3?dnn]K_nniUeO^n[)bUel}eG#U}F|eUT$+('4x F|.^)bUel}eG#U}F|eUT$+('4x F|.^n)a*nn\%nC,nKBna/^6nC,nnM%n6bnj5X,nQ%nN$nFn^ cn i4]Dj5nW(nX( 1 ?;} ?Řn28 }P,0$"5Rom-)}P)޻( 1 ?;} ?Řn28 }P,0$"5Rom-)}P)n(aXgi:Ul n9[^6gi:UB^/ nn 6n6_n^6U& >c>Q;n knS6OEnE1nYn nn0c &&n nQ, nBQnknS6W5nO bN S}N 912 L#t$ `45aBL bN S}N 912 L#t$ `45aBLn a*nW f`"E Yna$Dn^6`"E YnN _n !hnK;OEn[mnn82nln)i ELn nnL*V nBQn!hnK;WnF b3h}>}/u?$#;GG92K} b3h}>}/u?$#;GG92K}n a*nnlNT 8nM-nn^6nT 8nn^nC8n6 MnOEn/j2]nn Vnfin nnd b^=n6 MnW>n!?h$3"@i$3; 0BZnemnemnmdncknndmniinfmnkenmdn4~Y$3[$3< -Qmnn1~z|>=fnKNnd~ pyOfg۷g syOfg۷g?9fnY4",In97nS,^O,bnj~!V0'Žշ!V0'Žշ@GmnH%nn@T=\n~, JDZ0'ׯΕݯ۰1 JDZ0'ׯΕݯ۰A%]ngRnb GXYnniUbnnVLcnnaUeNgn]K_njROcngMY@TbUjjUd_Kbn^Ld^Xn~U>TZN t,0'F|(†B + U>TZN t,0'F|(†B +CGnQ%nN$'en>Sm"Ln2Nnj 5n[Tnc T:[]ZnH n~E>00';tj0'}Pj0†0?J>00';tj0'}Pj0†0?D1hn?Bn>jS>nnH;i m2.Tln6C(2qKY,t0':~NkF|†pye.*q>C(2qKY,t0':~NkF|†pye.E(anE1n>YnZ$en;9E.g2annn!hnK;(@Z/n'ln/T:[]7n`4jnm n~C[$NX^8Mt0'Z04ߍff†yF|XC[$NX^8Mt0'Z04ߍff†yF|XG!#WnC';"enf&nn[(Z!m2bnnn@'J^ `=,nJ,J T:[]7n`4n5& n~u?]3 (t0'}H ;Jk†y:a8 u?]3 (t0'}H ;Jk†y:a8H#%Tnj2]n(Rn38Tn2bnnnn6 MnK nj .T:[]7n`4n_* n~&9  &9I%&Xncknmenmdnmfnfln9Ammn:~v(! v(!K(*\n3An7~ Ϋ ЫK)-anlK9;Tn%~ &L+3hnn%~5 >N.Emnnnnnnnnnnn~zV?Vnnnnnnnnnnnnnnnn~XBCgnnnnnnnnnnnnn@~?LYDNnnnn"~ZF`nn%~ 0[HMlnn"~]L^nns~ ^NPknnnnnnnnn~u^O]nnnnnnnnnnnnnnnnn܁~ `RSlnnnnnnnnnnnnnnnnnnnnnnnnn~q}aT`nnnnnnnnnnnnnnnnnH~bVlnnnn"~wcYcnn%~#e\]mnn"~f^fnnF~.f_amnnnnn~hbjnnnnnnnnnnnn~9Miehnnnnnnnnnnnnnnnnnnnnnnnn~jglnnnnnnnnnnnnnnnnn4~arkiknnn$~ "lkmnn~mnn ~7MoqnnM~psnnnnnnnj~tqurnnnnnnnnnnz~6rwvnnnnnnnnnnnm~  syqnn nnnnnnnnn"~i{t{unn$~1u}|nn"~ āwӀsnn"~k ~xӂynn"~!:yӄnn"~ˁ!ҁz҇snn"~{"{҈{nn"~0"L|Ҋnn#~#}ьqnnn#~#~юznnn#~X$pёnnn#~$4ѓonn ~́%ՁЕunn4~%Зnnn~M&hИnnnnnnnnnnnn~ &3 Кonnnnnnnnnn nnnnnnnn~'Ϝvnnnnnnnnnnnnn4~'Ϟnnn(~Yˀ'sϟnn~ (CϢn~(Σsn~)Υna~y)Φnnnnnnnnń~G *f Ψnnnnnnnnnnnnnnn nnnnnnnnn~ *= Ωnnnnnnnnnnnnn nnnnnnnnnnnnnnӁ~*ͫtnnnnnnnnnnnnnnnnnnnnnn7~+ͭnnn(~+ͮnn~W+tͯn~,,Qͱn~,1Ͳon~؄,߄̴xn~-̴n~-̶n~b-~̷n~?.b̸n~.D̹n~.˺pn~ԅ.܅˻znv~/˼nnnnnnnnnnn~/˽nnnnnnnnnnnnnnnnnnnnn~| / ˾nnnnnnnnnnnnn nnnnnnnnnnnnnn~_/}˿nnnnnnnnnnnnnnnnn+~B0fnn(~'0Pnn~0=n~0on~0wn~͆0׆~n~1Ćn~1n~1n~1n~s1n~c1n~S1tn~F2kn~<2cn~32[nׁ~)22222222Snnnnnnnnnnnnnnn~ 222222222L n nnnnnnnnnnnnnnnnnnnnnnnҁ~2222Dnnnnnnnnnnnnnnnn@~222?nnn~ 2=ņn~ 2:Ɔn~27Ɇn~25Ɇn~2ˆn ՜.+,D՜.+,    i'On-screen Showcn-s:"r 'Times New RomanArial Wingdings ComicSansMSBlank PresentationReview of Operator Overloading RemindersOperator OverloadingOperator Overloading3 ways to overload operatorsNot as class membersAs class membersFriend fs and opsFriend fs and opsFriend fs and ops As friends ReferencesReferences and functionsReferences and functionsReferences and functionsOverloading << & >>Overloading << & >>Overloading << & >>Overloading =)Overloading prefix and postfix operators"Back to Dynamic Memory Allocation"Back to Dynamic Memory AllocationthisthisOverloading =Overloading =Overloading =Overloading =Copy ConstructorCopy Constructor Destructors Destructors DestructorsThe Big Three  Fonts UsedDesign Template Slide Titles" 8@ _PID_HLINKS'AHmailto:Wagner@cs.ucr.eduhttp://www.cs.ucr.edu/~wagnerhttp://www.cs.ucr.edu/cs12&_CTWagner Truppel