Muïc luïc 1

MUÏC LUÏC
PHAÀN I. NGOÂN NGÖÕ LAÄP TRÌNH C.........................13
CHÖÔNG 1.TOÅNG QUAN VEÀ NGOÂN NGÖÕ C.............13
1.1.Nguoàn goác cuûa ngoân ngöõ C............................................13
1.2.C íaø ngoân ngöõ baäc trung...................................................13
1.3.C íaø ngoân ngöõ coù caáu truùc............................................15
1.4.Caáu truùc cuûa moät chöông trình C.....................................16
1.5.Chöông trình ñaàu tíeân..........................................................18
CHÖÔNG 2.BIEÅU THÖÙC (EPRE!!ION"......................1#
1.6.Kíeáu döõ ííeäu cô sôû (Basíc Data Type)................................19
1.7.Boá ngöõ kíeáu döõ ííeäu cô sôû (Modífyíng the Basíc Type). .19
1.8.Nònh danh (Identífíer)..............................................................20
1.9.Bíeán (Varíabíe).......................................................................21
1.9.1.Khôûi gaùn giaù trị cho biến.....................................................21
1.9.2.Vò trí khai baùo bieán...............................................................22
1.9..!ieán cuïc bo" #$ocal Variable %................................................22
1.9.&.!ieán toa'n cuïc #(lobal Variable%............................................2
1.10.Haèng (Constant)...................................................................24
1.11.Toaùn töû (Operator).............................................................26
1.11.1.)oaùn t*û gaùn.......................................................................2+
1.11.2.)oaùn t*û ,oá hoïc..................................................................2-
1.11..)oaùn t*û t*ï .o"ng ta/ng0giaû1...........................................2-
1.11.&.)oaùn t*û 2uan he" 3a' logic.................................................29
1.11.4.)oaùn t*û bit...........................................................................29
1.11.+.)oaùn t*û 5.............................................................................6
1.11.7.)oaùn t*û 8 3a' toaùn t*û 9...................................................1
1.11.-.)oaùn t*û ,i:eo;......................................................................2
1.11.9.)oaùn t*û <aáu =ha>? #@%........................................................2
1.11.16.)oaùn t*û . 3a' AB.................................................................2
1.11.11.)oaùn t*û #% 3a' CD................................................................
1.11.12.Eo" *u tieFn cuûa taát caû caùc =heù= toaùn......................
1.12.Bíeáu thöùc (Expressíon).......................................................33
1.12.1.)h*ù t*ï tính toaùn..................................................................&
1.12.2.Ghu?e>n .o>i kie>u trong bie>u th*ùc....................................&
1.12..HI= kie>u................................................................................4
1.12.&.Khoaûng troáng 3a' <aáu ngoaJc .ôn....................................4
1.12.4.Vieát nhanh cuûa =heù= toaùn gaùn......................................+
1.13.Vaøo ra döõ ííeäu cô baûn.....................................................36
1.1.1.Ka'1 in giaù trò ra 1a'n hLnh................................................+
2 MgoFn ng*N la"= trLnh G0GOO
1.1.2.Ka'1 nha"= <*N lie"u t*' ba'n =hí1....................................&1
1.14.Caâu hoûí traéc nghíeäm vaø baøí taäp................................46
1.1&.1.GaFu hoûi traPc nghie"1........................................................&+
1.1&.2.!a'i ta"=.................................................................................&7
CHÖÔNG 3.CAÂU LEÄNH (!TATE$ENT"........................%#
1.15.Khoáí íeänh............................................................................49
1.16.Bíeáu thöùc............................................................................49
1.17.True vaø Faíse trong C...........................................................50
1.18.Caâu íeänh íöïa choïn............................................................50
1.1-.1.GaFu le"nh i;...........................................................................46
1.1-.2.Gaùc le"nh i; loQng nhau.........................................................41
1.1-..Gaùc le"nh i;Ael,eAi; lieFn tuïc.................................................42
1.1-.&.)oaùn t*û 5.............................................................................4
1.1-.4.$e"nh ,Ritch...........................................................................4
1.1-.+.$e"nh ,Ritch loQng nhau.........................................................47
1.19.Leänh íaëp.............................................................................57
1.19.1.$e"nh laJ= ;or.........................................................................47
1.19.2.!ieán .o>i cuûa 3o'ng laJ= ;or...............................................49
1.19..Vo'ng laJ= Rhile.....................................................................+6
1.19.&.Vo'ng laJ= <oARihle................................................................+1
1.20.Leänh nhaûy..........................................................................63
1.26.1.$e"nh nhaû? return.................................................................+
1.26.2.$e"nh nhaû? goto....................................................................+
1.26..$e"nh break............................................................................+4
1.26.&.$e"nh countinue......................................................................+4
1.21.Caâu hoûí traéc nghíeäm vaø baøí taäp................................66
1.21.1. GaFu hoûi traPc nghie"1.......................................................++
1.21.2.!a'i ta"=.................................................................................+-
CHÖÔNG %.$A&NG VA' CHUO(I (ARRA) * !TRING".....+3
1.22.Khaùí níeäm...........................................................................73
1.23.Maûng moät chíeàu...............................................................73
1.24.Phaùt sính moät bíeán con troû ñeán maûng........................75
1.25.Gôûí maûng moät chíeàu ñeán haøm....................................75
1.26.Chuoãí keát thuùc roãng (nuíí-termínated stríng).................76
1.27.Maûng haí chíeàu...................................................................77
1.28.Truy caäp maûng thoâng qua con troû.................................80
1.29.Khôûí gaùn moät maûng.......................................................81
1.29.1.Khôûi gaùn 1aûng 1o"t chieQu..............................................-1
1.29.2.Khôûi gaùn 1aûng hai chieQu.................................................-2
Muïc luïc
1.29..Khôûi gaùn 1aûng khoFng kích th*ôùc..................................-
1.30.Chöông trình game caro ñôn gíaûn.......................................83
1.31.Caâu hoûí traéc nghíeäm vaø baøí taäp................................86
1.1.1.GaFu hoûi traPc nghie"1........................................................-+
1.1.2.!a'i ta"=.................................................................................-7
CHÖÔNG ,.CON TRO& (POINTER".................................#1
1.32.Khaùí níeäm con troû.............................................................91
1.33.Bíeán con troû.......................................................................91
1.34.Toaùn töû treân con troû.......................................................92
1.35.Bíeáu thöùc con troû.............................................................93
1.4.1.Sheù= toaùn gaùn...................................................................9
1.4.2.)oaùn t*û ,oá hoïc treFn con troû...........................................9&
1.4..To ,aùnh con troû...................................................................9&
1.36.Con troû vaø maûng..............................................................96
1.37.Maûng caùc con troû.............................................................96
1.38.Troû gíaùn tíeáp.....................................................................97
1.39. Khôûí gaùn con troû.............................................................98
1.40.Con troû haøm.......................................................................98
1.41.Caáp phaùt boä nhôù ñoäng...............................................101
1.&1.1.Gaá= =haùt bo" nhôù baUng ha'1 1alloc#%.........................161
1.&1.2.(iaûi =hoùng bo" nhôù baUng ha'1 ;ree#%...........................161
1.42.Moät soá vaán ñeà vôùí con troû.........................................101
1.&2.1.Vaùc .ònh con troû tr*ôùc khi ,*û <uïng..............................161
1.&2.2.KhoFng neFn gaùn giaù trò cuï the> cho con troû................162
1.&2..(iaù trò con troû tha? .o>i...................................................16
1.43.Caâu hoûí traéc nghíeäm vaø baøí taäp..............................103
1.&.1.GaFu hoûi traPc nghie"1......................................................16
1.&.2.!a'i ta"=...............................................................................164
CHÖÔNG -.HA'$ (.UNCTION"...................................1/+
1.44.Daïng toáng quaùt cuûa moät haøm...................................107
1.45.Caùc íuaät phaïm ví cuûa haøm..........................................107
1.46.Tham soá cuûa haøm..........................................................108
1.&+.1. (oïi ha'1 theo tha1 trò 3a' theo tha1 chieáu..................16-
1.&+.2.(ôûi 1aûng .eán ha'1........................................................169
1.47.Tham soá trong haøm maín.................................................110
1.48.Caâu íeänh return................................................................111
1.49.Neä quy...............................................................................112
& MgoFn ng*N la"= trLnh G0GOO
1.50.Khaí baùo danh saùch tham soá coù ñoä daøí bíeán ñoáí...113
1.51.Caâu hoûí traéc nghíeäm vaø baøí taäp..............................114
1.41.1.GaFu hoûi traPc nghie"1......................................................11&
1.41.2.!a'i ta"=...............................................................................114
CHÖÔNG +.0IEÅU !TRUCTURE!1 UNION1 ENU$ERATE VA'
U!ER23E.INE ...........................................................11+
1.52.Caáu truùc...........................................................................117
1.42.1.Maûng caáu truùc..................................................................11-
1.42.2.(ôûi caáu truùc .eán 1o"t ha'1.........................................119
1.42..Gon troû caáu truùc...............................................................119
1.42.&.Maûng 3a' caáu truùc beFn trong caáu truùc.......................121
1.42.4.)r*ô'ng bit............................................................................122
1.53.Kíeáu uníons........................................................................122
1.54.Kíeáu ííeät keâ (Enumeratíon).............................................125
1.55.Duøng toaùn töû sízeof ñeá ñaûm baûo tính khaû chuyeán
.....................................................................................................127
1.56.Kíeáu do ngöôøí duøng ñònh nghóa....................................128
1.57.Caâu hoûí traéc nghíeäm vaø baøí taäp..............................128
1.47.1.GaFu hoûi traPc nghie"1......................................................12-
1.47.2.!a'i ta"=...............................................................................12-
CHÖÔNG 4.VA'O5 RA 3ÖÕ LIEÄU TREÂN CON!OLE.....133
1.58.Noïc vaø víeát moät kí töï....................................................133
1.4-.1.Mo"t 3aán .eQ 3ôùi ha'1 getchar........................................1&
1.4-.2.!ieán the> cuûa ha'1 getchar#%...........................................1&
1.59.Noïc vaø víeát chuoãí..........................................................135
1.60.Haøm príntf .........................................................................136
1.61.Haøm scanf..........................................................................137
CHÖÔNG #.6O7C5GHI 3ÖÕ LIEÄU TREÂN .ILE..............1%1
1.62.Luoàng vaø fííe....................................................................141
1.+2.1.$uoQng #,trea1%....................................................................1&1
1.+2.2.Wile.........................................................................................1&1
1.63.Caùc haøm cô sôû cuûa heä thoáng fííe..............................142
1.64.fread vaø fwríte...................................................................145
1.65.fseek vaø truy caäp ngaãu nhíeân......................................145
1.66.fpríntf() vaø fscanf().............................................................145
1.67.Luoàng chuaán....................................................................145
CHÖÔNG 1/.TIEÀN Ö& L)Ù VA' CHUÙ TH8CH...........1%+
Muïc luïc 4
1.68.#defíne................................................................................147
1.+-.1.Eònh nghXa Macro gioáng ha'1...........................................1&9
1.69.#error..................................................................................150
1.70.#íncíude..............................................................................150
1.71.Chæ thò bíeân dòch coù ñíeàu kíeän..................................151
1.71.1.Yi;@ Yel,e@ Yeli;@ Yen<i;........................................................141
1.71.2.Yi;<e; 3a' Yi;n<e;.................................................................14&
1.72.#undef.................................................................................154
1.73.defíned.................................................................................155
1.74.#ííne....................................................................................156
1.75.Toaùn töû tíeàn xöû íyù # vaø ##......................................156
1.76.Caùc macro ñònh nghóa tröôùc...........................................157
1.77.Chuù thích trong C chuaán..................................................158
PHAÀN II. NGOÂN NGÖÕ LAÄP TRÌNH C99..................1-1
CHÖÔNG 11.TOÅNG QUAN VEÀ NGOÂN NGÖÕ LAÄP
TRÌNH C99...............................................................1-1
1.78.Nguoàn goác cuûa C++......................................................161
1.79.Khaùí níeäm íaäp trình höôùng ñoáí töôïng.........................162
1.79.1.!ao goùi #enca=,ualation%....................................................1+
1.79.2.Ea hLnh #=ol?1or=hi,1%........................................................1+
1.79..Keá th*'a #inheritance%.........................................................1+&
1.80.Vaøí vaán ñeà cô baûn C++................................................164
1.-6.1.Mo"t 3í <uï ch*ông trLnh GOO...............................................1+&
1.-6.2.Mo"t caùc nhLn gaQn guNi hôn 3eQ thao taùc 3a'o ra...........1+7
1.-6..Khai baùo bieán cuïc bo"......................................................1+7
1.-6.&.Kie>u <*N lie"u bool..............................................................1+-
1.81.Moâ hình cuõ so vôùí moâ hình híeän ñaïí...........................168
1.-1.1.)ieFu .eQ trong GOO.............................................................1+9
1.-1.2.KhoFng gian teFn..................................................................176
1.-1..$a'1 3ie"c 3ôùi trLnh bieFn <òch cuN...................................176
1.82.Gíôùí thíeäu íôùp trong C++...............................................170
1.83.Haøm taûí boäí (Functíon Overíoadíng)...............................175
1.84.Toaùn töû taûí boäí (Operator Overíoadíng)........................176
1.85.Keá thöøa.............................................................................177
1.86.Caáu töû vaø huûy töû (contructor, destructor)..................181
1.87.Töø khoùa trong C++..........................................................185
1.88.Daïng toáng quaùt cuûa moät chöông trình C++...............186
+ MgoFn ng*N la"= trLnh G0GOO
CHÖÔNG 12.LÔÙP VA' 6O:I TÖÔ7NG (CLA!! AN3
OB;ECT"....................................................................14+
1.89.Lôùp.....................................................................................187
1.90.Söï ííeân quan gíöõa íôùp vaø ñoáí töôïng...........................188
1.91.Söï ííeân quan cuûa taäp hôïp vaø íôùp...............................190
1.91.1.Kôï= naJc <anh #anon?1ou, union,%....................................191
1.92.Haøm thaân thíeän..............................................................192
1.93.Lôùp thaân thíeän................................................................194
1.94.Haøm Inííne..........................................................................195
1.9&.1.Eònh nghXa ha'1 Znline trong 1o"t lôù=.............................19+
1.95.Caáu töû coù tham soá........................................................197
1.94.1.Gaáu t*û 1o"t tha1 ,oá.......................................................199
1.96.Thaønh víeân tónh cuûa moät íôùp.....................................199
1.9+.1.[*N lie"u tha'nh 3ieFn tXnh.................................................199
1.9+.2.Ka'1 tha'nh 3ieFn tXnh.......................................................26
1.97.Khí naøo moät caáu töû vaø huûy töû thöïc híeän?.............204
1.98.Toaùn töû phaân gíaûí phaïm ví..........................................206
1.99.Lôùp íoàng nhau..................................................................206
1.100.Lôùp cuïc boä.....................................................................207
1.101.Gôûí moät ñoáí töôïng ñeán haøm....................................207
1.102.Traû veà moät ñoáí töôïng.................................................209
1.103.Gaùn moät ñoáí töôïng......................................................210
CHÖÔNG 13.$A&NG1 CON TRO&1 THA$ CHIE:U VA'
TOAÙN TÖ& CA:P PHAÙT BOÄ NHÔÙ 6OÄNG.............213
1.104.Maûng caùc ñoáí töôïng.....................................................213
1.16&.1.)aïo 1o"t 1aûng coù khôûi taïo 3a' khoFng.....................214
1.105.Con troû ñoáí töôïng..........................................................216
1.164.1.Kie>1 tra kie>u trong con troû GOO...................................21-
1.164.2.Gon troû thi,........................................................................21-
1.164..Gon troû .eán kie>u <a\n ]uaát.........................................226
1.164.&.Gon troû .eán tha'nh 3ieFn cuûa lôù=...............................222
1.106.Tham chíeáu......................................................................225
1.16+.1.)ha1 chieáu .eán tha1 ,oá...............................................224
1.16+.2.(ôûi tha1 chieáu <eán .oái t*ôïng....................................22-
1.16+..)raû 3eQ 1o"t tha1 chieáu................................................26
1.16+.&.)ha1 chieáu .o"c la"=.......................................................26
1.16+.4.)ha1 chieáu .eán 1o"t kie>u <a\n ]uaát.........................21
1.16+.+.Kaïn cheá cuûa tha1 chieáu...............................................22
Muïc luïc 7
1.107.Toaùn töû caáp phaùt ñoäng.............................................232
1.167.1.Khôûi gaùn cho bo" nhôù .aN caá= =haùt..........................2&
1.167.2.Gaá= =haùt 1aûng..............................................................24
1.167..Gaá= =haù= cho .oái t*ôïng................................................24
1.167.&.MothroR...............................................................................2&6
1.167.4.[aïng ,aP= ]eá= cuûa neR 3a' <elete................................2&1
CHÖÔNG 1%.HA'$ TA&I BOÄI1 CA:U TÖ& !AO CHEÙP
VA' THA$ !O: NGAÀ$ 6<NH...................................2%3
1.108.Haøm taûí boäí..................................................................243
1.109.Taûí boäí haøm caáu töû...................................................244
1.169.1.)aûi bo"i ha'1 caáu t*û .e> ch*ông trLnh 1eQ1 <eûo.....2&4
1.169.2.Gho =heù= khôûi gaùn 3a' khoFng 1o"t .oái t*ôïng.........2&+
1.110.Caáu töû sao cheùp...........................................................248
1.111.Tìm ñòa chæ cuûa moät haøm taûí boäí...........................252
1.112.Töø khoùa overíoad...........................................................253
1.113.Tham soá haøm ngaàm ñònh............................................254
1.11.1.)ha1 ,oá ngaQ1 .ònh ,o 3ôùi taûi bo"i.............................24-
1.114.Haøm taûí boäí vaø söï nhaäp nhaèng..............................259
CHÖÔNG 1,.TOAÙN TÖ& TA&I BOÄI...........................2-3
1.115.Taïo moät haøm toaùn töû thaønh víeân..........................263
1.114.1.)aïo 1o"t <aïng tieQn toá 3a' ha"u toá cuûa toaùn t*û ta/ng@
giaû1...............................................................................................2+7
1.114.2.)aûi bo"i treFn toaùn t*û 3ieát taPt....................................2+-
1.114..Kaïn cheá cuûa toaùn t*û taûi bo"i.....................................2+9
1.116.Toaùn töû taûí boäí söû duïng haøm thaân thíeän............269
1.11+.1.T*û <uïng ;rien< .e> taûi bo"i OO 3a' AA............................271
1.11+.2.Ka'1 toaùn t*û thaFn thie"n bo> ,ung tính 1eQ1 <eûo...27
1.117.Taûí boäí treân toaùn töû new vaø deíete.........................275
1.117.1.)aûi bo"i toaùn t*û neR 3a' <etele cho 1aûng.................2-6
1.117.2.)aûi bo"i =hieFn baûn nothroR cuûa neR 3a' <elete.........2-2
1.118.Taûí boäí moät vaøí toaùn töû ñaëc bíeät.........................283
1.11-.1.)aûi bo"i treFn CD.................................................................2-
1.11-.2.)aûi bo"i treFn #%.................................................................2-7
1.11-..)aûi bo"i treFn AB...............................................................2--
1.11-.&.)aûi bo"i treFn toaùn t*û <aáu =ha>?................................2-9
CHÖÔNG 1-.0E: THÖ'A............................................2#3
1.119.Níeàu khíeán truy caäp íôùp cô sôû...................................293
1.120.Thaønh víeân protected vaø keá thöøa protected.............295
1.126.1.)ha'nh 3ieFn =rotecte<......................................................294
1.126.2.Keá th*'a =rotecte< lôù= cô ,ôû........................................299
- MgoFn ng*N la"= trLnh G0GOO
1.121.Keá thöøa nhíeàu íôùp cô sôû............................................300
1.122.Caáu töû, huûy töû vaø keá thöøa.....................................301
1.122.1.Khi na'o ha'1 caáu t*û 3a' huû? t*û .*ôïc th*ïc thi........61
1.122.2. (ôûi tha1 ,oá .eán caáu t*û cuûa lôù= cô ,ôû.................6&
1.123.Cho pheùp truy caäp.........................................................308
1.124.Lôùp cô sôû aûo.................................................................310
CHÖÔNG 1+.HA'$ A&O VA' 6A HÌNH.......................31+
1.125.Haøm aûo..........................................................................317
1.124.1.(oïi ha'1 aûo thoFng 2ua tha1 chieáu lôù= cô ,ôû..........19
1.126.Keá thöøa moät thuoäc tính aûo.......................................321
1.127.Caùc haøm aûo ñöôïc phaân caáp.....................................322
1.128.Haøm aûo thuaàn tuùy......................................................324
1.12-.1.$ôù= tr*'u t*ôïng................................................................2+
1.129.Söû duïng haøm aûo..........................................................326
1.130.Líeân keát sôùm vaø treã..................................................329
CHÖÔNG 14.LÔÙP $A(U (TE$PLATE"........................331
1.131.Haøm chung......................................................................331
1.11.1.Mo"t ha'1 3ôùi hai kie>u chung........................................
1.11.2.)aûi bo"i treFn ha'1 chung...............................................
1.11..)aûi bo"i treFn ha'1 1a\u................................................4
1.11.&.T*û <uïng tha1 ,oá chua>n 3ôùi ha'1 1a\u....................+
1.11.4.Kaïn cheá cuûa ha'1 chung...............................................7
1.132.ÖUng duïng cuûa haøm chung..........................................338
1.12.1.TaP= ]eá= chung.................................................................-
1.12.2.^uùt goïn 1o"t 1aûng........................................................9
1.133.Lôùp chung........................................................................341
1.1.1.Mo"t 3í <uï 3ôùi hai kie>u <*N lie"u chung.........................&&
1.1.2._Ing <uïng cuûa lôù= 1a\u` lôù= 1aûng chung...............&4
1.1..T*û <uïng tha1 ,oá khoFng .ònh kie>u 3ôùi lôù= chung...&+
1.1.&.T*û <uïng tha1 ,oá ngaQ1 .ònh 3ôùi lôù= 1a\u..............&-
1.1.4.$ôù= .aJc bie"t roN ra'ng..................................................46
1.134.Töø khoùa typename vaø export.......................................351
1.135.Söùc maïnh cuûa íôùp maãu.............................................352
CHÖÔNG 1#.QUA&N L)Ù NGOA7I LEÄ.........................3,3
1.136.Cô baûn veà quaûn íyù ngoaïí íeä.....................................353
1.1+.1.MaP1 baPt 1o"t kie>u lôù=................................................49
1.1+.2.T*û <uïng nhieQu le"nh catch.............................................+6
1.137.Ouaûn íyù ngoaïí íeä íôùp daãn xuaát...............................362
Muïc luïc 9
1.138.Tuøy bíeán quaûn íyù ngoaïí íeä........................................363
1.1-.1.!aPt taát caû caùc ngoaïi le"..............................................+
1.1-.2.Kaïn cheá cuûa ngoaïi le"...................................................+4
1.1-..Meù1 laïi 1o"t ngoaïi le"....................................................+7
1.139.Tìm híeáu termínate() vaø unexpected()...........................368
1.19.1.)hieát la"= 2uaûn l?ù ter1inate 3a' une]=ecte<...............+-
1.140.Haøm uncaught_expectíon()..............................................370
1.141.ÖUng duïng cuûa quaûn íyù ngoaïí íeä..............................370
CHÖÔNG 2/.HEÄ THO:NG VA'O5RA TRONG C99........3+3
1.142.So saùnh phíeân baûn cuõ vaø híeän ñaïí.........................373
1.143.Caùc íuoàng trong C++.....................................................373
1.144.Lôùp caùc íuoàng...............................................................374
1.1&&.1.$uoQng .ònh nghXa tr*ôùc..................................................74
1.145.Vaøo ra coù khuoân daïng.................................................376
1.1&4.1.Eònh <aïng baUng caùch ,*û <uïng tha'nh 3ieFn cuûa lôù=
io,.....................................................................................................7+
1.1&4.2.)hieát la"= cô' .ònh <aïng.................................................7-
1.1&4..Voùa cô' .ònh <aïng...........................................................79
1.1&4.&.Mo"t <aïng taûi bo"i cuûa ,et;#%..........................................79
1.1&4.4.MghieFn c*ùu cô' .ònh <aïng.............................................-1
1.1&4.+.)hieát la"= taát caû caùc cô'.............................................-2
1.1&4.7.T*û <uïng Ri<th#%@ =reci,ion#%@ ;ill#%.....................................-
1.1&4.-.T*û <uïng 1ani=ulator .e> .ònh <aïng 3a'o0ra#.ang ,*ûa%
.........................................................................................................-4
1.146.Taûí boäí << vaø >>.........................................................389
1.1&+.1.)*ï taïo ra ha'1 che'n........................................................-9
1.1&+.2.)*ï taïo ha'1 ]uaát............................................................9&
1.147.Taïo moät haøm manípuíator............................................396
CHÖÔNG 21.HEÄ THO:NG VA'O RA TREÂN .ILE.........%/1
1.148.<fstream> vaø caùc íôùp treân fííe...................................401
1.149.Môû vaø ñoùng moät fííe...................................................401
1.150.Noïc vaø víeát treân fííe vaên baûn...................................404
1.151.Vaøo ra treân fííe khoâng ñònh daïng vaø nhò phaân.......407
1.141.1.Kí t*ï ,o 3ôùi b?te................................................................&67
1.141.2.=ut#% 3a' get#%.....................................................................&6-
1.141..rea<#% 3a' Rrite#%................................................................&69
1.141.&.Gaùc ha'1 get#%..................................................................&12
1.141.4.getline#%...............................................................................&1
1.152.Phaùt híeän EOF................................................................414
1.153.Haøm ígnore()....................................................................416
16 MgoFn ng*N la"= trLnh G0GOO
1.154.peek() vaø putback().........................................................417
1.155.fíush()................................................................................418
1.156.Truy caäp ngaãu nhíeân....................................................418
1.14+.1.Mha"n 3ò trí hie"n ha'nh cuûa ;ile......................................&22
1.157.Caùc traïng thaùí vaøo ra..................................................422
1.158.Tuøy bíeán vaøo ra vaø fííe...............................................425
CHÖÔNG 22.0IEÅU TA7I 6IEÅ$ THÖ7C THI VA' EÙP 0IEÅU
................................................................................%2#
1.159.Nònh danh kíeáu taïí thôøí ñíeám thöïc thí........................429
1.149.1._Ing <uïng .ôn giaûn cuûa ^))Z........................................&4
1.149.2._Ing <uïng toaùn t*û t?=ei< .eán lôù= 1a\u....................&7
1.160.Toaùn töû eùp kíeáu..........................................................438
1.1+6.1.<?na1icaca,t......................................................................&-
1.1+6.2.)ha? theá t?=ei< 3ôùi <?na1icaca,t...................................&&2
1.1+6..T*û <uïng <?na1icaca,t 3ôùi lôù= 1a\u............................&&4
1.1+6.&.con,taca,t...........................................................................&&+
1.1+6.4.,taticaca,t...........................................................................&&-
1.1+6.+.reinter=retaca,t...................................................................&&9
CHÖÔNG 23.0HOÂNG GIAN TEÂN1 CAÙC HA'$ CHU)EÅN
6OÅI1 CAÙC CHU& 6EÀ NAÂNG CAO...........................%,1
1.161.Khoâng gían teân...............................................................451
1.1+1.1.Gô baûn 3eQ khoFng gian teFn............................................&42
1.1+1.2.GaFu le"nh u,ing.................................................................&44
1.1+1..KhoFng gian teFn khoFng coù teFn.....................................&47
1.1+1.&.Mo"t 3a'i tu'? choïn treFn khoFng gian teFn.....................&47
1.162.Khoâng gían teân std.........................................................459
1.163.Taïo moät haøm chuyeán ñoáí..........................................461
1.164.Haøm thaønh víeân íaø const............................................465
1.165.Haøm thaønh víeân voíatííe...............................................468
1.166.Caáu töû töôøng mính.......................................................468
1.167.Söû duïng töø khoùa asm..................................................470
1.168.Chæ roõ söï ííeân keát.......................................................471
1.169.Vaøo ra treân maûng.........................................................471
1.1+9.1.Gaùc lôù= 3a'o ra treFn 1aûng..........................................&72
1.1+9.2.)aïo 1o"t luoQng ra treFn 1aûng.......................................&72
1.1+9..T*û <uïng 1aûng .e> nha"= <*N lie"u...............................&7&
1.1+9.&.$uoQng 3a'o0ra treFn 1aûng .............................................&7+
1.170.Söû duïng maûng ñoäng....................................................476
Muïc luïc 11
1.171.Söû duïng vaøo ra nhò phaân treân íuoàng döïa vaøo maûng
.....................................................................................................478
1.172.Toùm taét söï khaùc nhau gíöõa C vaø C++.....................479
CHÖÔNG 2%.GIÔÙI THIEÄU THÖ VIEÄN CHUAÅN CAÙC
LÔÙP $A(U..............................................................%41
1.173.Toáng quan veà STL..........................................................481
1.17.1.Gontaine,r...........................................................................&-2
1.17.2.blgorith1,...........................................................................&-2
1.17..Zterator................................................................................&-2
1.17.&.Gaùc tha'nh =haQn khaùc...................................................&-
Gh*ông 1. )o>ng 2uan 3eQ ngoFn ng*N G
1
P=>?@ I. NABC@ @ADE F>GH IJK@= C
C=DL@A 1. TBM@A NO>@ PQ? @ABC@ @ADE
C
1.1. NAOB?@ ABRS SOT> @ABC@ @ADE C
Ngoân ngöõ íaäp trình C ñöôïc phaùt mính vaø caøí ñaët íaàn
ñaàu tíeân bôûí [enni, ^itchie vaø ñöôïc söû duïng trong heä ñíeàu
haønh Línux. C íaø keát quaû cuûa moät quaù trình phaùt tríeán baét
ñaàu baèng ngoân ngöõ B (ñöôïc phaùt mính bôûí Ken )ho1=,on).
Töø ngoân ngöõ B ñaõ phaùt tríeán ngoân ngöõ C vaøo naêm 1970.
Heø naêm 1983, thaønh íaäp moät uûy ban ñeá taïo ra chuaán
ANSI (b1erican Mational Ttan<ar<, Zntitute) ñònh nghóa ngoân ngöõ
C. Ouaù trình tíeâu chuaán hoùa maát 6 naêm. Chuaán ANSI C ñaõ
ñöôïc chaáp nhaän vaøo thaùng 12 naêm 1989. Tíeâu chuaán naøy
cuõng ñöôïc toá chöùc tíeâu chuaán quoác teá (ISO) chaáp nhaän
vaø ñöôïc goïí íaø C chuaán. Ngaøy nay, taát caû caùc trình bíeân
dòch ngoân ngöõ C/C++ ñeàu tuaân theo C chuaán.
1.2. C F>U @ABC@ @ADE V>GS IJO@A
C thöôøng ñöôïc goïí íaø ngoân ngöõ maùy baäc trung. Níeàu
naøy khoâng coù nghóa íaø C ít maïnh, vaø khoù söû duïng hoaëc ít
phaùt tríeán hôn caùc ngoân ngöõ baäc cao nhö íaø Basíc hoaëc
Pascaí. C coù yù töôûng nhö íaø moät ngoân ngöõ baäc trung bôûí vì
noù tích hôïp toát nhaát caùc thaønh phaàn cuûa ngoân ngöõ baäc
cao keát hôïp vôùí tính meàm deûo cuûa ngoân ngöõ caáp thaáp.
C cho pheùp íaäp trình vôùí bit, b?te vaø ñòa chæ. Maõ nguoàn
cuûa ngoân ngöõ C cuõng töông thích vôùí nhíeàu chöông trình
dòch, nhíeàu heä ñíeàu haønh khaùc nhau. Ví duï ta coù theá deã
1& ShaQn Z. MgoFn ng*N la"= trLnh G
daøng chuyeán ñoáí moät chöông trình C víeát treân heä ñíeàu
haønh DOS sang moät chöông trình C thöïc thí treân WINDOWS.
Highest level Ada
Modula-2
Pascal
COBOL
FORTRAN
BASIC
Middle level Java
C
C
FORTH
Lo!est level Mac"o-asse#$le"
Asse#$le"
Bảng 1-1% &' t"( c)a C t"o*g th+ gi,i *g-* *g. l/0 t"1*h
Taát caû caùc ngoân ngöõ íaäp trình baäc cao ñeàu hoã trôï
khaùí níeäm kíeáu döõ ííeäu. Kíeáu döõ ííeäu ñònh nghóa caùc taäp
gíaù trò maø moät bíeán coù theá íöu tröõ vaø taäp caùc pheùp
toaùn coù theá thao taùc treân gíaù trò ñoù. Kíeáu döõ ííeäu cô baûn
nhaát íaø soá nguyeân, kí töï vaø soá thöïc. Maëc duø C coù naêm
kíeáu döõ ííeäu cô baûn, nhöng noù khoâng phaûí íaø moät ngoân
ngöõ ñònh kíeáu maïnh nhö íaø Pascaí. C cho pheùp chuyeán ñoáí
qua íaïí gíöõa caùc kíeáu döõ ííeäu vôùí nhau. Ví duï ta coù theá
troän íaãn kíeáu kí töï vaø kíeáu soá trong moät bíeáu thöùc.
Khoâng gíoáng nhö ngoân ngöõ baäc cao, C khoâng kíeám tra
caùc íoãí thôøí gían thöïc thí. Ví duï C khoâng kíeám tra xem caùc
bíeân cuûa maûng coù traøn hay khoâng. Caùc kíeáu kíeám tra naøy
íaø traùch nhíeäm cuûa ngöôøí íaäp trình.
C khoâng yeâu caàu töông thích döõ ííeäu chaët cheõ gíöõa
ñoáí soá vaø tham soá. Noáí vôùí ngoân ngöõ baäc cao yeâu caàu
Gh*ông 1. )o>ng 2uan 3eQ ngoFn ng*N G
14
kíeáu döõ ííeäu cuûa tham soá phaûí cuøng kíeáu döõ ííeäu vôùí ñoáí
soá. C cho pheùp moät tham soá coù theá coù kíeáu döõ ííeäu baát
kì, noù coù theá chuyeán ñoáí moät caùch hôïp íyù sang kíeáu cuûa
ñoáí soá.
C cho pheùp thao taùc tröïc tíeáp treân bit, b?te, Ror< vaø con
troû, ñíeàu naøy íaøm cho C töông öùng toát vôùí íaäp trình heä
thoáng.
C coù 32 töø khoùa (27 töø chuaán cuûa ^itchie vaø 5 ñöôïc
boá sung töø chuaán ANSI) trong khí caùc ngoân ngöõ íaäp trình
baäc cao coù nhíeàu töø khoùa hôn ví duï vôùí ngoân ngöõ BASIC
coù khoaûng 100 töø khoùa.
1.3. C F>U @ABC@ @ADE SBW S>RO IJOWS
Naëc tröng chính ñeá phaân bíeät ngoân ngöõ coù caáu truùc
íaø maõ nguoàn vaø döõ ííeäu chía thaønh ngaên. Noù íaø khaû
naêng chía, aán daáu thoâng tín vaø caâu íeänh cuûa chöông trình
ñeá thöïc thí moät taùc vuï ñaëc bíeät naøo ñoù. Moät caùch ñeá
thöïc híeän chía ngaên ñoù íaø duøng chöông trình con coù söû
duïng bíeán cuïc boä. Baèng caùch söû duïng bíeán cuïc boä, ta coù
theá víeát chöông trình con vì vaäy nhöõng söï kíeän phaùt sính
beân trong chöông trình con naøy khoâng coù taùc ñoäng ñeán caùc
phaàn khaùc cuûa chöông trình. Khaû naêng naøy cho pheùp chöông
trình deã daøng chía seõ caùc ñoaïn maõ trong chöông trình. Neáu
phaùt tríeán moät haøm coù chía ngaên, ta chæ caàn bíeát haøm
ñoù íaøm gì, khoâng caàn bíeát haøm ñoù íaøm nhö theá naøo. Nhôù
raèng, neáu íaïm duïng quaù nhíeàu bíeán toaøn cuïc seõ phaùt sính
nhöõng íoãí khoâng mong muoán.
Ngoân ngöõ íaäp trình coù caáu truùc cung caáp khaû naêng
íaäp trình ña daïng. Noù hoã trôï tröïc tíeáp trong moät vaøí caáu
1+ ShaQn Z. MgoFn ng*N la"= trLnh G
truùc íaëp: do-!hile, !hile, 2o". Trong ngoân ngöõ caáu truùc,
caám hoaëc haïn cheá söû duïng toaùn töû goto.
Thaønh phaàn coù caáu truùc chính cuûa C íaø haøm, ñoù íaø
chöông trình con ñoäc íaäp cuûa C. Trong C, haøm ñöôïc xaây döïng
thaønh moät khoáí. Haøm ñöôïc ñònh nghóa vaø víeát maõ ríeâng
ñeá phuïc vuï moät nhíeäm vuï ríeâng, vì vaäy chöông trình ñöôïc
chía nhoû thaønh caùc chöông trình khaùc ñoäc íaäp. Sau khí taïo
moät haøm ta coù theá döïa vaøo ñoù ñeá íaøm víeäc vôùí nhíeàu
tình huoáng maø khoâng taùc ñoäng ñeán nhöõng phaàn khaùc
cuûa chöông trình.
Moät caùch khaùc ñeá caáu truùc vaø chía ngaên maõ trong C
íaø duøng khoáí íeänh. Khoáí íeänh trong C ñöôïc ñaët gíöõa caëp
daáu ngoaëc nhoïn 34.
1.%. C>RO IJOWS SOT> XBGI S=DL@A IJK@= C
Ngoân ngöõ C coù taát caû 32 töø khoùa. 27 töø khoùa ñöôïc
ñònh nghóa bôûí phíeân baûn goác, 5 töø khoùa ñöôïc ñònh nghóa
bôûí ANSI: e*u#, co*st, sig*ed, void vaø volatile.
auto dou$le i*t st"uct
$"ea5 else lo*g s!itch
case e*u# "egiste" t60ede2
cha" e7te"* "etu"* u*io*
co*st 2loat sho"t u*sig*ed
co*ti*ue 2o" sig*ed void
de2ault goto si8eo2 volatile
do i2 static !hile
Bảng 1-2. 92 t: 5h;a <'*h *gh=a t"o*g C chu>*
Taát caû caùc töø khoùa cuûa C ñeàu íaø chöõ thöôøng,
khoâng neân söû duïng töø khoùa cho muïc ñích khaùc trong chöông
trình.
Gh*ông 1. )o>ng 2uan 3eQ ngoFn ng*N G
17
Moät chöông trình C bao goàm moät hoaëc nhíeàu haøm.
Haøm #ai*?@ íuoân ñöôïc khaí baùo trong taát caû caùc chöông
trình, ñoù íaø haøm ñaàu tíeân ñöôïc goïí khí chöông trình baét ñaàu
thöïc thí. Daïng toáng quaùt cuûa moät chöông trình C nhö hình sau:
glo$al decla"atio*s
"etu"*-t60e #ai*?0a"a#ete" list@
3
state#e*t seAue*ce
4
"etu"*-t60e 2B?0a"a#ete" list@
3
state#e*t seAue*ce
4
"etu"*-t60e 22?0a"a#ete" list@
3
state#e*t seAue*ce
4
%
%
%
"etu"*-t60e 2N?0a"a#ete" list@
3
state#e*t seAue*ce
4
Hình 1-3. CD*g tE*g AuFt c)a #Gt chHI*g t"1*h C%
Raát nhíeàu chöông trình chöùa trong moät ;ile nguoàn. Tuy
nhíeân, khí chöông trình quaù íôùn, ñíeàu naøy seõ toán nhíeàu thôøí
gían bíeân dòch. Töø ñoù, chöông trình C cho pheùp chöùa trong
nhíeàu ;ile khaùc nhau vaø íaäp trình víeân coù theá bíeân dòch
töøng ;ile ríeâng bíeät. Níeám thuaän tíeän cuûa bíeân dòch ríeâng
bíeät ñoù íaø khí ta thay ñoáí maõ nguoàn cuûa moät ;ile ta khoâng
1- ShaQn Z. MgoFn ng*N la"= trLnh G
phaûí bíeân dòch íaïí toaøn boä chöông trình.
1.,. C=DL@A IJK@= Y>?O IZQC@
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
0"i*t2?MChao cac $a*M@N
getch?@N
4
Haí doøng ñaàu tíeân cuûa chöông trình khaí baùo thö víeän
chuaán cuûa C, muïc ñích ñeá thaân haøm #ai*?@ söû duïng caùc
íeänh 0"i*t2?@, getch?@. Doøng thöù ba khaí baùo haøm #ai*?@,
ñaây íaø ñíeám baét ñaàu cuûa chöông trình C. taát caû caùc
chöông trình trong C ñeàu baét ñaàu töø ñíeám naøy. Leänh
0"i*t2?@ ín chuoãí vaên baûn ra maøn hình, íeänh getch?@ döøng
chöông trình ñôïí ngöôøí duøng baám moät phím baát kì ñeá keát
thuùc chöông trình.
Gh*ông 2. !ie>u th*ùc #H]=re,,ion% 19
C=DL@A 2. BZQMO I=DWS (E[HJQ\\ZB@"
1.-. 0ZQMO ]DE FZQGO SL \LT (B>\ZS 3>I> T^HQ"
Coù 5 kíeáu döõ ííeäu cô sôû trong C, ñoù íaø kí töï ?cha"@,
kíeáu soá nguyeân ?i*t@, kíeáu soá thöïc daáu phaáy ñoäng ?2loat,
dou$le@ vaø kíeáu döõ ííeäu khoâng gíaù trò ?void@. Taát caû caùc
kíeáu döõ ííeäu khaùc trong C ñeàu döïa vaøo 5 kíeáu döõ ííeäu
naøy. Kích thöôùc vaø phaïm ví cuûa caùc kíeáu naøy phuï thuoäc
vaøo kíeáu ví xöû íyù vaø trình bíeân dòch. Tuy nhíeân trong taát
caû caùc tröôøng hôïp moät kí töï íaø 1 b?te. Kích thöôùc cuûa moät
soá nguyeân phuï thuoäc vaøo ñoä daøí töø maùy. Noáí vôùí moâí
tröôøng 16 bit thì soá nguyeân íaø 16 bit, ñoáí vôùí moâí tröôøng 32
bit thì soá nguyeân íaø 32 bit. Daïng chính xaùc cuûa moät soá thöïc
daáu phaáy ñoäng phuï thuoäc vaøo söï thíeát íaäp cuûa íaäp trình
víeân.
Kíeáu void hoaëc íaø ñeá khaí baùo roõ raøng moät haøm
khoâng traû veà gíaù trò hoaëc ñeá taïo moät con troû toáng quaùt.
1.+. BBM @ADE _ZQMO ]DE FZQGO SL \LT ($B]Z`^Z@A
I=Q B>\ZS T^HQ"
Ngoaïí tröø kíeáu void, taát caû caùc kíeáu döõ ííeäu coøn íaïí
ñeàu coù theá coù boá ngöõ. Söû duïng boá ngöõ thay theá yù
nghóa cuûa cuûa kíeáu döõ ííeäu cô sôû ñeá ñaùp öùng caùc tình
huoáng chính xaùc hôn. Coù 4 boá ngöõ sau: sig*ed, u*sig*ed,
lo*g, sho"t.
Baûng sau ííeät keâ caùc kíeáu döõ ííeäu cuøng vôùí boá ngöõ
OiPu
O(ch thH,c
?$it@
PhD# vi $iPu diQ*
26 ShaQn Z. MgoFn ng*N la"= trLnh G
cha" R SB2T to B2T
u*sig*ed cha" R U to 2VV
sig*ed cha" R SB2T to B2T
i*t BW o" 92 S92XTWT to 92XTWT
u*sig*ed i*t BW o" 92 U to WVXV9V
sig*ed i*t BW o" 92 sa#e as i*t
sho"t i*t BW S92XTWT to 92XTWT
u*sig*ed sho"t i*t BW U to WVXV9V
sig*ed sho"t i*t BW sa#e as sho"t i*t
lo*g i*t
92
S2XBYTXYR9XWYT
to 2XBYTXYR9XWYT
sig*ed lo*g i*t 92 sa#e as lo*g i*t
u*sig*ed lo*g i*t 92 U to YX2ZYXZWTX2ZV
2loat 92 Si7 digits o2 0"ecisio*
dou$le WY Te* digits o2 0"ecisio*
lo*g dou$le
RU
Te* digits o2 0"ecisio*
Bảng 2-1. CFc 5iPu d. li[u <H\c <'*h *gh=a $]i C chu>*
Söï khaùc nhau gíöõa soá nguyeân coù daáu vaø khoâng daáu
phuï thuoäc vaøo bit cao nhaát cuûa soá nhò phaân bíeáu díeãn soá
nguyeân ñoù. Neáu bit cao nhaát =0 soá nguyeân döông, ngöôïc íaïí.
1.4. 6a@= ]>@= (I]Q@IZ`ZQJ"
Trong C, teân cuûa bíeán, haøm, nhaõn hoaëc ñoáí töôïng do
ngöôøí duøng ñaët goïí íaø ñònh danh. Nònh danh bao goàm nhíeàu
kí töï gheùp íaïí, kí töï ñaàu tíeân phaûí íaø moät chöõ caùí hoaëc íaø
moät daáu gaïch noáí, caùc kí töï tíeáp theo phaûí íaø moät kí töï
soá, chöõ caùí hoaëc daáu gaïch noáí. Moät soá ñònh danh hôïp íeä
vaø khoâng hôïp íeä.
Hôïp íeä Khoâng hôïp íeä
Cou*t Bcou*t
Test29 hi^the"e
Gh*ông 2. !ie>u th*ùc #H]=re,,ion% 21
Hight_$ala*ce hight`$ala*ce
Trong C ñònh danh coù theá coù ñoä daøí baát kì, tuy nhíeân
khoâng phaûí taát caû caùc töø ñeàu coù nghóa. Neáu ñònh danh
duøng ñeá xöû íyù caùc ííeân keát beân ngoaøí, chæ coù 6 kí töï
ñaàu tíeân coù nghóa. Nònh danh naøy goïí íaø ñònh danh beân
ngoaøí, bao goàm teân haøm, bíeán toaøn cuïc chía seõ gíöõa caùc
;ile. Kíeáu ñònh danh beân trong bao goàm teân haøm, bíeán, .
trong moät chöông trình. Kíeáu ñònh danh naøy coù 31 kí töï coù
nghóa. Nònh danh cuûa ñoáí töôïng coù phaân bíeät chöõ hoa vaø
chöõ thöôøng. COaNT, Cou*t vaø cou*t íaø ba ñònh danh phaân
bíeät. Nònh danh khoâng ñöôïc truøng vôùí töø khoùa vaø khoâng
truøng teân vôùí caùc haøm trong thö víeän chuaán.
1.#. BZQR@ (V>JZ>VFQ"
Bíeán íaø moät vò trí coù teân trong boä nhôù ñöôïc söû duïng
ñeá gíöõ moät gíaù trò vaø coù theá thay ñoáí bôûí chöông trình.
Taát caû caùc bíeán phaûí ñöôïc khaí baùo tröôùc khí söû duïng.
Daïng toáng quaùt cuûa moät khaí baùo bíeán nhö sau:
t60e va"ia$le_listN
Khaí baùo treân t60e phaûí íaø moät kíeáu döõ ííeäu hôïp íeä,
va"ia$le_list bao goàm moät hoaëc nhíeàu teân ñònh danh phaân
bíeät bôûí daáu phaáy. Ví duï moät vaøí caùch khaí baùo.
i*t iXbXlN
sho"t i*t siN
u*sig*ed i*t uiN
dou$le $ala*ceX 0"o2itX lossN
1.9.1. Khôûi gaùn giaù trị cho biến
Cuù phaùp:
t60e va"ia$le_*a#e c valueN
Ví duï:
22 ShaQn Z. MgoFn ng*N la"= trLnh G
cha" ch c dadN
i*t 7 c UN
2loat 2 c 9%BYN
1.9.2. Vò trí khai baùo bieán
Bíeán ñöôïc khaí baùo taïí ba vò trí: beân trong haøm hoaëc
khoáí íeänh (bíeán cuïc boä), trong ñònh nghóa tham soá haøm
(tham soá hình thöùc) vaø beân ngoaøí cuûa taát caû caùc haøm
(bíeán toaøn cuïc).
1.9.3. Bieán cuïc boä (oca! Variab!e "
Laø bíeán ñöôïc khaí baùo beân trong haøm hoaëc trong khoáí
íeänh. Bíeán cuïc boä chæ ñöôïc tham chíeáu bôûí nhöõng caâu
íeänh beân trong haøm (khoáí), cuï theá íaø beân trong khoáí íeänh
khaí baùo noù. Bíeán cuïc boä chæ toàn taïí trong khoáí khaí baùo
noù vaø noù seõ töï ñoäng huûy khí chöông trình thoaùt khoûí haøm
hoaëc khoáí íeänh. Bíeán cuïc boä phaûí ñöôïc khaí baùo ñaàu moãí
khoáí. Ví dụ:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@3
i*t tN
sca*2?MedMXft@N
i2?tccB@3
cha" sgRUhN
0"i*t2?MNha0 te*iM@N
gets?s@N
4
getch?@N
4
Bíeán s ôû treân íaø bíeán cuïc boä ñöôïc khaí baùo trong khoáí
íeänh i2 vaø noù chæ ñöôïc söû duïng trong khoáí íeänh i2. Caùc
tham chíeáu ngoaøí khoáí íeänh naøy (maëc daàu vaãn coøn trong
haøm) khoâng hôïp íeä.
Gh*ông 2. !ie>u th*ùc #H]=re,,ion% 2
Níeám thuaän íôïí cuûa khaí baùo bíeán cuïc boä íaø boä nhôù
cuûa bíeán chæ ñöôïc caáp phaùt khí caàn. Khaí baùo bíeán beân
trong maõ íeänh gíuùp ngaên chaën nhöõng taùc ñoäng khoâng
mong muoán. Ta coù theá khôûí taïo gíaù trò cho bíeán taïí íuùc khaí
baùo. Ví duï:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void 2?void@3
i*t bcBUUN
0"i*t2?Med MXb@N
bN
4
void #ai*?void@
3
i*t iN
2o"?icUNiKBUNi@ 2?@N
getch?@N
4
Chöông trình treân seõ ín ra maøn hình 10 soá 100, íyù do caâu
íeänh b seõ khoâng coù taùc duïng bôûí khí goïí haøm 2, b íuoân
ñöôïc khôûí gaùn gíaù trò íaø 100.
1.9.#. Bieán toa$n cuïc (%!oba! Variab!e"
Bíeán toaøn cuïc ñöôïc söû duïng trong toaøn boä chöông trình.
Bíeán toaøn cuïc seõ íöu tröõ gíaù trò suoát chöông trình. Ta coù
theá khaí baùo bíeán toaøn cuïc baèng caùch khaí baùo bíeán beân
ngoaøí taát caû caùc haøm. Moïí bíeáu thöùc ñeàu coù theá truy
caäp ñeán bíeán naøy. Ví duï:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
i*t cou*tN
void 2u*cB?void@N
void 2u*c2?void@N
void #ai* ?void@
2& ShaQn Z. MgoFn ng*N la"= trLnh G
3
cou*tcBUUN
2u*cB?@N
getch?@N
4
void 2u*cB?void@
3
i*t te#0N
te#0ccou*tN
2u*c2?@N
0"i*t2?Mgia t"i cua cou*t lai edMXcou*t@N
4
void 2u*c2?void@
3
i*t cou*tN
2o"?cou*tcBNcou*tKBUNcou*t@
0utcha"?d%d@N
4
Haí haøm #ai* vaø haøm 2u*cB ñeàu khaí baùo bíeán cou*t
vaø caû haí haøm naøy ñeàu söû duïng noù. Tuy nhíeân haøm 2u*c2
khaí baùo moät bíeán cuïc boä cou*t. Neáu bíeán toaøn cuïc vaø
cuïc boä coù cuøng teân, moïí thao taùc seõ thöïc híeän treân bíeán
cuïc boä vaø khoâng coù taùc ñoäng naøo treân bíeán toaøn cuïc.
Söû duïng bíeán toaøn cuïc trong tröôøng hôïp nhíeàu haøm
trong chöông trình söû duïng chung döõ ííeäu. Tuy nhíeân ta traùnh
duøng bíeán toaøn cuïc trong tröôøng hôïp khoâng caàn thíeát bôûí
vì trình bíeân dòch seõ daønh boä nhôù trong suoát quaù trình thöïc
thí cho bíeán toaøn cuïc vaø söû duïng bíeán toaøn cuïc íaøm maát
tính toáng quaùt cuûa chöông trình. Hôn nöõa, söû duïng bíeán
toaøn cuïc seõ íaøm chöông trình thöôøng gaëp íoãí bôûí vì coù taùc
ñoäng khoâng bíeát hoaëc khoâng mong muoán ñeán noù.
1.1/. H>b@A (CB@\I>@I"
Haèng íaø moät gíaù trò coá ñònh maø chöông trình khoâng
Gh*ông 2. !ie>u th*ùc #H]=re,,ion% 24
theá thay ñoáí ñöôïc. Haèng coù theá íaø kíeáu döõ ííeäu cô sôû baát
kì.
Haèng kí töï ñöôïc ñaët gíöõa caëp daáu nhaùy ñôn ví duï dad%
Haèng soá nguyeân íaø caùc soá nguyeân thoâng thöôøng nhö
100, -10, . haèng soá nguyeân coù theá víeát döôùí daïng soá heä
16 hoaëc heä 8. Ví duï U7BU íaø soá 10 ôû heä 16 (16) , UBU íaø soá
10 ôû heä soá 8 (8).
Khí víeát gíaù trò cuûa moät haèng, kíeáu döõ ííeäu nhoû nhaát
seõ chöùa gíaù trò ñoù. Tuy nhíeân ñoáí vôùí soá thöïc thì haèng soá
thöïc bao gíôø cuõng coù kíeáu dou$le.
Neá chæ ñònh kíeáu döõ ííeäu cho haèng ta theâm sau gíaù trò
ñoù moät kí töï moâ taû kíeáu döõ ííeäu. Cuï theá nhö sau:
Kíeáu döõ ííeäu Ví duï
i*t B B29 -29Y
lo*g i*t 9VUUUL -9YL
u*sig*ed i*t BUUUa 29Ya
2loat B29%292 B%U2
dou$le B29%29
lo*g dou$le B%2L
Haèng chuoãí íaø taäp caùc kí töï ñaët gíöõa caëp daáu nhaùy
keùp. Ví duï: Mthis is a te7tM. Moät soá haèng kí töï duøng ñeá
ñíeàu khíeán maø khoâng xuaát híeän treân maøn hình.
Mj k *gh=a
l$ Ohom*g t"n*g ?Bac5s0ace@
l2 Fo"# 2eed
l* Co*g #,i ?Ne! li*e@
l" &p <qu do*g ?Ca""iage "etu"*@
lt
rst Ta$ theo chipu *ga*g ?Ho"i8o*tal
ta$@
lt Cuu *gF6 5v0 ?Cou$le Auote@
2+ ShaQn Z. MgoFn ng*N la"= trLnh G
lw Cuu *hF6 <I* ?Si*gle Auote@
lU O( tx "y*g ?Null@
ll Cuu gDch chvo ?Bac5slash@
lv rst ta$ theo chipu dzc ?&e"tical ta$@
la PhFt #Gt {# tha*h ?Ale"t@
l| Cuu chu# h}i ?~uestio* #a"5@
lN Hi[* 5( tx c; #j l• N ?N l• sn h[ R@
l7N Hi[* 5( tx c; #j l• N ?N l• sn h[ BW@
Bảng 2-2. Mj 5( tx <sc $i[t
1.11. TB>W@ IDT (OHQJ>IBJ"
1.11.1. &oaùn t'û gaùn
Cuù phaùp <teân bíeán> = <bíeáu thöùc>;
Trong ñoù bíeáu thöùc coù theá íaø moät haèng, moät bíeán,
moät haøm hoaëc íaø söï keát hôïp cuûa caùc thaønh phaàn treân.
Naàu tíeân, bíeáu thöùc seõ ñöôïc tính toaùn, sau ñoù chuyeán ñoáí
kíeáu bíeáu thöùc cho phuø hôïp vôùí kíeáu cuûa bíeán. Gaùn gíaù
trò naøy cho bíeán.
1.11.1.1 (hu)e*n +o*i kie*u trong toaùn t'û gaùn
Khí caùc kíeáu döõ ííeäu cuûa bíeán vaø bíeáu thöùc khaùc
nhau, xuaát híeän vaán ñeà chuyeán ñoáí kíeáu. Trong caâu íeänh
gaùn íuaät chuyeán ñoáí thöïc híeän nhö sau: gíaù trò beân phaûí
pheùp gaùn seõ chuyeán sang kíeáu döõ ííeäu cuûa bíeán. Ví duï:
i*t 7N
cha" chN
2loat 2N
void 2u*c?void@
3
ch c 7N €€do*g B
7 c 2N €€do*g 2
2 c chN €€do*g 9
Gh*ông 2. !ie>u th*ùc #H]=re,,ion% 27
2 c 7N €€do*g Y
4
Trong doøng 1, 8 bit cao cuûa soá nguyeân 7 bò caét ñí, chæ
gíöõ íaïí 8 bit thaáp vaø gaùn cho ch. Neáu 7 naèm trong phaïm ví
U%%2VV thì ch vaø 7 coù cuøng gíaù trò, ngoaøí ra gíaù trò cuûa ch
seõ íaø gíaù trò cuûa 8 bit thaáp trong 7. Trong doøng 2, 7 seõ
nhaän phaàn nguyeân cuûa 2. Trong doøng 3, 2 seõ chuyeán 8 bit
nguyeân trong ch thaønh 8 bit ôû daïng soá thöïc. Taïí doøng 4,
chuyeán gíaù trò nguyeân sang gíaù trò thöïc.
Baûng sau ííeät keâ caùch chuyeán ñoáí kíeáu cuûa bíeáu
thöùc sang kíeáu cuûa bíeán.
OiPu $i+* OiPu $iPu th•c Th-*g ti* c; thP #ut
sig*ed cha" cha"
N+u giF t"' L B2TX chu6P*
sa*g sn {#
cha" sho"t i*t R $its cao $' #ut
cha" i*t ?BW $its@ R $its cao $' #ut
cha" i*t ?92 $its@ 2Y $its $' #ut
cha" lo*g i*t 2Y $its $' #ut
sho"t i*t i*t ?BW $its@ Oh-*g
sho"t i*t i*t ?92 $its@ BW $its $' #ut
i*t ?BW $its@ lo*g i*t BW $its $' #ut
i*t ?92 $its@ lo*g i*t Oh-*g
i*t 2loat
Phq* th/0 0h{* v• 0hq*
5hFc
2loat dou$le
rG ch(*h 7FcX 5+t Aum l•#
t"o*
dou$le lo*g dou$le rG ch(*h 7FcX 5+t Aum l•#
t"o*
Bảng 2-3. O+t Aum chu6P* <Ei 5iPu d. li[u t"o*g 0hv0 gF*
C cho pheùp gaùn nhíeàu bíeán cuøng gíaù trò ví duï muoán
gaùn gíaù trò 0 cho bíeán 7, 6, 8 ta coù theá víeát nhö sau: 7 c 6 c
2- ShaQn Z. MgoFn ng*N la"= trLnh G
8 c U.
1.11.2. &oaùn t'û ,oá hoïc
Baûng sau ííeät keâ caùc pheùp toaùn soá hoïc
ToF* t‚ k *gh=a
S T":X t": #Gt *g-i
CG*g
ƒ Nh{*
€ Chia
e Chia lu6 dH
„„ …im#
T†*g
Bảng 2-4. CFc 0hv0 toF* sn hzc
Noáí vôùí pheùp chía, khí chía haí soá nguyeân thì keát quaû
seõ íaø soá nguyeân.
1.11.3. &oaùn t'û t'ï +oäng ta-ng.giaû/
Toaùn töû seõ töï ñoäng taêng gíaù trò cuûa bíeán íeân
moät íaàn, ngöôïc íaïí -- gíaûm gíaù trò cuûa bíeán xuoáng moät
íaàn. Ta coù theá ñaët toaùn töû taêng /gíaûm vaøo tröôùc hoaëc
sau cuûa bíeán. Tuy nhíeân, trong moät bíeáu thöùc seõ coù söï
khaùc nhau gíöõa haí daïng naøy. Ví duï: 7cBUN 6c 7 seõ cho gíaù
trò cuûa 6 íaø 11 ví duï treân taêng 7 xong roàí môùí gaùn cho 6. khí
ta víeát 7 c BUN 6 c 7N 6 seõ nhaän gíaù trò BU bôûí vì 7 gaùn
gíaù trò BU cho 6 xong môùí taêng íeân B.
Thöù töï öu tíeân trong pheùp toaùn soá hoïc:
Cao *huti ++ - -
„ ?T": #Gt *g-i@
ƒ € e
Thu0 *huti + -
Gh*ông 2. !ie>u th*ùc #H]=re,,ion% 29
1.11.#. &oaùn t'û 0uan heä 1a$ !ogic
Trong ngoân ngöõ C, gíaù trò t"ue íaø gíaù trò khaùc U vaø
2alse íaø gíaù trò baèng U. Caùc pheùp toaùn quan heä vaø íogíc
thöôøng ñöôïc söû duïng chung vôùí nhau. Caû pheùp toaùn quan
heä vaø íogíc coù thöù töï öu tíeân thaáp hôn toaùn töû soá hoïc.
CFc 0hv0 toF* Aua* h[
ToF* t‚ k *gh=a
L L,* hI*
Lc L,* hI* hosc $‡*g
K Nh} hI*
Kc Nh} hI* hosc $‡*g
cc B‡*g
^c OhFc
ToF* t‚ logic
ToF* t‚ k *gh=a
ff ANC
ˆˆ OR
^ NOT
Bảng 2-5. Phv0 toF* logic v• Aua* h[
Thöù töï öu tíeân cuûa caùc pheùp toaùn íogíc vaø quan heä:
Cao *huti !
L Lc K Kc
cc ^c
ff
Thu0 *huti ||
1.11.2. &oaùn t'û bit
Toaùn töû bit thöïc híeän víeäc kíeám tra, thíeát íaäp hoaëc
ñaáy moät bit trong moät b?te hoaëc moät töø töông öùng vôùí
kíeáu döõ ííeäu cha" hoaëc i*t. Khoâng theá duøng toaùn töû bit
cho kíeáu döõ ííeäu thöïc (2loat, dou$le, lo*g dou$le). Toaùn töû
6 ShaQn Z. MgoFn ng*N la"= trLnh G
naøy aùp duïng cho töøng bit cuûa toaùn haïng.
ToF* t‚ k *gh=a
f ANC
ˆ OR
‰ Š7clusive OR?‹OR@
Œ Phq* $• c)a B?NOT@
LL r>6 0hmi
KK r>6 t"Fi
Bảng 2-6. ToF* t‚ $it
Toaùn töû bit thöôøng duøng ñeá íaäp trình cho caùc thíeát bò,
trong ñoù moãí bit seõ ñaùnh daáu moät traïng thaùí naøo ñoù cuûa
thíeát bò. Noáí vôùí caùc pheùp toaùn ñaáy bit, caùc bit cuoáí cuøng
seõ ñöôïc cheøn vaøo caùc soá khoâng. Trong tröôøng hôïp soá
nguyeân coù daáu, bit daáu seõ ñöôïc boû qua. Chuù yù, moãí íaàn
ñaáy traùí seõ nhaân soá ñoù cho 2 vaø ñaáy phaûí seõ chía cho 2.
Baûng sau theá híeän moät vaøí ví duï veà toaùn töû ñaáy bit.
u*sig*ed cha" 7N BiPu diQ* *h' 0h{* c)a 7 …iF t"' c)a 7
7cTN UUUUUBBB T
7 c 7KKBN UUUUBBBU BY
7 c 7KK9N UBBBUUUU BB2
7 c 7KK2N BBUUUUUU BZ2
7 c 7LLBN UBBUUUUU ZW
7 c 7LL2N UUUBBUUU 2Y
ƒMyi lq* d>6 t"Fi sŽ *h{* 2% th-*g ti* sŽ $' #ut sau 5hi
7KK2 <>6 <+* cuni%
ƒƒMyi lq* <>6 0hmi sŽ chia 2%
Bảng 2-7. Nh{* v• chia t"o*g toF* t‚ <>6 $it
1.11.3. &oaùn t'û 4
Cuù phaùp:
Š70B | Š702 i Š709N
Gh*ông 2. !ie>u th*ùc #H]=re,,ion% 1
Neáu Š70B cho gíaù trò íaø ñuùng, Š702 seõ ñöôïc tính toaùn
vaø traû veà. Neáu Š70B saí, Š709 seõ ñöôïc tính vaø traû veà.
1.11.5. &oaùn t'û 6 1a$ toaùn t'û 7
Con troû íaø ñòa chæ boä nhôù cuûa moät ñoáí töôïng naøo
ñoù. Bíeán con troû íaø bíeán ñöôïc khaí baùo ñeá gíöõ dñòa chæ
moät ñoáí töôïng. Pheùp toaùn f traû veà ñòa chæ boä nhôù cuûa
toaùn haïn. Ví duï # c fcou*tN khí ñoù noù ñaët trong # ñòa chæ
cuûa bíeán cou*t. Neá híeáu roõ hôn ta coù theá ví duï ñòa chæ
cuûa cou*t íaø vò trí 2UU trong boä nhôù vaø noù chöùa gíaù trò
BUU. Sau caâu íeänh gaùn treân, # coù gíaù trò íaø 2UU. Pheùp toaùn
ƒ traû veà gíaù trò cuûa bíeán coù ñòa chæ ñöôïc íöu tröõ trong con
troû. Ví duï # chöùa vò trí cuûa bíeán cou*t khí ñoù A c ƒ#N A chöùa
gíaù trò ñöôïc íöu trong bíeán cou*t (BUU). Trong tröôøng hôïp naøy
ta coù theá noùí, A nhaän gíaù trò taïí ñòa chæ #. Toaùn töû f vaø ƒ
coù thöù töï öu tíeân cao hôn caû toaùn töû soá hoïc. Bíeán gíöõ ñòa
chæ boä nhôù (con troû) ñöôïc khaí baùo baèng caùch theâm ƒ
tröôùc teân bíeán.
Ví duï cha" ƒchN OU ñaây ch khoâng phaûí íaø moät kí töï maø
noù íaø moät con troû troû ñeán kí töï. Kíeáu döõ ííeäu maø con troû
troû ñeán ñöôïc goïí íaø kíeáu döõ ííeäu cô baûn cuûa con troû. Ví
duï:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t ta"getX sou"ceN
i*t ƒ#N
sou"ce c BUN
# c fsou"ceN
ta"get c ƒ#N
2 ShaQn Z. MgoFn ng*N la"= trLnh G
0"i*t2?tedtX ta"get@N
getch?@N
4
1.11.8. &oaùn t'û ,i9eo:
Traû veà ñoä daøí baèng b?te cuûa moät bíeán hoaëc moät
kíeáu ñaët trong daáu ngoaëc ñôn. Ví duï sau cho bíeát kích thöôùc
cuûa soá thöïc 2.
2loat 2N
0"i*t2?MedMXsi8eo2?2@@N
Neá tính kích thöôùc cuûa moät kíeáu, ta ñaët kíeáu ñoù trong
daáu ngoaëc ñôn.
0"i*t2?MedMX si8eo2?i*t@@N
1.11.9. &oaùn t'û ;aáu <ha*) (="
Toaùn töû daáu phaáy thöôøng keát hôïp vôùí nhíeàu bíeáu
thöùc. Thoâng thöôøng toaùn töû naøy söû duïng chung vôùí íeänh
gaùn. Gíaù trò cuûa íeänh gaùn íaø gíaù trò cuûa bíeáu thöùc cuoáí
cuøng trong danh saùch caùc bíeáu thöùc ñöôïc ngaên caùch nhau
bôûí daáu phaáy.
Ví duï 7 c ?6 c 9X 6 B@N khí ñoù 7 seõ coù gíaù trò íaø 4.
1.11.1>. &oaùn t'û . 1a$ ?@
Caùc toaùn töû naøy duøng ñeá truy xuaát ñeán caùc thaønh
phaàn trong caáu truùc. Caáu truùc íaø kíeáu döõ ííeäu bao goùí.
Caùc toaùn töû treân cuõng ñöôïc duøng ñeá truy xuaát ñeán caùc
thaønh phaàn cuûa moät íôùp. Ví duï:
st"uct e#0lo6ee
3
cha" *a#egRUhN
i*t ageN
2loat !age
4 e#0N
Gh*ông 2. !ie>u th*ùc #H]=re,,ion%
st"uct e#0lo6ee ƒ0ce#0N
Khí ñoù ñeá truy xuaát ñeán caùc thaønh phaàn trong caáu
truùc treân ta duøng: e#0%age, .Tuy nhíeân, neáu duøng con troû
ñeán caáu truùc, ñeá truy xuaát ñeán töøng phaàn töû ta duøng cuù
phaùp 0-Lage
1.11.11. &oaùn t'û (" 1a$ AB
Toaùn töû ?@ duøng ñeá taêng thöù töï öu tíeân cuûa bíeáu
thöùc con trong moät bíeáu thöùc khaùc. Toaùn töû gh xaùc ñònh
phaàn töû cuûa maûng. Khí ñöa moät maûng, bíeáu thöùc beân
trong daáu ngoaëc vuoâng seõ cung caáp chæ soá cuûa maûng.
1.11.12. Coä 'u tieDn cuûa taát caû caùc <heù< toaùn
Cao *hut ?@ gh −L %
^ Œ „„ ?t60e@ ƒ f si8eo2
ƒ € e

KK LL
K Kc L Lc
cc ^c
f

ˆ
ff
ˆˆ
|i
c c −c ƒc €c etc%
Thu0 *hut X
Bảng 2-8. Th• tx Hu ti•* c)a toF* t‚ t"o*g C
1.12. BZQMO I=DWS (E[HJQ\\ZB@"
Toaùn töû, haèng soá, bíeán vaø haøm íaø nhöõng thaønh
& ShaQn Z. MgoFn ng*N la"= trLnh G
phaàn cô baûn taïo neân bíeáu thöùc. Moät bíeáu thöùc trong C íaø
söï keát hôïp hôïp íeä cuûa boán thaønh phaàn treân.
1.12.1. &h'ù t'ï tính toaùn
Trong moät bíeáu thöùc coù nhíeàu bíeáu thöùc con, trình
bíeân dòch seõ töï ñoäng saép xeáp ñeá sính ra moät maõ toáí öu.
Ngöôøí íaäp trình seõ khoâng bíeát ñöôïc bíeáu thöùc con naøo thöïc
híeän tröôùc. Ví duï 7 c 2B?@ 22?@N khí ñoù, ta khoâng bíeát
haøm 2B?@ hay 22?@ seõ goïí tröôùc.
1.12.2. (hu)e*n +o*i kie*u trong bie*u th'ùc
Khí haèng hoaëc bíeán coù kíeáu khaùc nhau ñöôïc troän íaãn
trong moät bíeáu thöùc, taát caû seõ chuyeán sang kíeáu döõ ííeäu
phuø hôïp. Trình bíeân dòch seõ chuyeán kíeáu döõ ííeäu cuûa taát
caû caùc toaùn haïng sang kíeáu íôùn nhaát. Naàu tíeân taát caû
caùc gíaù trò kíeáu cha" vaø sho"t i*t seõ töï ñoäng chuyeán sang
kíeáu i*t. Sau ñoù neáu toaùn haïng naøo coù kíeáu íôùn hôn thì
bíeáu thöùc seõ íaáy kíeáu cuûa toaùn haïng ñoù. Ví duï:
IF a* o0e"a*d is a FB@A ]BOVFQ
Gh*ông 2. !ie>u th*ùc #H]=re,,ion% 4
THŠN the seco*d is co*ve"ted to FB@A ]BOVFQ
ŠLSŠ IF a* o0e"a*d is a ]BOVFQ
THŠN the seco*d is co*ve"ted to ]BOVFQ
ŠLSŠ IF a* o0e"a*d is a `FB>I
THŠN the seco*d is co*ve"ted to `FB>I
ŠLSŠ IF a* o0e"a*d is a* O@\ZA@Q] FB@A
THŠN the seco*d is co*ve"ted to O@\ZA@Q] FB@A
ŠLSŠ IF a* o0e"a*d is FB@A
THŠN the seco*d is co*ve"ted to FB@A
ŠLSŠ IF a* o0e"a*d is O@\ZA@Q] Z@I
THŠN the seco*d is co*ve"ted to O@\ZA@Q] Z@I
Coù moät tröôøng hôïp ñaëc bíeät: neáu moät toaùn haïng íaø
lo*g vaø toaùn haïng coøn íaïí íaø u*sig*ed i*t, vaø neáu gíaù trò
cuûa u*sig*ed i*t khoâng theá chuyeán sang kíeáu lo*g thì caû
haí toaùn haïng seõ chuyeán sang kíeáu u*sig*ed lo*g.
1.12.3. EF< kie*u
Ta coù theá baét buoäc moät bíeáu thöùc naøo ñoù sang moät
kíeáu mong muoán. Tình huoáng naøy goïí íaø eùp kíeáu. Daïng
toáng quaùt cuûa eùp kíeáu íaø: ?t60e@ e70"essio*N trong ñoù
t60e íaø kíeáu döõ ííeäu caàn chuyeán sang, e70"essio* íaø bíeáu
thöùc caàn chuyeán.
Ví duï: thoâng thöôøng bíeáu thöùc 7€2 íaø kíeáu soá nguyeân
neáu 7 íaø soá nguyeân, neáu muoán 7€2 íaø moät kíeáu soá thöïc
ta duøng bíeáu thöùc sau: ?2loat@ 7€2;
1.12.#. Khoaûng troáng 1a$ ;aáu ngoaGc +ôn
Ta coù theá theâm nhíeàu khoaûng troáng vaø daáu ngoaëc
ñôn ñeá bíeáu thöùc deã ñoïc vaø roõ raøng hôn. Ví duï 7cBU€6-
?B2T€7@N khí ñoù ta coù theá víeát 7 c BU € 6 - ?B2T € 7@N
Gíaûm hoaëc taêng daáu ngoaëc ñôn khoâng phaùt sính ra íoãí
+ ShaQn Z. MgoFn ng*N la"= trLnh G
vaø íaøm chaäm víeäc tính toaùn. Do ñoù ta söû duïng daáu ngoaëc
ñôn ñeá íaøm roõ raøng thöù töï öu tíeân cuûa caùc pheùp toaùn
trong bíeáu thöùc. Ví duï: 7 c 6 € 9 „ 9Y ƒ te#0 B2TN ta coù
theá víeát 7 c ?6 € 9@ „ ?9Y ƒ te#0@ B2TN
1.12.2. Vieát nhanh cuûa <heù< toaùn gaùn
Khí víeát 7 c 7 BUN ta coù theá víeát 7 c BUN toaùn töû c
thoâng baùo cho trình bíeân dòch bíeát gaùn 7 baèng gíaù trò 7
coäng 10. Pheùp toaùn gaùn nhanh naøy íaøm víeäc treân taát caû
caùc pheùp toaùn haí ngoâí. Toáng quaùt, bíeáu thöùc daïng v c v
O e ta coù theá víeát íaïí v Oc e.
1.13. V>UB J> ]DE FZQGO SL V>T@
1.13.1. Ha$/ in giaù trò ra /a$n hInh
Cuù phaùp:
i*t 0"i*t2?cha" ƒ2o"#atX`@N
Haøm ín ra maøn hình danh saùch caùc gíaù trò cuøng vôùí
khuoân daïng döõ ííeäu ra maøn hình. 2o"#at ôû ñaây coù haí daïng:
1. Kí töï ñöôïc ín ra maøn hình; 2. Kí töï ñònh daïng ñeá ín döõ ííeäu
ra maøn hình. Kí töï ñònh daïng baét ñaàu baèng daáu e theo sau íaø
moät kí töï ñíeàu khíeán. Ví duï ñeá ín ra maøn hình gíaù trò cuûa
bíeán nguyeân 7 ta víeát nhö sau:
0"i*t2?Mgia t"i cua 7 laiedMX 7@N
Neá ín ra maøn hình gíaù trò cuûa bíeáu thöùc thöïc 9%V ƒ Z
2
0"i*t2?Mgia t"i $ieu thucie2MX9%V ƒ Z 2@N
Haøm 0"i*t2?@ traû veà gíaù trò íaø soá kí töï ñöôïc ín ra
maøn hình. Neáu traû veà gíaù trò aâm, haøm ñaõ bò íoãí. Neá
daønh moät soá vò trí ñeá ín gíaù trò ta cheøn gíöõa daáu e vaø kí
Gh*ông 2. !ie>u th*ùc #H]=re,,ion% 7
töï ñíeàu khíeán moät soá nguyeân, soá nguyeân naøy chính íaø soá
kí töï daønh ñeá ín ra gíaù trò ñoù.
1.13.1.1 Baûng caùc kí t'ï +ònh ;aïng cho ha$/ <rint:("
Mj CD*g
ec O( tx
ed Sn *gu6•* ] dD*g th/0 0h{* c; duu
ei Sn *gu6•* ] dD*g th/0 0h{* c; duu
ee O( hi[u 5hoa hzc ?Scie*ti2ic *otatio*@ e thH•*g
eŠ O( hi[u 5hoa hzc ?Scie*ti2ic *otatio*@ e hoa
e2 Sn thxc
eg
C•*g ee hosc e2 *+u dD*g *•o *g‘* hI* ?eeX e thH•*g@
?i2 eeX uses lo!e"case e@
e… C•*g ee hosc e2 *+u dD*g *•o *g‘* hI* ?eŠX Š hoa@
eo Sn h[ tF# 5h-*g duu
es Chuyi 5( tx
eu Sn *gu6•* 5h-*g duu
e7 Sn *gu6•* 5h-*g duu h[ BW ?ch. thH•*g@
e‹ Sn *gu6•* 5h-*g duu h[ BW ?ch. hoa@
e0 HiP* th' co* t"}
e* Hi[* sn 5( tx <j vi+t "a #•* h1*h
ee I* duu 0hq* t"†#
Bảng 2-10. rst tm 2o"#at c)a h•# 0"i*t2
1.13.1.2 JF nghKa cuûa caùc kí hieäu
Neá ín moät soá nguyeân ta duøng ñònh daïng ed hoaëc ei haí
daïng naøy íaø töông ñöông.
Neá ín moät gíaù trò khoâng daáu ta duøng eu.
Neá ín moät soá thöïc daáu phaáy ñoäng kíeáu 2loat ta duøng
e2.
Neá ín moät soá thöïc daáu phaáy ñoäng theo kí híeäu khoa
- ShaQn Z. MgoFn ng*N la"= trLnh G
hoïc kíeáu dou$le ta duøng ee hoaëc eŠ. Soá thöïc theo kí híeäu
khoa hoïc coù daïng nhö sau: 7%dddddŠ€-66. Neáu muoán híeän kí
híeäu theo daïng Š hoa thì duøng eŠ, vaø ngöôïc íaïí.
Ta coù theá duøng kí híeäu eg hoaëc e… ñeá thay theá kí híeäu
e2 hoaëc ee. Khí söû duïng kí híeäu naøy, trình bíeân dòch seõ töï
ñoäng choïn kíeáu theá híeän soá thöïc sao cho coù ñoä daøí ngaén
nhaát. Neáu muoán duøng kí híeäu Š ta duøng e… vaø ngöôïc íaïí. Ví
duï:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
i*t #ai*?void@3
dou$le 2N
2o"?2cB%UN 2KB%UeBUN 2c2ƒBU@
0"i*t2?teg tX 2@N
getch?@N
4
Keát quaû híeän ra maøn hình nhö sau:
B BU BUU BUUU BUUUU BUUUUU BeUW BeUT BeUR BeUZ
Neá ín moät soá nguyeân khoâng daáu ôû daïng cô soá 8
hoaëc 16 ta duøng kí híeäu eo (chöõ o) hoaëc e7 töông öùng. Noáí
vôùí heä 16, neáu muoán duøng caùc kí híeäu chöõ hoa ta duøng kí
híeäu e‹. Ví duï sau ín ra maøn hình gíaù trò töø 0 ñeán 255 ôû daïng
cô soá 8, 16.
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@3
u*sig*ed *u#N
2o"?*u#cUN *u#K2VWN *u#@3
0"i*t2?teo tX *u#@N
0"i*t2?te7 tX *u#@N
0"i*t2?te‹l*tX *u#@N
4
Gh*ông 2. !ie>u th*ùc #H]=re,,ion% 9
getch?@N
4
Neá ín ñòa chæ cuûa moät bíeán ra maøn hình ta duøng kí
híeäu e0, ñònh daïng naøy seõ ín ra maøn hình ñòa chæ trong maùy
cuûa bíeán.
Neá thoâng baùo cho bíeát haøm 0"i*t2 ñaõ ín ra bao nhíeâu
kí töï ta duøng kí híeäu e*. Kí híeäu e* seõ taûí íeân bíeán ñöôïc troû
bôûí tham soá töông öùng soá kí töï maø haøm 0"i*t2 ñaõ ín ra
maøn hình. Xeùt ví duï sau:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@3
i*t cou*tN
0"i*t2?tthise* is a testl*tX fcou*t@N
0"i*t2?tedtX cou*t@N
getch?@N
4
Ví duï treân seõ ín ra maøn hình doøng chöõ Mthis is a
testM vaø con soá 4. Níeàu naøy cho bíeát, tröôùc khí gaëp kí híeäu
e* haøm 0"i*t2?@ ñaõ ín ra 4 kí töï.
1.13.1.3 Ln /oät giaù trò 1ôùi +oä roäng cho tr'ôùc
Neá ín ra maøn hình moät gíaù trò vôùí ñoä roäng cho tröôùc ta
theâm gíöõa kí töï e vaø kí híeäu ñònh daïng moät soá nguyeân. Soá
nguyeân naøy chính soá vò trí toáí thíeáu ñeá ín gíaù trò ra maøn
hình. Xeùt ví duï sau:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@3
dou$le ite#N
ite# c BU%B29UYN
0"i*t2?te2l*tX ite#@N
0"i*t2?teBU2l*tX ite#@N
&6 ShaQn Z. MgoFn ng*N la"= trLnh G
0"i*t2?teUB22l*tX ite#@N
getch?@N
4
Keát quaû xuaát híeän nhö sau:
BU%B29UYU
BU%B29UYU
UUUBU%B29UYU
1.13.1.# Ln /oät giaù trò 1ôùi +oä chính Maùc cho tr'ôùc
Neá ín moät gíaù trò vôùí ñoä chính xaùc cho tröôùc ta söû
duïng ñònh daïng 7%6 vôùí 7, 6 íaø caùc gíaù trò nguyeân, yù nghóa
cuûa noù phuï thuoäc vaøo kíeáu döõ ííeäu.
Noáí vôùí soá thöïc, khí ta söû duïng ñònh daïng e2, eŠ, ee, 7
seõ xaùc ñònh soá vò trí ñeá híeán thò soá thöïc vaø 6 xaùc ñònh
soá chöõ soá sau daáu thaäp phaân. Neáu khoâng coù ñònh daïng 6,
chöông trình seõ ín 6 chöõ soá sau daáu thaäp phaân. Ví duï eBU%Y2
seõ ín ra maøn hình moät soá thöïc coù ñoä roäng baèng 10, vaø soá
chöõ soá sau daáu thaäp phaân íaø 4.
Noáí vôùí kíeáu chuoãí kí töï, 6 cho bíeát ñoä roäng íôùn nhaát
maø chuoãí coù theá híeán thò. Ví duï eV%Ts seõ ín ra maøn hình
moät chuoãí kí töï coù ñoä roäng íaø 5 vaø khoâng ñöôïc vöôïc quaù
7. Neáu chuoãí kí töï daøí hôn ñoä roäng cöïc ñaïí thì caùc kí töï cuoáí
cuøng seõ bò caét bôùt.
Noáí vôùí soá nguyeân, ñoä chính xaùc seõ chæ ra soá chöõ
soá toáí thíeáu seõ ñöôïc híeán thò. Neáu soá chöõ soá nhoû hôn 6,
chöông trình seõ theâm vaøo tröôùc caùc soá khoâng sao cho soá
chöõ soá baèng 6. Xeùt ví duï sau:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@3
0"i*t2?te%Y2l*tX B29%B29YVWT@N
Gh*ông 2. !ie>u th*ùc #H]=re,,ion% &1
0"i*t2?te%Rdl*tX BUUU@N
0"i*t2?teBU%BVsl*tX tThis is a si#0le test%t@N
getch?@N
4
Keát quaû nhö sau:
B29%B29V
UUUUBUUU
This is a si#0l
1.13.1.2 (anh !eN cho caùc giaù trò
Ngaàm ñònh caùc gíaù trò ñöôïc víeát töø phaûí qua traùí. Töùc
íaø neáu ñoä roäng cuûa ñònh daïng íôùn hôn ñoä roäng cuûa döõ
ííeäu thì döõ ííeäu seõ ñöôïc víeát töø phaûí qua. Trong tröôøng hôïp
naøy, ñeá víeát döõ ííeäu töø beân traùí qua ta theâm daáu tröø sau
daáu e. Xeùt ví duï sau:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@3
0"i*t2?t"ight-busti2iedieRdl*tX BUU@N
0"i*t2?tle2t-busti2iedie-Rdl*tX BUU@N
getch?@N
4
"ight-busti2iedi BUU
le2t-busti2iediBUU
1.13.1.3 Ln caùc kie*u ;'O !ieäu khaùc
Coù haí daïng boá nghóa cho pheùp haøm 0"i*t2 híeán thò
soá nguyeân ngaén vaø daøí. Caùc boá nghóa naøy aùp duïng cho
caùc ñònh daïng i, d, u, o, 7. Kí híeäu l ín soá nguyeân daøí, ví duï
eld ín ra soá nguyeân kíeáu lo*g i*t. Kí híeäu h, ín soá nguyeân
ngaén, ví duï ehu ín ra soá nguyeân ngaén. Boá nghóa L ñöùng
tröôùc caùc ñònh daïng e, 2, g cho bíeát ñoù íaø kíeáu lo*g dou$le.
1.13.2. Ha$/ nhaä< ;'O !ieäu t'$ ba$n <hí/
&2 ShaQn Z. MgoFn ng*N la"= trLnh G
Cuù phaùp:
sca*2?cha" ƒco*t"ol_st"i*gX va"_list@N
Nhaäp moät gíaù trò töø baøn phím vaø gaùn gíaù trò ñoù vaøo
moät bíeán, ví duï nhaäp moät gíaù trò töø baøn phím vaøo bíeán
nguyeân 7:
sca*2?MedMX f7@N
Haøm traû veà gíaù trò íaø soá ñoáí töôïng ñöôïc gaùn cho
bíeán, neáu gaëp íoãí haøm traû veà gíaù trò íaø ŠOF. Chuoãí ñíeàu
khíeán cho bíeát caùc gíaù trò ñoïc vaøo bíeán ñöôïc troû bôûí tham
soá nhö theá naøo. Chuoãí ñíeàu khíeán bao goàm ba íoaïí nhö sau:
Naëc taû ñònh daïng
Caùc kí töï troáng
Caùc kí töï khoâng phaûí íaø khoaûng troáng
1.13.2.1 CaGc taû +ònh ;aïng
Naët tröôùc daáu e, thoâng baùo cho haøm sca*2?@ bíeát caàn
ñoïc vaøo íoaïí döõ ííeäu naøo. Nònh daïng theo traät töï töø traùí
qua phaûí töông öùng vôùí danh saùch caùc bíeán.
Neá ñoïc moät soá nguyeân ta duøng ed hoaëc ei. Neá ñoïc
moät soá nguyeân döôùí daïng cô soá 8 hoaëc cô soá 16 ta duøng
ñaët taû eo hoaëc e7 töông öùng. Soá ôû heä 16 coù theá víeát
baèng chöõ hoa hay chöõ thöôøng.
Neá ñoïc moät soá thöïc bíeáu díeãn döôùí daïng kí híeäu khoa
hoïc hoaëc daïng chuaán ta duøng kí híeäu eeX e2X eg.
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@3
i*t iX bN
sca*2?teoe7tX fiX fb@N
Gh*ông 2. !ie>u th*ùc #H]=re,,ion% &
0"i*t2?ted edtX iX b@N
getch?@N
4
Chöông trình treân ñoïc vaøo haí soá nguyeân, soá nguyeân i
nhaäp vaøo theo cô soá 8, soá nguyeân b theo cô soá 16. Sau ñoù
híeän ra maøn hình gíaù trò cuûa i vaø b ôû daïng thaäp phaân.
1.13.2.2 Baûng caùc kí t'ï +ònh ;aïng cho ha$/ ,can:("
Mj k *gh=a
ec rzc #Gt 5( tx
ed€C rzc #Gt sn *gu6•* th/0 0h{*% i*t€lo*g
ei€C rzc sn *gu6•* th/0 0h{*% i*t€lo*g
ee rzc sn thxc duu 0h>6 <G*g
e2 rzc sn thxc duu 0h>6 <G*g
eg rzc sn thxc duu 0h>6 <G*g
eo rzc #Gt sn ] h[ R
es rzc #Gt chuyi 5( tx
e7€‹ rzc #Gt sn *gu6•* ] h[ BW% i*t€lo*g
e0 rzc #Gt co* t"}
e* Nh/* #Gt sn *gu6•* l• sn 5( tx <zc <H\c
eu€a rzc #Gt sn *gu6•* 5h-*g duu% i*t€lo*g
egh ~uvt #Gt t/0 5( tx t"o*g duu gh
ee rzc #Gt duu 0hq* t"†#
Bảng 2-11. rst tm 5hu-* dD*g h•# sca*2?@
Haøm sca*2?@ seõ ngöøng ñoïc moät gíaù trò soá neáu xuaát
híeän moät kí töï khoâng phaûí soá.
1.13.2.3 Coïc t'$ng kí t'ï rieDng bieät
Ta coù theá duøng ñaët taû ec ñeá ñoïc töøng kí töï ríeâng
bíeät. Tuy nhíeân ñíeàu naøy deã gaây ra nhöõng saí soùt. Thoâng
thöôøng, caùc khoaûng troáng, kí híeäu xuoáng doøng duøng ñeá
phaân bíeät caùc tröôøng khí ñoïc döõ ííeäu. Noáí vôùí kíeáu kí töï thì
&& ShaQn Z. MgoFn ng*N la"= trLnh G
khoâng. Ví duï:
sca*2?tececectX faX f$X fc@N
Khí nhaäp M7 6M íuùc ñoù a íaø 7X $ íaø khoaûng troáng vaø c
íaø 6.
1.13.2.# Coïc /oät chuoPi kí t'ï
Duøng ñaët taû es ñeá ñoïc moät chuoãí. Haøm sca*2?@ ñoïc
moät chuoãí cho ñeán khí gaëp moät khoaûng troáng ñaàu tíeân.
Caùc kí töï ñaõ ñoïc seõ ñöôïc gaùn cho maûng caùc kí töï ñöôïc troû
bôûí con troû trong tham soá vaø chuoãí nhaän ñöôïc seõ keát thuùc
baèng kí töï roãng.
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@3
cha" st"gRUhN
0"i*t2?tŠ*te" a st"i*gi t@N
sca*2?testX st"@N
0"i*t2?tHe"ews 6ou" st"i*gi estX st"@N
getch?@N
4
Gíaû söû ta nhaäp Mhello !o"ldM, chöông trình chæ ín ra
doøng MhelloM
1.13.2.2 Q'û ;uïng taä< ,can,et
Sca*set íaø taäp caùc kí töï ñöôïc ñònh nghóa tröôùc. Khí
haøm sca*2?@ xöû íyù taäp sca*set, noù chæ nhaäp nhöõng kí töï
thuoäc taäp naøy. Kí töï ñöôïc ñoïc seõ ñöôïc gaùn ñeán moät maûng
caùc kí töï ñöôïc troû bôûí tham soá cuûa taäp sca*set töông öùng.
Nònh nghóa caùc kí töï trong taäp sca*set vaøo caëp daáu gh. Cuï
theá nhö sau:
eg‹’“h
Trong ñoù ‹’“ íaø caùc kí töï. Khí nhaäp döõ ííeäu, haøm
Gh*ông 2. !ie>u th*ùc #H]=re,,ion% &4
sca*2?@ baét ñaàu ñoïc caùc kí töï cho ñeán khí baét gaëp moät kí
töï khoâng phaûí trong taäp sca*set. Maûng naøy chöùa chuoãí
ñöôïc keát thuùc baèng roãng. Xeùt ví duï:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@3
i*t iN
cha" st"gRUhX st"2gRUhN
sca*2?tedega$cde2ghestX fiX st"X st"2@N
0"i*t2?ted es estX iX st"X st"2@N
getch?@N
4
Khí nhaäp B29a$cdt6e, chöông trình seõ ín ra B29 a$cd t6e.
Bôûí vì t khoâng thuoäc taäp sca*set, do ñoù haøm sca*2 seõ
ngöøng ñoïc vaøo bíeán st" khí gaëp chöõ t, caùc kí töï coøn íaïí seõ
ñöôïc ñoïc vaøo st"2.
Neá chæ ra moät taäp ñaûo ngöôïc, ta duøng kí híeäu ‰. Kí
híeäu naøy cho bíeát nhaäp nhöõng kí töï maø khoâng thuoäc taäp
sca*set. Ta coù theá taïo ra moät taäp caùc kí töï ííeân tuïc baèng
moät daáu noáí ví duï nhö ega-8h. Taäp sca*set coù phaân bíeät
chöõ hoa vaø chöõ thöôøng.
1.13.2.3 oaïi boû nh'Ong khoaûng troáng khoDng caNn
thieát
Moät kí töï troáng trong chuoãí ñíeàu khíeán íaøm cho haøm
sca*2?@ boû qua nhöõng khoaûng troáng ôû ñaàu in=ut ,trea1.
1.13.2.5 Rh'Ong kí t'ï khoDng <haûi !a$ khoaûng troáng
trong chuoPi +ieNu khie*n
Moät kí töï khoâng phaûí troáng trong chuoãí ñíeàu khíeán
íaøm cho haøm sca*2?@ ñoïc vaø boû qua nhöõng kí töï naøy trong
in=ut ,trea1. Ví duï MedXedM haøm ñoïc vaøo moät soá nguyeân,
&+ ShaQn Z. MgoFn ng*N la"= trLnh G
ñoïc vaø íoaïí boû moät daáu phaáy vaø ñoïc moät soá nguyeân
khaùc.
1.13.2.8 &a <haûi gôûi +eán ha$/ ,can:(" +òa chS
Taát caû caùc bíeán trong haøm sca*2?@ ñöôïc söû duïng ñeá
nhaän gíaù trò phaûí gôûí baèng ñòa chæ. Níeàu naøy coù nghóa
raèng taát caû caùc tham soá phaûí íaø nhöõng con troû.
1.1%. C>CO =BTZ IJ>cS @A=ZQGX P>U V>UZ I>GH
1.1#.1. (aDu hoûi traTc nghieä/
C>CO 1. Teân naøo ñaët !>Z quy ñònh cuûa C:
a@ …iai_Pt"i*h_Bac_2N $@ Nga6si*hN
c@ Noi si*hN d@Sv2UUU N
C>CO 2. Muïc naøo coù caùc Teân ñeàu ñaët YOW@A quy ñònh cuûa
C:
a@ 7BX ‹-2N $@ ‹7BX ‹2N c@ CONSTX ‹_29YN d@‹gBhX 72N
C>CO 3. Trong C, neáu muoán duøng íeänh xoùa maøn hình Círscr
thì phaûí khaí baùo theá naøo ôû ngay sau phaàn tíeâu ñeà chöông
trình:
a@Ji*clude Kstdio%hL $@ Ji*clude Kco*io%hL
c@Ji*clude Kstdli$%hLN d@ 5h-*g 5hai $Fo g1N
C>CO %. Bíeáu thöùc sau coù kíeáu döõ ííeäu íaø gì? Gíaù trò íaø bao
nhíeâu?
i*t iN
2loat 2N
cha" chN
icBUN
2 c 9N
chcdAdN
2 c 2i-chN
i c 2ƒichN
ch c 2ƒi2ƒchN
Gh*ông 2. !ie>u th*ùc #H]=re,,ion% &7
C>CO ,. Cho bíeát caùc bíeáu thöùc sau: bíeáu thöùc naøo saí?
Bíeáu thöùc ñuùng coù gíaù trò íaø bao nhíeâu?
Gíaû söû ta khaí baùo nhö sau:
i*t icBUN
cha" chcdadN
Khí ñoù caùc bíeáu thöùc sau: bíeáu thöùc naøo saí, bíeáu
thöùc ñuùng cho gíaù trò íaø bao nhíeâu?
a% i c ?ich@N $% i c i ch
c% ch c chN d% ch c chN
e% ch c ch - i
1.1#.2. Ba$i taä<
C>CO 1. Víeát chöông trình nhaäp vaøo moät toáng soá tíeàn, bíeát
raèng coù ba íoaïí meänh gíaù tíeàn íaø 100.000 VNN, 50.000VNN
vaø 10.000VNN. Cho bíeát toáng soá tíeàn treân coù ít nhaát íaø bao
nhíeâu tôø töø caùc meänh gíaù ñaõ bíeát.
C>CO 2. Víeát chöông trình nhaäp vaøo soá gíaây, ín ra maøn hình
soá gíôø, phuùt vaø gíaây theo ñònh daïng hhi##iss.
C>CO 3. Nhaäp vaøo ba soá thöïc, tìm soá íôùn nhaát cuûa ba soá
ñoù.
C>CO %. Nhaäp vaøo:
Löông ngaøy coâng (LNC)
Soá ngaøy coâng quy ñònh (NCOD)
Soá ngaøy ñaõ íaøm (SNC)
Víeát chöông trình tính soá tíeàn íöông (TL) bíeát raèng TL =
SNC×LNC. Neáu SNC vöôït quaù NCOD thì soá ngaøy vöôït nhaân 2.
Gh*ông . GaFu le"nh #Ttate1ent% &9
C=DL@A 3. C>CO FQG@= (!I>IQXQ@I"
Noùí moät caùch toáng quaùt thì caâu íeänh íaø moät phaàn
cuûa chöông trình maø noù coù theá thöïc thí. Moät caâu íeänh chæ
cho maùy bíeát moät haønh ñoäng. Ngoân ngöõ C phaân caâu íeänh
thaønh caùc nhoùm sau:
Bíeáu thöùc
Khoáí íeänh
Leänh íöïa choïn
Leänh íaëp
Leänh nhaûy
Caâu íeänh íöïa choïn ñoù íaø i2, s!itch; caâu íeänh íaëp ñoù
íaø !hile, 2o", do-!hile; caâu íeänh nhaûy íaø $"ea5, co*ti*ue,
goto, "etu"*; nhaõn thöôøng ñí vôùí íeänh goto. Bíeáu thöùc bao
goàm caùc bíeáu thöùc hôïp íeä. Khoáí íeänh íaø caùc íeänh ñaët
trong caëp daáu moùc 34.
1.1,. 0=BRZ FQG@=
Khoáí íeänh íaø moät nhoùm caùc íeänh ñôn gíaûn coù quan
heä vôùí nhau vaø ñöôïc coí nhö íaø moät ñôn vò. Khoáí íeänh ñöôïc
ñaët gíöõa haí daáu moùc. Khoáí íeänh cuõng coøn ñöôïc goïí íaø
caâu íeänh phöùc hôïp.
1.1-. BZQMO I=DWS
Bíeáu thöùc íaø moät caâu íeänh ñôn gíaûn, keát thuùc bôûí
daáu chaám phaáy. Ví duï:
2u*c?@N
a c $ cN
$2?@N
46 ShaQn Z. MgoFn ng*N la"= trLnh G
N
1.1+. TJOQ P>U .>F\Q IJB@A C
Moät bíeáu thöùc ñíeàu kíeän chæ cho haí gíaù trò hoaëc
ñuùng hoaëc saí. Trong C, gíaù trò ñuùng íaø moät gíaù trò khaùc 0
bao goàm caû caùc gíaù trò aâm vaø gíaù trò saí íaø moät gíaù trò
baèng 0.
1.14. C>CO FQG@= FDd> S=Bd@
1.18.1. (aDu !eänh i:
Daïng toáng quaùt cuûa moät bíeáu thöùc ñíeàu kíeän nhö sau:
i2?e70"essio*@ state#e*tBN
else state#e*t2N
Trong ñoù state#e*tB vaø state#e*t2 coù theá íaø moät caâu
íeänh ñôn, moät khoáí íeänh, hoaëc khoâng coù gì. Meänh ñeà else
íaø tuøy choïn, coù theá coù hoaëc coù theá khoâng.
Neáu bíeáu thöùc cho gíaù trò ñuùng, state#e*tB seõ ñöôïc
thöïc híeän, ngoaøí ra state#e*t2 seõ ñöôïc thöïc híeän neáu coù
meänh ñeà else. Trong C, bíeáu thöùc ñíeàu kíeän phaûí coù kíeáu
nguyeân, kí töï, con troû hoaëc kíeáu thöïc. Ví duï:
Ji*clude Kstdio%hL
Ji*clude Kstdli$%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t #X gN
# c "a*d?@N
0"i*t2?MCoa* #ot soiM@N
sca*2?MedMX fg@N
i2?gcc#@ 0"i*t2?MƒƒƒCu*gƒƒƒM@N
getch?@N
4
Gh*ông . GaFu le"nh #Ttate1ent% 41
Chöông trình treân, cho pheùp nhaäp moät soá töø baøn phím.
Neáu soá vöøa nhaäp truøng vôùí soá ñöôïc sính ngaãu nhíeân thì ín
ra keát quaû íaø ñuùng. Chöông trình treân coù söû duïng haøm
"a*d?@. Haøm naøy sính moät soá ngaãu nhíeân töø 0 ñeán gíaù trò
cöïc ñaïí cuûa kíeáu soá nguyeân. Chöông trình coù theá söûa íaïí
cho ñaày ñuû hôn nhö sau:
Ji*clude Kstdio%hL
Ji*clude Kstdli$%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t #X gN
# c "a*d?@N
0"i*t2?MCoa* #ot soiM@N
sca*2?MedMX fg@N
i2?gcc#@ 0"i*t2?MƒƒƒCu*gƒƒƒM@N
else 0"i*t2?MƒƒƒSaiƒƒƒ@N
4
1.18.2. (aùc !eänh i: !oNng nhau
Moät íeänh i2 coù theá ñöôïc íoàng vaøo íeänh i2 khaùc taïí
meänh ñeà i2 hoaëc else. Trong caùc íeänh i2 íoàng nhau, meänh
ñeà else íuoân ñí vôùí íeänh i2 gaàn nhaát trong cuøng moät khoáí.
Ví duï:
i2?i@
3
i2?b@ state#e*tBN
i2?5@ state#e*t2N
else state#e*t9N
4
else state#e*tYN
Meänh ñeà else cuoáí cuøng khoâng keát hôïp vôùí i2?b@ maø
noù keát hôïp vôùí i2?i@. Meänh ñeà else beân trong keát hôïp vôùí
i2?5@.
42 ShaQn Z. MgoFn ng*N la"= trLnh G
Trong ngoân ngöõ C hoã trôï 15 möùc i2 íoàng nhau, thöïc teá
caùc chöông trình dòch hoã trôï nhíeàu hôn. Tuy nhíeân neáu duøng
quaù nhíeàu íeänh i2 íoàng nhau seõ íaøm xaùo troän yù nghóa
cuûa thuaät toaùn. Ví duï:
Ji*clude Kstdio%hL
Ji*clude Kstdli$%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t #X gN
# c "a*d?@N
0"i*t2?MNha0 vao #ot gia t"iiM@N
sca*2?MedMX fg@N
i2?gcc#@
0"i*t2?MBa* doa* du*gM@N
else3
0"i*t2?M$a* da saiM@N
i2?g L #@ 0"i*t?Mso Aua lo*M@N
else 0"i*t2?Mso Aua *hoM@N
4
getch?@N
4
1.18.3. (aùc !eänh i:?e!,e?i: !ieDn tuïc
Daïng toáng quaùt nhö sau:
i2?e70"essio*B@ state#e*tBN
else
i2?e70"essio*2@ state#e*t2N
else
i2?e70"essio*9@ state#e*t9N
%
%
%
else state#e*tNN
Níeàu kíeän ñöôïc kíeám tra töø ñaàu ñeán cuoáí. Neáu gaëp
ñíeàu kíeän naøo ñuùng tröôùc tíeân thì caâu íeänh keát hôïp vôùí
Gh*ông . GaFu le"nh #Ttate1ent% 4
noù seõ ñöôïc thöïc híeän vaø boû qua caùc phaàn coøn íaïí. Neáu
khoâng coù ñíeàu kíeän naøo ñuùng caâu íeänh cuoáí cuøng sau
meänh ñeà else seõ thöïc híeän. Ví duï:
Ji*clude Kstdio%hL
Ji*clude Kstdli$%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t #X gN
# c "a*d?@N
0"i*t2?MNha0 #ot soiM@N
sca*2?MedMX fg@N
i2 ?# cc g@ 0"i*t2?MBa* da doa* du*gM@N
else
i2?g L #@ 0"i*t2?MBa* doa* saiXso Aua lo*M@N
else 0"i*t2?MBa* doa* saiX so Aua *hoM@N
getch?@N
4
1.18.#. &oaùn t'û 4
Caâu íeänh i2 töông töï nhö toaùn töû |. Ta coù theá söû duïng
toaùn töû | ñeá thay theá caùc íeänh i2. Daïng toáng quaùt cuûa
moät toaùn töû | nhö sau:
Š70"essio*B | Š70"essio*2 i Š70"essio*9
Gíaù trò cuûa moät toaùn töû | ñöôïc xaùc ñònh nhö sau: ñaàu
tíeân tính gíaù trò bíeáu thöùc 1, neáu coù gíaù trò ñuùng tính gíaù
trò bíeáu thöùc 2 vaø traû veà gíaù trò cuûa toaùn töû |. Neáu gíaù
trò bíeáu thöùc 1 saí, tính gíaù trò bíeáu thöùc 3 vaø traû veà gíaù
trò cuûa toaùn töû ? bíeáu thöùc 1, 2 coù theá khoâng traû veà gíaù
trò naøo. Bíeáu thöùc 1 phaûí coù moät gíaù trò cuï theá.
1.18.2. eänh ,Uitch
Naây íaø caâu íeänh íöïa choïn nhíeàu nhaùnh. s!itch seõ
4& ShaQn Z. MgoFn ng*N la"= trLnh G
kíeám tra íaàn íöôïc gíaù trò cuûa moät bíeáu thöùc döïa vaøo danh
saùch caùc soá nguyeân hoaëc kí töï. Khí tìm thaáy moät gíaù trò
naøo, caâu íeänh keát hôïp vôùí noù seõ ñöôïc thöïc híeän. Daïng
toáng quaùt cuûa íeänh s!itch nhö sau:
s!itch?e70"essio*@3
case co*stBi
state#e*tBN
$"ea5N
case co*st2i
state#e*t2N
$"ea5N
%
%
%
case co*stNi state#e*tNN
de2aulti
state#e*tNBN
4
Bíeáu thöùc phaûí íaø kíeáu soá nguyeân hoaëc kíeáu kí töï,
khoâng cho pheùp kíeáu soá thöïc. Gíaù trò cuûa bíeáu thöùc seõ
ñöôïc kíeám tra theo thöù töï döïa vaøo gíaù trò cuûa caùc haèng
ñöa ra trong meänh ñeà case. Khí tìm thaáy moät gíaù trò thoûa
maõn, caâu íeänh keát hôïp seõ ñöôïc thöïc híeän cho ñeán khí gaëp
íeänh $"ea5 hoaëc ñeán cuoáí caâu íeänh s!itch. Caâu íeänh sau
de2ault (neáu coù) seõ ñöôïc thöïc híeän neáu bíeáu thöùc khoâng
truøng vôùí gíaù trò naøo.
Trong C, íeänh s!itch coù nhíeàu nhaát 257 íeänh case. Coù 5
yù caàn quan taâm khí söû duïng íeänh s!itch:
1. Leänh s!itch khaùc íeänh i2, s!itch chæ kíeám tra tính
baèng, trong khí íeänh i2 coù theá tính toaùn moïí kíeáu bíeáu thöùc
quan heä vaø íogíc.
Gh*ông . GaFu le"nh #Ttate1ent% 44
2. Khoâng coù haí gíaù trò gíoáng nhau naèm trong íeänh
s!itch
3. Neáu haèng kí töï ñöôïc söû duïng trong s!itch, noù seõ töï
ñoäng chuyeán sang soá nguyeân.
4. Neáu muoán víeát nhíeàu haèng ñeá keát hôïp vôùí moät
caâu íeänh, ta phaûí víeát ríeâng caùc haèng naøy trong töøng
meänh ñeà case
5. Caùc caâu íeänh trong töøng meänh ñeà case íaø caùc caâu
íeänh baát kyø, neáu nhíeàu hôn moät íeänh ta khoâng caàn phaûí
theâm daáu 34
Leänh s!itch thöôøng ñöôïc söû duïng ñeá xöû íyù íeänh töø
baøn phím, chaúng haïn nhö íaø íöïa choïn moät 1enu. Ví duï:
void #e*u?void@
3
cha" chN
0"i*t2?tB% Chec5 S0elli*gl*t@N
0"i*t2?t2% Co""ect S0elli*g Š""o"sl*t@N
0"i*t2?t9% Cis0la6 S0elli*g Š""o"sl*t@N
0"i*t2?tSt"i5e A*6 Othe" Oe6 to S5i0l*t@N
0"i*t2?t Š*te" 6ou" choicei t@N
ch c getcha"?@N
s!itch?ch@3
case wBwi
chec5_s0elli*g?@N
$"ea5N
case w2wi
co""ect_e""o"s?@N
$"ea5N
case w9wi
dis0la6_e""o"s?@N
$"ea5N
de2aulti
0"i*t2?tNo o0tio* selectedt@N
4+ ShaQn Z. MgoFn ng*N la"= trLnh G
4
4
Caâu íeänh $"ea5 trong s!itch íaø tuøy choïn, noù duøng ñeá
keát thuùc caâu íeänh trong meänh ñeà case. Neáu boû qua caâu
íeänh $"ea5, chöông trình seõ thöïc thí nhöõng meänh ñeà case
tíeáp theo cho ñeán khí gaëp íeänh $"ea5 khaùc hoaëc cho ñeán
heát caâu íeänh s!itch. Ví duï:
void i*0_ha*dle"?i*t i@
3
i*t 2lagN
2lag c -BN
s!itch?i@ 3
case Bi €ƒ These cases have co##o* ƒ€
case 2i €ƒ state#e*t seAue*ces% ƒ€
case 9i
2lag c UN
$"ea5N
case Yi
2lag c BN
case Vi
e""o"?2lag@N
$"ea5N
de2aulti
0"ocess?i@N
4
4
Ví duï treân mính hoïa haí vaán ñeà:
Thöù nhaát, ta coù theá coù caùc meänh ñeà case maø khoâng
keát hôïp vôùí íeänh naøo. Khí gaëp tröôøng hôïp naøy, chöông trình
seõ chuyeán xuoáng meänh ñeà case tíeáp theo. Trong ví duï treân,
ba meänh ñeà case seõ coù moät caâu íeänh íaø 2lagcUN $"ea5N
Thöù haí, neáu khoâng coù íeänh $"ea5 chöông trình seõ thöïc
thí caùc íeänh tíeáp theo. Neáu i c Y. caâu íeänh 2lag c BN seõ
Gh*ông . GaFu le"nh #Ttate1ent% 47
thöïc híeän vaø bôûí vì khoâng coù íeänh $"ea5 neân caâu íeänh
case tíeáp theo seõ ñöôïc thöïc híeän. Khí ñoù seõ goïí haøm
e""o"?2lag@ vôùí tham soá c-B; nhöng neáu i c V íeänh e""o" seõ
thöïc híeän vôùí tham soá -1.
1.18.3. eänh ,Uitch !oNng nhau
Caùc íeänh s!itch coù theá íoàng vaøo nhau, töùc íaø
state#e*tBX 2X `X N coù theá íaø íeänh s!itch khaùc. Trong
tröôøng hôïp naøy caùc haèng gíaù trò xuaát híeän taïí meänh ñeà
case caû trong vaø ngoaøí coù theá truøng nhau. Ví duï:
s!itch?7@ 3
case Bi
s!itch?6@ 3
case Ui
0"i*t2?tCivide $6 8e"o e""o"%t@N
$"ea5N
case Bi 0"ocess?7X6@N
4
$"ea5N
case 2i
%
%
%
1.1#. LQG@= F>eH
1.19.1. eänh !aG< :or
Daïng toáng quaùt cuûa íeänh íaëp 2o" nhö sau:
2o"?i*itiali8atio*; co*ditio*; i*c"e#e*t) state#e*ts;
Leänh íaëp 2o" coù nhíeàu thay ñoáí so vôùí caùc ngoân ngöõ
íaäp trình khaùc, yù nghóa chung cuûa voøng for nhö sau:
i*itiali8atio* íaø moät íeänh gaùn duøng ñeá khôûí gaùn gíaù trò
ñaàu cho bíeán ñíeàu khíeán íaëp; co*ditio* íaø moät bíeáu thöùc
4- ShaQn Z. MgoFn ng*N la"= trLnh G
quan heä cho bíeát khí naøo thoaùt khoûí voøng íaëp; i*c"e#e*t
ñònh nghóa bíeán ñíeàu khíeán thay ñoáí nhö theá naøo taïí moãí
íaàn íaëp. Ba muïc naøy ñöôïc phaân bíeät nhau bôûí daáu N voøng
íaëp 2o" tíeáp tuïc thöïc híeän cho ñeán khí ñíeàu kíeän saí thì
döøng. Ví duï chöông trình sau ín gíaù trò töø 1 ñeán 100 ra maøn
hình.
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t 7N
2o"?7cBN 7 Kc BUUN 7@ 0"i*t2?ted tX 7@N
getch?@N
4
Trong voøng íaëp naøy, ñaàu tíeân 7 ñöôïc gaùn gíaù trò 1 vaø
sau ñoù ñöôïc so saùnh vôùí gíaù trò 100. Neáu 7KcBUU chöông trình
seõ goïí haøm 0"i*t2; sau ñoù 7 ñöôïc taêng íeân 1 vaø tíeáp tuïc
kíeám tra ñíeàu kíeän. Neáu ñíeàu kíeän chöa thoûa maõn, tíeáp tuïc
goïí haøm 0"i*t2. Ouaù trình treân íaëp íaïí cho ñeán khí 7LBUU vaø
ñoù chính íaø ñíeám keát thuùc voøng íaëp. Trong ví duï naøy, 7 íaø
bíeán ñíeàu khíeán íaëp, noù ñöôïc kíeám tra vaø thay ñoáí sau moãí
íaàn íaëp. Ví duï:
2o"?7cBUUN 7^cWVN 7-cV@ 3
8 c 7ƒ7N
0"i*t2?tThe sAua"e o2 edX e2tX 7X 8@N
4
Trong ví duï treân, caû haí caâu íeänh tính 7 bình phöông vaø
haøm 0"i*t2 ñeàu ñöôïc thöïc híeän cho ñeán khí 7 c WV. Chuù yù,
voøng íaëp thöïc híeän vôùí soá aâm. Naàu tíeân 7 ñöôïc gaùn gíaù
trò 100 sau moãí íaàn íaëp seõ gíaûm ñí 5.
Trong voøng íaëp 2o", ñíeàu kíeän íuoân ñöôïc kíeám tra ñaàu
Gh*ông . GaFu le"nh #Ttate1ent% 49
chöông trình, ñíeàu naøy coù nghóa íaø caùc maõ beân trong coù
theá khoâng ñöôïc thöïc thí neáu ñíeàu kíeän saí. Ví duï:
7 c BUN
2o"?6cBUN 6^c7N 6@ 0"i*t2?tedtX 6@N
0"i*t2?tedtX 6@N
Ví duï treân chæ ín gíaù trò BU cuûa bíeán 6 ra maøn hình.
Caùc íeänh trong voøng íaëp 2o" treân khoâng bao gíôø thöïc híeän
bôûí vì 7 vaø 6 baèng nhau khí vaøo voøng íaëp.
1.19.2. Bieán +o*i cuûa 1o$ng !aG< :or
Söï bíeán ñoáí voøng íaëp 2o" seõ íaøm taêng söùc maïnh, tính
meàm deûo vaø tính öùng duïng trong caùc tình huoáng íaäp trình.
Moät bíeán ñoáí thöôøng gaëp nhaát ñoù íaø söû duïng haí hay
nhíeàu bíeán ñeá ñíeàu khíeán voøng íaëp.
2o"?7cUX 6cUN 76KBUN 7@3
6 c getcha"?@N
6 c 6 - wUwN
%
%
%
4
Daáu phaáy duøng ñeá phaân bíeät haí íeänh khôûí taïo. Moãí
íaàn íaëp, 7 taêng íeân 1 vaø gíaù trò cuûa 6 ñöôïc thíeát íaäp bôûí
baøn phím. Maëc daàu 6 ñöôïc nhaäp töø baøn phím, nhöng 6 vaãn
phaûí ñöôïc gaùn gíaù trò =0 ñeá gíaù trò cuûa 6 ñöôïc xaùc ñònh
tröôùc khí bíeáu thöùc ñíeàu kíeän tính toaùn. Neáu khoâng ñònh
nghóa tröôùc coù theá voøng íaëp seõ khoâng ñöôïc thöïc híeän.
Trong ba bíeáu thöùc cuûa voøng 2o", coù theá khoâng xuaát
híeän moät hoaëc haí hoaëc caû ba bíeáu thöùc naøy. Ví duï nhaäp
vaøo moät soá cho ñeán khí naøo soá ñoù íôùn hôn 10 thì döøng:
2o"?7cUN7KcBUN@ sca*2?MedMXf7@N
+6 ShaQn Z. MgoFn ng*N la"= trLnh G
Ví duï treân khoâng xuaát híeän bíeáu thöùc taïí thaønh phaàn
thöù ba. Ta coù theá víeát íaïí caâu íeänh naøy theo caùch khaùc
nhö sau:
2o"? N N @3
sca*2?MedMXf7@N
i2 ?7LBU@ $"ea5N
4
Khí ñoù voøng íaëp 2o" treân khoâng coù bíeáu thöùc naøo
beân trong.
Voøng íaëp 2o" cuõng coù theá khoâng coù íeänh naøo beân
trong, ví duï cuï theá nhö sau: cho bíeát öôùc soá íôùn nhaát nhoû
hôn soá nguyeân *.
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t iX *N
0"i*t2?MNha0 *iM@N sca*2?MedMXf*@N
2o"?ic*-BN * e iNi--@
0"i*t2?Muoc lo* *hat *ho ho* * laiedMXi@N
getch?@N
4
1.19.3. Vo$ng !aG< Uhi!e
Daïng toáng quaùt nhö sau:
!hile?co*ditio*al@ state#e*tsN
Trong ñoù state#e*ts coù theá íaø moät íeänh roãng, moät
íeänh ñôn hoaëc moät khoáí íeänh, v.v. co*ditio*al íaø moät
bíeáu thöùc baát kyø vôùí gíaù trò ñuùng íaø moät gíaù trò khaùc 0.
YU nghóa, neáu ñíeàu kíeän coøn ñuùng thì thöïc híeän caùc caâu
íeänh. Neáu ñíeàu kíeän saí, nhaûy ñeán caâu íeänh sau !hile. Ví
duï:
Gh*ông . GaFu le"nh #Ttate1ent% +1
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
cha" chN
ch c wlUwN €ƒ i*itiali8e ch ƒ€
!hile?ch ^c wAw@ ch c getcha"?@N
0"i*t2?MecMX ch@N
getch?@N
4
Ví duï treân, gaùn cho bíeán ch moät kí töï roãng, sau ñoù yeâu
caàu ngöôøí duøng nhaäp vaøo moät kí töï. Neáu ngöôøí duøng
nhaäp vaøo moät kí töï khaùc kí töï A, chöông trình baét ngöôøí
duøng phaûí nhaäp íaïí cho ñeán khí nhaäp ñuùng kí töï A thì keát
thuùc.
Gíoáng nhö voøng íaëp 2o", voøng íaëp !hile cuõng kíeám tra
ñíeàu kíeän ôû ñaàu voøng íaëp. Níeàu naøy coù nghóa íaø caùc
caâu íeänh trong voøng íaëp seõ khoâng ñöôïc thöïc híeän neáu
ñíeàu kíeän saí. Ví duï:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t iX *N
0"i*t2?MNha0 *iM@N sca*2?MedMXf*@N
ic*-BN
!hile?* e i ^c U@ i--N
0"i*t2?Maoc so lo* *hat *ho ho* * laiedMXi@N
getch?@N
4
1.19.#. Vo$ng !aG< ;o?Uih!e
Khoâng gíoáng nhö voøng íaëp 2o", !hile, kíeám tra ñíeàu
kíeän ôû ñaàu voøng íaëp. Voøng íaëp do-!hile kíeám tra ñíeàu
+2 ShaQn Z. MgoFn ng*N la"= trLnh G
kíeän ôû cuoáí voøng íaëp. Níeàu naøy cho pheùp voøng íaëp do-
!hile seõ thöïc híeän ít nhaát íaø moät íaàn. Daïng toáng quaùt
cuûa voøng íaëp do-!hile nhö sau:
do
3
state#e*tsN
4!hile ?co*ditio*al@N
Neáu caâu íeänh chæ coù moät íeänh ñôn, ta coù theá boû qua
daáu ngoaëc nhoïn. YU nghóa: íaëp caùc caâu íeänh treân cho ñeán
khí ñíeàu kíeän nhaän gíaù trò saí. Ví duï:
do3
sca*2?MedMXf*@N
4!hile ?*LBUU@N
Noaïn chöông trình treân cho pheùp nhaäp vaøo moät soá
nguyeân cho ñeán khí nhaän gíaù trò nhoû hôn hoaëc baèng 100.
Thoâng thöôøng, ta söû duïng voøng íaëp do-!hile vaø keát
hôïp vôùí caâu íeänh s!itch ñeá duy trì söï hoaït ñoäng cuûa menu.
void #e*u?void@
3
cha" chN
do 3
cl"sc"?@
0"i*t2?tB% Ti*h die* tich hi*h t"o*l*t@N
0"i*t2?t2% Ti*h die* tich ta# giacl*t@N
0"i*t2?t9% Ti*h die* tich hi*h chu *hatl*t@N
0"i*t2?tY% Thoat 5hoi chuo*g t"i*hl*t@N
0"i*t2?t Š*te" 6ou" choicei t@N
ch c getcha"?@N
s!itch?ch@ 3
case wBwi
dt_hi*ht"o*?@N
$"ea5N
case w2wi
Gh*ông . GaFu le"nh #Ttate1ent% +
dt_ta#giac?@N
$"ea5N
case w9wi
dt_chu*hat?@N
$"ea5N
4
i2 ?chcdYd@ $"ea5N
4 !hile?ch^cwBw ff ch^cw2w ff ch^cw9w@N
4
Trong baøí toaùn treân, söû duïng voøng íaëp do-!hile íaø
moät íöïa choïn toát nhaát bôûí vì ta mong muoán caùc caâu íeänh
treân ñöôïc thöïc híeän ít nhaát íaø moät íaàn.
1.2/. LQG@= @=>T^
1.2>.1. eänh nhaû) return
Leänh "etu"* duøng ñeá thoaùt khoûí moät haøm, noù ñöôïc
phaân íoaïí íeänh nhaûy bôûí vì noù seõ trôû veà ñuùng vò trí goïí
haøm. Leänh "etu"* coù theá coù traû veà moät gíaù trò hoaëc
khoâng, neáu íeänh "etu"* coù moät gíaù trò, gíaù trò ñoù seõ íaø
gíaù trò cuûa haøm. Trong C, nhöõng haøm coù traû veà gíaù trò,
neáu khoâng traû veà gíaù trò naøo thì chöông trình seõ töï ñoäng
traû veà moät gíaù trò voâ nghóa. Daïng toáng quaùt cuûa íeänh
"etu"*.
"etu"* e70"essio*N
Bíeáu thöùc chæ xuaát híeän neáu haøm khaí baùo coù gíaù
trò traû veà, trong tröôøng hôïp naøy gíaù trò bíeáu thöùc íaø gíaù
trò traû veà cuûa haøm. Ta coù theá duøng nhíeàu íeänh "etu"*
trong moät haøm, tuy nhíeân haøm seõ ngöøng khí gaëp moät íeänh
"etu"* sôùm nhaát. Daáu moùc cuoáí haøm gaàn gíoáng nhö íeänh
"etu"*.
1.2>.2. eänh nhaû) goto
+& ShaQn Z. MgoFn ng*N la"= trLnh G
Leänh nhaûy goto ít khí söû duïng trong caùc tình huoáng íaäp
trình, bôûí vì neáu söû duïng nhíeàu íeänh nhaûy seõ íaøm cho
chöông trình trôû neân phöùc taïp khoù gôõ roáí. Thoâng thöôøng ta
söû duïng íeänh nhaûy trong tröôøng hôïp thoaùt khoûí nhíeàu
voøng íaëp íoàng nhau.
Daïng toáng quaùt cuûa caâu íeänh nhö sau:
goto la$elN
%
%
%
la$eli
state#e*tsN
Trong ñoù, la$el íaø teân nhaõn. Teân nhaõn íaø moät ñònh
danh trong C, noù coù theá ñöôïc ñònh nghóa tröôùc hoaëc sau
íeänh goto. Ví duï sau coù taïo ra moät voøng íaëp ín caùc soá töø 1
ñeán 10
‹ c BN
loo0Bi
0"i*t2?Med MX7@N
7N
i2 ?7KBU@ goto loo0BN
Ví duï tíeáp theo seõ ín ra maøn hình soá ñaàu tíeân coù ba
chöõ soá thoûa tính chaát abc =a
3
+b
3
+c
3
.
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
cl"sc"?@N
i*t iX bX 5N
2o"?icBN iKcZN i@
Gh*ông . GaFu le"nh #Ttate1ent% +4
2o"?bcUN bKcZN b@
2o"?5cUN 5KcZN 5@
i2?BUUƒiBUƒb5 cc iƒiƒi bƒbƒb 5ƒ5ƒ5@
goto 5etthucN
5etthuci
0"i*t2?MedededMXiX bX 5@N
getch?@N
4
1.2>.3. eänh break
Leänh $"ea5 duøng ñeá keát thuùc caâu íeänh case trong
s!itch vaø duøng ñeá keát thuùc caùc voøng íaëp maø khoâng caàn
phaûí kíeám tra ñíeàu kíeän. Khí gaëp íeänh $"ea5 trong voøng íaëp,
voøng íaëp seõ keát thuùc ngay íaäp töùc vaø chöông trình seõ
nhaûy ñeán caâu íeänh sau voøng íaëp. Ví duï: chöông trình sau seõ
keát thuùc taïí gíaù trò tcBU.
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t tN
2o"?tcUN tKBUUN t@ 3
0"i*t2?ted tX t@N
i2?tccBU@ $"ea5N
4
getch?@N
4
Chöông trình treân chæ ín ra maøn hình caùc soá töø 0 ñeán
10.
1.2>.#. eänh countinue
Caâu íeänh naøy duøng ñeá ñíeàu khíeán chöông trình quay
veà ñaàu voøng íaëp vaø thöïc híeän caùc voøng íaëp tíeáp theo.
Ví duï: chöông trình sau ín ra maøn hình soá öôùc soá khoâng
taàm thöôøng cuûa moät soá nguyeân döông *.
++ ShaQn Z. MgoFn ng*N la"= trLnh G
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t iX *X cou*tcUN
2o"?ic2N iK*N i@
3
i2?* e i@ co*ti*ueN
cou*tN
4
0"i*t2?MSo uoc cua ed laiedMX cou*t@N
getch?@N
4
1.21. C>CO =BTZ IJ>cS @A=ZQGX P>U V>UZ I>GH
1.21.1. (aDu hoûi traTc nghieä/
C>CO 1. Cho bíeát gíaù trò cuûa bíeáu thöùc logic sau:
a% 2
2
9
2
Kc B9
$% ^?2 Kc 9@ ff ?BY e 9 c 2@ ˆˆ ?R € 2 c Y@
c% ?7KB@ ff ?7 L -B@ ˆˆ ?27 Lc 2 7@ với 7c3UX BX -BX 94%
d% 9K 2 ff W - V cBN
C>CO 2. Leänh naøo sau ñaây ín ra maøn hình soá íôùn nhaát gíöõa
haí soá thöïc A vaø B:
a% i2 ?A L B@ 0"i*t2?Me2MXB@ else 0"i*t2?Me2MXA@N
$% i2 ?A L B@ 0"i*t2?Me2MXA@ 0"i*t2?Me2MXA@N
c% i2 ?A L B@ sca*2?Me2MXfA@ else sca*2?Me2MXfB@N
d% i2 ?A K B@ 0"i*t2?Me2MXB@ else 0"i*t2?Me2MXA@N
C>CO 3. Kíeám tra neáu ba soá a, $, c ñeàu íôùn hôn B thì ín soá B,
choïn íeänh naøo:
a% i2 ??a L B@ ff?$ L B@ ff?c L B@@ 0"i*t2?MBM@N
$% i2 ??a L B@ ˆˆ?$ L B@ ˆˆ?c L B@@ 0"i*t2?MBM@N
c% i2 a L B ff $ L B ff c L B 0"i*t2?MBM@N
d% i2 a L B ˆˆL B ˆˆ c L B 0"i*t2?MBM@N
C>CO %. Cho i íaø bíeán nguyeân. Sau khí thöïc híeän caùc íeänh:
Gh*ông . GaFu le"nh #Ttate1ent% +7
i c 2N
s!itch ?i@3
case Bi i c i BN $"ea5N
case 2i i c i 2N $"ea5N
case 9i i c i 9N $"ea5N
4
Gíaù trò sau cuøng cuûa i íaø:
a% 2 $% 9 c% Y d% V
C>CO ,. Cho N íaø bíeán nguyeân, sau khí thöïc híeän caùc íeänh:
N c ZN
i2 ?NK U@ 0"i*t2?MSo a#M@
else
s!itch?N e 2@
case Ui 0"i*t2?MCha*M@N $"ea5N
case Bi 0"i*t2?MLeM@N $"ea5N
4
Keát quaû ín íeân maøn hình íaø:
a% Cha* $% Le c% So a# d% 5h-*g c; hi[* g1
C>CO -. Cho S vaø i íaø bíeán nguyeân. Khí chaïy ñoaïn chöông
trình:
s c UN
2o"?icBN iKcBUN i@ s c s iN
0"i*t2?MedMX s@N
Keát quaû ín íeân maøn hình íaø:
a% s c BB $% s c VV c% s c BUU d% s c BUB
C>CO +. Cho S, i vaø NLU íaø caùc bíeán nguyeân. Neá tính S c N^,
choïn caâu naøo:
a% S c BN 2o"?i c BN i Kc NN i@ S ƒc iN
$% S c UN 2o"?i c BN i Kc NN i@ S c S ƒ iN
c% S c BN 2o"?i c BN i Kc NN i@ S c S ƒ NN
d% S c BN 2o"?i c BN i Kc NN i@ S c S iN
C>CO 4. Cho S vaø i bíeán kíeáu nguyeân. Khí chaïy ñoaïn chöông
+- ShaQn Z. MgoFn ng*N la"= trLnh G
trình:
S c UN i c BN
!hile ?i Kc W@ 3
Sic S iN
iic i 2N
4
Gíaù trò sau cuøng cuûa S íaø:
a% W $% Z c% BB d% U
C>CO #. Gíaû söû S, i íaø caùc bíeán nguyeân. Khí chaïy chöông
trình:
S c UN i c BN
do3
Sic S i ƒ iN
iic i BN
4!hile ?iKY@N
Gíaù trò sau cuøng cuûa S íaø:
a% U $% BY c% BW d% 9U
1.21.2. Ba$i taä<
C>CO 1. Nhaäp boán soá 7B, 72, 79, 7Y, tìm soá íôùn nhaát vaø soá
nhoû nhaát cuûa boán soá ñoù.
C>CO 2. Nhaäp moät chöõ caùí, neáu íaø chöõ thöôøng thì ñoáí
thaønh chöõ hoa, ngöôïc íaïí, neáu íaø chöõ hoa thì ñoáí thaønh chöõ
thöôøng. Ví duï: nhaäp A ín ra a, nhaäp $ thì ín ra B.
C>CO 3. Nhaäp caùc heä soá, gíaûí vaø bíeän íuaän caùc heä
phöông trình sau theo quy taéc Gra1er:

C>CO %. Nhaäp soá thöïc 7 vaø tính:
(Höôùng daãn: duøng haøm e
7
vaø L*7, xeùt ba tröôøng hôïp
Gh*ông . GaFu le"nh #Ttate1ent% +9
7cU, 7LU, 7KU).
C>CO ,. Nhaäp soá thöïc 7 vaø tính:
6 =
C>CO -. Nhaäp 7 íaø gíaù trò thöïc vaø tính 6 theo coâng thöùc:
C>CO +. Nhaäp hoï teân moät chuû hoä, ñònh möùc ñíeän haøng
thaùng cuûa hoä, chæ soá ñíeän keá thaùng tröôùc vaø thaùng
naøy. Haõy tính tíeàn ñíeän cho moãí hoä, bíeát raèng: Moãí kR
trong khoaûng 100 coù ñôn gíaù íaø 550ñ, 50 kR ñaàu tíeân treân
100 coù ñôn gíaù 1100ñ, nhöõng kR treân 151 coù ñôn gíaù 1200ñ.
C>CO 4. Nhaäp vaøo thaùng/naêm cho bíeát thaùng coù bao nhíeâu
ngaøy. Naêm nhuaän íaø naêm chía heát cho 4 nhöng khoâng chía
heát cho 100 hoaëc chía heát cho 400.
C>CO #. Nhaäp ngaøy/thaùng/naêm, cho bíeát ngaøy ñoù íaø ngaøy
thöù maáy trong tuaàn. Thuaät toaùn Doomsday (ngaøy taän theá)
ñeá tính ngaøy cuûa tuaàn nhö sau: (íaáy ngaøy 19/9/2008 íaøm ví
duï)ï.
Böôùc 1: Laáy haí soá ñaàu cuûa naêm chía dö cho 4:
neáu dö 1: AD = 0
neáu dö 2: AD = 6
neáu dö 3: AD = 4
neáu dö 0: AD = 3
AD: íaø gíaù trò Doomsday cuûa naêm. (20 % 4 = 0 -> AD = 3.)
76 ShaQn Z. MgoFn ng*N la"= trLnh G
Böôùc 2: Laáy haí soá cuoáí cuûa naêm chía cho 12 íaáy phaàn
nguyeân cho gaùn a, phaàn dö cho gaùn b. (a = 08 / 12 = 0, b = 08
% 12 = 8.)
Böôùc 3: Naët c = b chía nguyeân cho 4. (c = b / 4 = 2).
Böôùc 4: Naët s = a + b + c. (s = 0 + 8 + 2 = 10)
Böôùc 5: Naët t = s chía dö cho 7. (t = s % 7 = 3)
Böôùc 6: Naët thu = t + AD. (thu = 3 + 3 = 6)
Böôùc 7: Tìm gíaù trò Doomsday cuûa thaùng (MD) döïa vaøo baûng
sau:
Thaùn
g
1 2 3 4 5 6 7 8 9 10 11 12
MD 3/4(Nhuaä
n)
28/29(Nhua
än)
0 4 9 6 11 8 5 10 7 12
(MD = 5)
Böôùc 8: Naët thu = thu + ngaøy - MD. (thu = 6 + 19 - 5 = 20)
Böôùc 9: Trong khí thu < 0 tíeáp tuïc coäng cho 7. (thu = 20).
Böôùc 10: thu = thu chía íaáy phaàn dö cho 7. (thu = thu % 7 = 6).
Böôùc 11: Ngaøy cuûa tuaàn ñöôïc xaùc ñònh nhö sau: 0: chuû
nhaät; 1: thöù baûy; 2: thöù haí; 3: thöù ba; .; 6: thöù saùu. (Ngaøy
19/9/2008 íaø thöù saùu).
C>CO 1/. Nhaäp ngaøy/thaùng/naêm döông íòch, ñoáí sang ngaøy
thaùng naêm aâm íòch.
C>CO 11. Nhaäp moät kyù töï baát kyø, cho bíeát kyù töï ñoù thuoäc
íoaïí naøo: íaø chöõ hoa, íaø chöõ thöôøng, íaø chöõ soá hay caùc
kyù töï khaùc.
C>CO 12. Nhaäp ñoä daøí ba caïnh a, b, c. Cho bíeát a, b, c coù
phaûí íaø ba caïnh cuûa moät tam gíaùc khoâng; neáu íaø ba caïnh
cuûa moät tam gíaùc thì cho bíeát ñoù íaøm tam gíaùc gì: ñeàu,
Gh*ông . GaFu le"nh #Ttate1ent% 71
caân hay tam gíaùc thöôøng?
C>CO 13. In baûng maõ ASCII thaønh haí coät: Maõ Kyù töï, yeâu
caàu híeán thò töøng trang moät, (moãí trang 22 doøng) roàí döøng
íaïí chôø ta nhaán Enter môùí híeän trang keá tíeáp, cöù theá cho
ñeán heát.
C>CO 1%. Nhaäp moät soá nguyeân döông N. Tính:

C>CO 1,. Nhaäp soá n nguyeân ñaûm baûo sao cho n döông (neáu
nhaäp n <= 0 thì chöông trình phaûí baét nhaäp íaò), sau ñoù tính:
S1 = 1
2
+ 3
2
+ 5
2
+ 7
2
+...+ (2n+1)
2

C>CO 1-. Nhaäp moät soá nguyeân döông n. Tính:
S4 = 1.2.3 + 2.3.4 + 3.4.5 +....+ n(n+1)(n+2)
C>CO 1+. Nhaäp moät soá nguyeân döông n. Tính:

C>CO 14. Nhaäp n, k nguyeân ñaûm baûo phaûí döông vaø k<= n.
Tính toá hôïp chaäp k cuûa n theo coâng thöùc:
C>CO 1#. Cho daõy Fíbonací xaùc ñònh nhö sau:
72 ShaQn Z. MgoFn ng*N la"= trLnh G
F
0
=0, F
1
=1, F
n
= F
n-1
+ F
n-2,
vôùí n >= 2
Haõy nhaäp soá nguyeân N>0 vaø tính S= F
0
+ F
1
+ F
2
+...+ F
n.
C>CO 2/. Tìm vaø ín íeân maøn hình taát caû caùc soá nguyeân
trong phaïm ví töø 10 ñeán 99 sao cho tích cuûa haí chöõ soá cuûa
noù thì baèng haí íaàn toáng cuûa haí chöõ soá cuûa noù. Ví duï: soá
N=36 coù haí chöõ soá íaø 3 vaø 6, vaø 3*6 = 2*(3+6). Töông töï
ñoáí vôùí soá 44.
C>CO 21. Nhaäp N nguyeân ñaûm baûo íôùn hôn 1. Tính toáng caùc
soá íeû <= N. Ví duï: neáu N=5 thì toáng S=1+3+5 = 9, neáu N=8
thì S=1+3+5+7=16.
C>CO 22. Nhaäp moät soá nguyeân N, cho bíeát ñoù íaø soá
nguyeân toá hay khoâng.
C>CO 23. Nhaäp moät soá nguyeân N, ín ra maøn hình taát caû caùc
soá nguyeân toá nhoû hôn hoaëc baèng N
C>CO 2%. Nhaäp vaøo soá tíeàn gôûí, íaõí suaát (%/thaùng), soá
tíeàn nhaän ñöôïc. Tính soá thaùng caàn gôûí.
C>CO 2,. Nhaäp soá tíeàn gôûí, íaõí suaát (%/thaùng), soá thaùng.
Tính soá tíeàn nhaän ñöôïc.
Gh*ông &. Maûng 3a' chuo\i #brra? 8 Ttring%
7
C=DL@A %. $>T@A P>U S=OBfZ (AJJ>^ *
!IJZ@A"
1.22. 0=>WZ @ZQGX
Maûng íaø taäp hôïp caùc bíeán coù cuøng kíeáu döõ ííeäu vaø
ñöôïc tham chíeáu thoâng qua teân chung. Moãí phaàn töû trong
maûng ñöôïc truy xuaát thoâng qua chæ soá. Trong C, maûng bao
goàm caùc vò trí ííeân tuïc trong boä nhôù. Nòa chæ thaáp nhaát
töông öùng vôùí phaàn töû ñaàu tíeân cuûa maûng vaø ñòa chæ cao
nhaát öùng vôùí phaàn töû cuoáí cuøng. Maûng coù theá coù töø
moät ñeán nhíeàu chíeàu. Maûng thoâng duïng nhaát íaø maûng
chuoãí kí töï keát thuùc baèng kí töï roãng. Maûng vaø con troû trong
C coù quan heä chaëc cheõ vôùí nhau.
1.23. $>T@A XBGI S=ZQ?O
Cuù phaùp khaí baùo maûng moät chíeàu nhö sau:
t60e va"_*a#egsi8ehN
Trong ñoù, t60e íaø kíeáu döõ ííeäu cuûa maûng vaø chính íaø
kíeáu döõ ííeäu cuûa moãí phaàn töû, si8e ñònh nghóa kích thöôùc
cuûa maûng. Ví duï ñeá khaí baùo 100 phaàn töû coù teân íaø
$ala*ce coù kíeáu döõ ííeäu íaø kíeáu dou$le.
dou$le $ala*cegBUUhN
Neá truy xuaát ñeán moät phaàn töû cuûa maûng ta duøng cuù
phaùp sau:
va"_*a#egi*de7hN
Ví duï ñeá gaùn soá B2%9Y vaøo phaàn töû thöù 9 cuûa maûng
$ala*ce, ta víeát:
7& ShaQn Z. MgoFn ng*N la"= trLnh G
$ala*ceg2hcB2%9YN
Trong C, maûng coù chæ soá baét ñaàu töø U, khí ta khaí baùo
cha" 0gBUhN maûng p coù 10 phaàn töû baét ñaàu töø U cho ñeán Z.
Ví duï:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t iX 7g2UhN
2o"?icUN iK2UN i@
7gih c iN
2o"?icUN iK2UN i@
0"i*t2?Med MX 7gih@N
getch?@N
4
Chöông trình treân, gaùn cho 20 phaàn töû cuûa maûng 7 vôùí
caùc gíaù trò töông öùng vôùí chæ soá cuûa maûng. Löu yù, chæ
soá cuûa maûng ñöôïc tính töø U  BZ.
Toáng soá boä nhôù (tính theo b?te) cuûa moät maûng ñöôïc
tính theo coâng thöùc sau: to*gcsi8eo2?$ase t60e@  si8e o2
a""a6. Trong ngoân ngöõ C, khoâng kíeám tra caùc bíeân cuûa
maûng, ta coù theá víeát döõ ííeäu íeân treân caùc phaàn töû naèm
ngoaøí phaïm ví maûng. Ví duï ñoaïn chöông trình sau truy xuaát
ñeán caùc phaàn töû naèm ngoaøí maûng, nhöng chöông trình vaãn
khoâng baùo íoãí.
i*t cou*tgBUhX iN
2o"?icUN iKBUUN i@ cou*tgih c iN
Maûng moät chíeàu ñöôïc íöu tröõ ííeân tuïc treân boä nhôù
maùy tính. Ví duï:
cha" agThN
Hình sau moâ taû traïng thaùí cuûa maûng a trong boä nhôù.
Gh*ông &. Maûng 3a' chuo\i #brra? 8 Ttring%
74
Phq* t‚i agUh agBh ag2h ag9h agYh agVh agWh
r'a ch”i BUUU BUUB BUU2 BUU9 BUUY BUUV BUUW
Hình 4-1. Mm*g T 5( tx $‘t <qu tDi v' t"( BUUU
1.2%. P=>WI \Z@= XBGI VZQR@ SB@ IJBT YQR@ X>T@A
Ta coù theá sính moät con troû ñeán phaàn töû ñaàu tíeân
cuûa maûng baèng caùch chæ teân cuûa maûng nhöng khoâng coù
chæ soá. Ví duï cho moät maûng:
i*t sa#0legBUhN
Ta coù theá sính ra moät con troû ñeán phaàn töû ñaàu tíeân
cuûa maûng baèng caùch duøng teân sa#0le. Noaïn chöông trình
sau seõ duøng con troû 0 troû ñeán phaàn töû ñaàu tíeân cuûa
maûng. Khí ñoù, ñeá truy xuaát ñeán phaàn töû thöù i cuûa maûng
sa#0le ta coù theá duøng con troû 0 vôùí cuù phaùp sau
ƒ?0i@hoaëc 0gih.
i*t ƒ0X sa#0leg2UhN
0 c sa#0leN €€KcL 0 c fsa#0legUh
ƒ?09@ c BUN €€ KcL sa#0leg9h c BUN
1.2,. GLTZ X>T@A XBGI S=ZQ?O YQR@ =>UX
Ta khoâng theá gôûí toaøn boä maûng ñeán moät haøm, tuy
nhíeân ta coù theá gôûí ñeán haøm moät con troû ñeán maûng
baèng caùch chæ ra teân maûng maø khoâng coù chæ soá. Ví duï
sau seõ gôûí ñòa chæ cuûa maûng i ñeán haøm 2u*cB?@
void #ai*?void@
3
i*t igBUhN
2u*cB?i@N
%
%
%
4
7+ ShaQn Z. MgoFn ng*N la"= trLnh G
Neá haøm 2u*cB?@ nhaän ñöôïc tham soá i nhö treân, ta coù
ba caùch khaí baùo haøm nhö sau: duøng con troû, duøng maûng
coù kích thöôùc vaø maûng khoâng xaùc ñònh kích thöôùc.
void 2u*cB?i*t ƒ7@ €ƒPoi*te"ƒ€
3
% % %
4
void 2u*cB?i*t 7gBUh@€ƒ si8ed a""a6ƒ€
3
% % %
4
void 2u*cB?i*t 7gh@ €ƒ u*si8ed a""a6 ƒ€
3
% % %
4
Caû ba caùch treân ñeàu taïo ra moät keát quaû töông töï.
1.2-. C=OBfZ _QRI I=OWS JBf@A (@OFF2IQJXZ@>IQ]
\IJZ@A"
Moät caùch söû duïng cuûa maûng moät chíeàu ñoù íaø maûng
caùc kí töï keát thuùc baèng kí töï roãng. Khí khaí baùo moät maûng
caùc kí töï, ta phaûí daønh moät phaàn töû cuoáí cuøng ñeá gaùn
gíaù trò roãng cho chuoãí. Naây íaø daáu híeäu ñeá trình bíeân dòch
bíeát heát chuoãí.
Trong C coù hoã trôï moät soá haøm ñeá thao taùc vôùí chuoãí.
T•* Ch•c *†*g
st"c06?sBX s2@ Co06 s2 v•o sB%
st"cat?sBX s2@ …hv0 chuyi s2 v•o cuni chuyi sB%
st"le*?sB@ T"m vp <G d•i c)a chuyi sB%
st"c#0?sBX s2@ T"m vp U *+u sB v• s2 $‡*g *hauN *h}
hI* U *+u sBKs2N l,* hI* U *+u sBLs2%
st"ch"?sBX ch@
T"m vp #Gt co* t"} <+* v' t"( 7uut hi[*
<qu ti•* c)a ch t"o*g sB%
Gh*ông &. Maûng 3a' chuo\i #brra? 8 Ttring%
77
st"st"?sBX s2@
T"m vp #Gt co* t"} <+* v' t"( 7uut hi[*
<qu ti•* c)a s2 t"o*g sB%
Bảng 4-2. MGt sn h•# th-*g d•*g t"•* chuyi
Taát caû caùc haøm naøy ñeàu ñöôïc caøí ñaët trong thö víeän
Kst"i*g%hL. Chöông trình sau seõ mính hoïa caùc haøm treân
chuoãí kí töï:
Ji*clude Kstdio%hL
Ji*clude Kst"i*g%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
cha" sBg2UhX s2g2UhN
0"i*t2?MNha0 chuoi BiM@N
gets?sB@N
0"i*t2?MNha0 chuoi 2M@N
gets?s2@N
0"i*t2?tle*gthsi ed edl*tX st"le*?sB@X st"le*?s2@@N
i2?^st"c#0?sBX s2@@
0"i*t2?tThe st"i*gs a"e eAuall*t@N
st"cat?sBX s2@N
0"i*t2?tesl*tX sB@N
st"c06?sBX tThis is a test%l*t@N
0"i*t2?sB@N
i2?st"ch"?thellotX wew@@
0"i*t2?te is i* hellol*t@N
i2?st"st"?thi the"etX thit@@ 0"i*t2?t2ou*d hit@N
getch?@N
4
1.2+. $>T@A =>Z S=ZQ?O
Ta coù theá coí maûng haí chíeàu íaø maûng cuûa maûng moät
chíeàu. Daïng toáng quaùt ñeá khaí baùo maûng haí chíeàu ñoù íaø:
t60e a""a6_*a#egsi8eBhgsi8e2hN
Neá truy caäp ñeán phaàn töû cuûa maûng haí chíeàu, ta víeát
7- ShaQn Z. MgoFn ng*N la"= trLnh G
nhö sau:
a""a6_*a#egi*de7Bhgi*de72hN
Ví duï:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t tX iX *u#g9hgYhN
2o"?tcUN tK9N t@
2o"?icUN iKYN i@
*u#gthgih c ?tƒY@iBN
€ƒ *o! 0"i*t the# out ƒ€
2o"?tcUN tK9N t@ 3
2o"?icUN iKYN i@
0"i*t2?te9d tX *u#gthgih@N
0"i*t2?tl*t@N
4
getch?@N
4
Trong ví duï sau: *u#gUhgUh c B, *u#gUhgBh c 2, ., *u#g2h
g9h c B2. hình sau mính hoïa baûn chaát cuûa maûng haí chíeàu:
Maûng haí chíeàu íöu tröõ chæ soá theo thöù töï doøng-coät,
chæ soá thöù nhaát íaø doøng, chæ soá thöù haí íaø coät. Níeàu
naøy coù nghóa íaø: chæ soá beân phaûí nhaát seõ taêng nhanh
nhaát. Neá íöu tröõ maûng haí chíeàu ta caàn soá b?te theo coâng
Gh*ông &. Maûng 3a' chuo\i #brra? 8 Ttring%
79
thöùc sau:
$6te c si8e o2 i*de7B × si8e o2 i*de7 2 × si8eo2?t60e@
Hình sau theá híeän maûng haí chíeàu trong boä nhôù
Khí maûng haí chíeàu ñöôïc söû duïng nhö íaø tham soá cuûa
haøm, chæ gôûí con troû ñeán phaàn töû ñaàu tíeân. Tuy nhíeân,
tham soá hình thöùc cuûa haøm ñeá nhaän ñöôïc con troû haí chíeàu
phaûí khaí baùo ít nhaát íaø moät chíeàu ôû beân phaûí nhaát. Ví
duï, ñeá moät haøm nhaän ñöôïc maûng |10||10| ta phaûí khaí baùo
nhö sau:
void 2u*cB?i*t 7ghgBUh@
3
% % %
4
Neáu khoâng khaí baùo chæ soá beân phaûí nhaát trình bíeân
dòch seõ khoâng bíeát khí naøo chuyeán sang doøng khaùc.
Neá söû duïng maûng chuoãí, ta söû duïng maûng haí chíeàu
kíeáu cha". Kích thöôùc beân traùí xaùc ñònh soá chuoãí, kích
thöôùc beân phaûí xaùc ñònh ñoä daøí toáí ña cuûa moät chuoãí. Ví
duï:
cha" st"g9UhgRUhN
-6 ShaQn Z. MgoFn ng*N la"= trLnh G
Khí ñoù khaí baùo 30 chuoãí kí töï, moãí chuoãí coù ñoä daøí
toáí ta íaø 80. Neá truy caäp ñeán töøng chuoãí trong maûng ta
duøng cuù phaùp *a#egi*de7h. Ví duï:
gets?st"g2Uh@N
Nhaäp gíaù trò vaøo chuoãí taïí ñòa chæ thöù BZ. Caâu íeänh
treân cuõng töông ñöông vôùí íeänh sau:
gets?fst"g2UhgUh@N
Ví duï:
€ƒ A ve"6 si#0le te7t edito"% ƒ€
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
Jde2i*e MA‹ BUU
Jde2i*e LŠN RU
cha" te7tgMA‹hgLŠNhN
void #ai*?void@
3
i*t tX iX bN
0"i*t2?tŠ*te" a* e#0t6 li*e to Auit%l*t@N
2o"?tcUN tKMA‹N t@ 3
0"i*t2?tedi tX t@N
gets?te7tgth@N
i2?^ƒte7tgth@ $"ea5N €ƒ Auit o* $la*5 li*e ƒ€
4
2o"?icUN iKtN i@ 3
2o"?bcUN te7tgihgbhN b@ 0utcha"?te7tgihgbh@N
0utcha"?wl*w@N
4
getch?@N
4
1.24. TJO^ S>GH X>T@A I=BC@A NO> SB@ IJBT
Nhö ta ñaõ bíeát, teân maûng khoâng coù chæ soá chính íaø
con troû troû ñeán phaàn töû ñaàu tíeân cuûa maûng. Ngöôïc íaïí,
khaí baùo moät con troû coù theá duøng nhö moät maûng. Ví duï:
Gh*ông &. Maûng 3a' chuo\i #brra? 8 Ttring%
-1
cha" 0gBUhN
Khí ñoù, caùc caâu íeänh sau íaø töông ñöông:
0  f0gUhN
hoaëc 0 cc f0gUhN Ví duï:
i*t ƒ0X igBUhN
0 c iN
0gVh c BUUN €€ KcL ƒ?0V@ c BUU
Töông töï ñoáí vôùí maûng haí chíeàu:
i*t agBUhgBUhN
€€a c fagUhgUhN
agBhg2h c BUUN €€KcL ƒ??i*t ƒ@aB2@ c BUUN
Toáng quaùt, ñeá truy caäp ñeán phaàn töû bX 5 cuûa maûng
haí chíeàu ta duøng coâng thöùc sau:
agbhg5h KcL ƒ??$ase_t60e ƒ@a bƒ"o!_le*gth 5@
1.2#. 0=LTZ A>W@ XBGI X>T@A
1.29.1. Khôûi gaùn /aûng /oät chieNu
Daïng toáng quaùt ñeá khôûí taïo gíaù trò cho maûng moät
chíeàu nhö sau:
t60e a""a6_*a#egsi8eh c 3value_list4N
value_list íaø danh saùch caùc gíaù trò ñöôïc ngaên caùch
nhau bôûí daáu phaáy vaø coù cuøng kíeáu döõ ííeäu vôùí döõ ííeäu
cuûa maûng. Gíaù trò ñaàu tíeân ñöôïc ñaët vaøo vò trí ñaàu tíeân
cuûa maûng, gíaù trò thöù haí ñaët vaøo vò trí thöù haí, vaân vaân.
Ví duï sau khôûí gaùn caùc gíaù trò cho möôøí phaàn töû ñaàu tíeân
cuûa maûng.
i*t igBUh c 3BX2X9XYXVXWXTXRXZXBU4N
Khí ñoù, igUh nhaän gíaù trò B vaø igZh seõ nhaän gíaù trò BU
cha" st"gZhcMI li5e CMN
Caâu íeänh naøy töông ñöông vôùí caâu íeänh sau:
-2 ShaQn Z. MgoFn ng*N la"= trLnh G
cha" st"gBBhc3dIdXd dXdldXdidXd5dXdidXd dXdedXd
dXdCdXdlUd4N
Maëc daàu chuoãí chæ coù 8 kí töï nhöng ta vaãn caàn coù 9
vò trí ñeá íöu tröõ chuoãí naøy bôûí vì coù moät kí töï roãng cuoáí
cuøng ñeá thoâng baùo cho trình bíeân dòch bíeát chuoãí ñaõ keát
thuùc.
1.29.2. Khôûi gaùn /aûng hai chieNu
Maûng nhíeàu chíeàu cuõng ñöôïc khôûí gaùn nhö maûng 1
chíeàu baèng cuù phaùp sau:
t60e a""a6_*a#egsi8eBhgsi8e2h c 3value_list4N
Ví duï:
i*t sA"sgBUhg2h c 3
BX BX €ƒsA"sgUhgUh a*d ƒsA"sgUhgBhƒ€
2X YX €ƒsA"sgBhgUh a*d ƒsA"sgBhgBhƒ€
9X ZX
YX BWX
VX 2VX
WX 9WX
TX YZX
RX WYX
ZX RBX
BUX BUU€ƒsA"sgZhgUh a*d ƒsA"sgZhgBhƒ€
4N
Tuy nhíeân , ta coù theá gaùn theo moät caùch khaùc roõ
raøng hôn.
i*t sA"sgBUhg2h c 33BX B4 €ƒsA"sgUhgUh a*d sA"sgUhgBhƒ€
32X Y4 €ƒsA"sgBhgUh a*d sA"sgBhgBhƒ€
39X Z4
3YX BW4
3VX 2V4
3WX 9W4
3TX YZ4
3RX WY4
3ZX RB4
Gh*ông &. Maûng 3a' chuo\i #brra? 8 Ttring%
-
3BUX BUU4€ƒsA"sgZhgUh a*d sA"sgZhgBhƒ€
4N
1.29.3. Khôûi gaùn /aûng khoDng kích th'ôùc
Trong tröôøng hôïp ta khoâng bíeát chính xaùc thoâng tín caàn
gaùn cho maûng, khí ñoù ta khoâng theá khaí baùo moät maûng coù
kích thöôùc coá ñònh. Trình bíeân dòch C cho pheùp ta gaùn gíaù trò
cho maûng maø khoâng caàn xaùc ñònh kích thöôùc. Ví duï:
cha" eBgh c tRead e""o"l*tN
cha" e2gh c t–"ite e""o"l*tN
cha" e9gh c tCa**ot o0e* 2ilel*tN
1.3/. C=DL@A IJK@= A>XQ S>JB YL@ AZ>T@
Chöông trình sau íaø moät ga1e ñôn gíaûn, moâ phoûng
chöông trình ca"o. Ngöôøí chôí seõ cheøn kí töï ‹ vaøo vò trí troáng
cuûa hình chöõ nhaät, maùy tính seõ cheøn kí töï O. Chöông trình
keát thuùc vôùí 3 traïng thaùí: neáu coù haøng ngang, doïc, cheùo
chính vaø cheùo phuï coù cuøng kí töï ‹ ngöôøí chôí thaéng maùy
tính, ngöôïc íaïí neáu toaøn kí töï O maùy tính seõ thaéng, neáu caùc
oâ ñaõ ñöôïc íaáp kín maø khoâng beân naøo thaéng haí beân hoøa.
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
Ji*clude Kstdli$%hL
cha" ca"og9hg9hN
cha" chec5?@N
void i*it_#at"i7?@N
void dis0la6_#at"i7?@N
void get_0la6e"?@N
void get_co#0ute"?@N
void #ai*?void@
3
cha" do*eN
cl"sc"?@N
0"i*t2?t------Chuo*g t"i*h ca "o do* gia*------l*t@N
-& ShaQn Z. MgoFn ng*N la"= trLnh G
0"i*t2?t------Ba* la doi thu cua #a6 ti*h------l*t@N
do*e c w wN
i*it_#at"i7?@N
dis0la6_#at"i7?@N
do3
get_0la6e"?@N
do*e c chec5?@N
i2?do*eccw‹w@3
0"i*t2?t----Chuc #u*g^$a* da tha*g^----l*t@N
$"ea5N
4
get_co#0ute"?@N
do*e c chec5?@N
i2?do*e cc wOw@3
0"i*t2?t----So""6^$a* da thua cuoc^----l*t@N
$"ea5N
4
4!hile ?do*e ccw w@N
dis0la6_#at"i7?@N
getch?@N
4
void i*it_#at"i7?@3
i*t iX bN
2o"?icUN iK9N i@
2o"?bcUN bK9N b@
ca"ogihgbh c w wN
4
void dis0la6_#at"i7?@3
i*t iN
0"i*t2?tl*t@N
2o"?icUN iK9N i@
3
0"i*t2?t ec ˆ ec ˆ ec tX ca"ogihgUhX ca"ogihgBhX
ca"ogihg2h@N
0"i*t2?tl*---ˆ---ˆ---l*t@N
4
0"i*t2?tl*t@N
4
Gh*ông &. Maûng 3a' chuo\i #brra? 8 Ttring%
-4
void get_0la6e"?@3
i*t "o!X colu#*N
*ha0i
0"i*t2?tNha0 vao toa do ?do*g cot@it@N
sca*2?tededtXf"o!Xfcolu#*@N
"o!--N
colu#*--N
i2?ca"og"o!hgcolu#*h^cw w@3
0"i*t2?tcot do*g 5ho*g ho0 le^l*t@N
goto *ha0N
4
ca"og"o!hgcolu#*h c w‹wN
0"i*t2?tNguoi thuc hie*^l*t@N
dis0la6_#at"i7?@N
4
void get_co#0ute"?@3
i*t cX "N
2o"?"cUN "K9N"@
2o"?ccUN cK9N c@
i2?ca"og"hgch ccw w@ goto 5etthucN
5etthuci
i2?cƒ"ccZ@3
0"i*t2?tNguoi va #a6 hoa^^^t@N
getch?@N
e7it?U@N
4
ca"og"hgch c wOwN
0"i*t2?tMa6 ti*h thuc hie*^l*t@N
dis0la6_#at"i7?@N
4
cha" chec5?@3
i*t iN
2o"?icUN iK9N i@
i2?ca"ogihgUhccca"ogihgBhffca"ogihg2hccca"ogihgBh@
"etu"* ca"ogihgUhN
2o"?icUN iK9N i@
i2?ca"ogUhgihccca"ogBhgihffca"ogBhgihccca"og2hgih@
"etu"* ca"ogUhgihN
-+ ShaQn Z. MgoFn ng*N la"= trLnh G
i2?ca"ogUhgUhccca"ogBhgBh ff ca"og2hg2hccca"ogBhgBh@
"etu"* ca"ogBhgBhN
i2?ca"og2hgUhccca"ogBhgBh ff ca"ogUhg2hccca"ogBhgBh@
"etu"* ca"ogBhgBhN
"etu"* w wN
4
1.31. C>CO =BTZ IJ>cS @A=ZQGX P>U V>UZ I>GH
1.31.1. (aDu hoûi traTc nghieä/
C>CO 1. Choïn khaí baùo ñuùng :
a% i*t AgBUhN
$% i*tgBUh AN
c% i*t AgB%%BUhN
d% i*t AgBXBUhN
C>CO 2. Cho khaí baùo:
2loat AgYhN
i*t iN
Neá nhaäp döõ ííeäu cho A, choïn caâu naøo :
a% 2o" ?icBN i Kc YN i@3
0"i*t2?MNha0 AgedhiM@N
sca*2?MedMXfAgih@N
4
$% 2o" ?icBN i Kc YN i@ sca*2?MNha0 AgedhiMXAgih@N
c% 2o" ?icUN i Kc 9N i@3
0"i*t2?MNha0 AgedhiM@N
sca*2?MedMXfAgih@N
4
d% 0"i*t2?MNha0 AiM@N sca*2?MedMXA@N
C>CO 3. Cho khaí baùo bíeán:
i*t AgVhN
Choïn íeänh ñuùng:
a% AgBh c Y€2N
$% Ag2h c -WN
c% A?9@ c WN
Gh*ông &. Maûng 3a' chuo\i #brra? 8 Ttring%
-7
d% AgVh c BUN
C>CO %. Khaí baùo naøo ñuùng:
a% i*t Ag*hg#hN
$% i*t Ag2hg9hN
c% i*t AgB%%2XB%%9hN
d% i*t Ag9X 2hN
C>CO ,. Khí chaïy ñoaïn chöông trình:
i*t Ag2hg9hX iX bX SN
AgUhgUh c 9N AgUhgBh c -BN AgUhg2hic -YN
AgBhgUh c -ZN AgBXBh c UN AgBX2h c VN
SicUN
2o"?i c UN i K 2N i@
2o"?b c BN b K 9N b@
i2 ?AgiXbh K U@ S c S BN
0"i*t2?MedMXS@N
Keát quaû ín ra gíaù trò cuûa S íaø:
a%U $% -Z c% 9 d% V
1.31.2. Ba$i taä<
C>CO 1. Nhaäp soá töï nhíeân * vaø moät daõy soá thöïc 7
B
X
7
2
X %%%X 7
*
. Tìm soá íôùn nhaát vaø soá nhoû nhaát cuûa daõy.
Neám xem trong daõy coù bao nhíeâu soá döông, bao nhíeâu soá
aâm, bao nhíeâu soá 0 ? Loaïí naøo nhíeàu nhaát?
C>CO 2. Nhaäp moät daõy soá nguyeân 7
B
X 7
2
X %%%X 7
*
. In ríeâng
caùc soá chaün vaø caùc soá íeû, moãí íoaïí treân moät doøng.
C>CO 3. Nhaäp moät soá nguyeân döông *, xaây döïng daõy soá
nguyeân 7
U
X 7
B
X %%%X 7
*
trong ñoù 7
i
íaø soá Wibonaci thöù i: 7
U
cBX
7
B
cBX 7
i
c7
i-B
7
i-2
vôùí moïí i Lc 2. In daõy 7 íeân maøn hình.
C>CO %. Nhaäp moät daõy soá x
1
, x
2
,..., x
n
. Tính :

-- ShaQn Z. MgoFn ng*N la"= trLnh G
C>CO ,. Nhaäp moät daõy soá baát kyø 7
B
X 7
2
X%%%X 7
*
. In ñaûo
ngöôïc daõy ñoù, ví duï cho daõy B V 9 R, ín ra: R 9 V B. Saép
xeáp daõy taêng daàn, ín daõy. Saép xeáp daõy gíaûm daàn, ín
daõy.
C>CO -. Nhaäp haí daõy soá baát kyø 7
B
X 7
2
X%%%X 7
*
vaø 6
B
X
6
2
X%%%X 6
*
. Xaây döïng daõy thöù ba 8
B
X 8
2
X %%X 8
*
íaø toáng cuûa
haí daõy treân (8
i
c 7
i
6
i
), ín ba daõy íeân maøn hình, moãí daõy
treân moät doøng.
C>CO +. Cho haí ña thöùc:
P
*
?7@ c a
*
7
*
a
*-B
7
*-B
%%% a
B
7 a
U
?a
*
L

U@
~
#
?7@ c $
#
7
#
$
#-B
7
#-B
%%% $
B
7 $
U
?$
#
L U@
Goïí R?7@ c P
*
?7@ ~
#
?7@
Nhaäp caùc soá töï nhíeân * vaø #, caùc heä soá a
i
vaø $
b
cuûa
haí ña thöùc P
*
?7@ vaø ~
#
?7@, ín baäc vaø caùc heä soá cuûa ña
thöùc R?7@.
C>CO 4. Nhaäp 7 thöïc, * nguyeân döông vaø moät maûng caùc heä
soá a
U
X a
B
X %%%X a
*
, roàí tính gía trò cuûa ña thöùc:
P c a
*
7
*
a
*-B
7
*-B
%%% a
B
7 a
U%

Theo sô ñoà Hoocner :
Pc?%%%? ?a
*
7 a
*-B
@ 7 a
*-2
@7 %%% a
B
@7 a
U %

Ví duï :
P c 27
Y
97
9
- Y7
2
T7 Z
c ???27 9@7 - Y @7 T@7 Z %
C>CO #. Nhaäp moät daõy soá baát kyø 7
B
X 7
2
X%%%X 7
*
, cho bíeát
daõy coù ñoáí xöùng khoâng?, daõy coù íaäp thaønh moät caáp soá
coäng khoâng? Ví duï daõy B 9 V Y V 9 B íaø ñoáí xöùng, daõy B 9
V T íaø moät caáp soá coäng.
C>CO 1/. Nhaäp moät daõy soá baát kyø 7
B
X 7
2
X%%%X 7
*
, cho bíeát
Gh*ông &. Maûng 3a' chuo\i #brra? 8 Ttring%
-9
daõy thuoäc íoaïí naøo: taêng, gíaûm hay khoâng taêng, khoâng
gíaûm?
C>CO 11. Nhaäp moät daõy soá nguyeân döông 7
B
X 7
2
X%%%X 7
*
.
Taùch daõy 7 thaønh haí daõy: daõy A goàm caùc soá chaün, daõy B
goàm caùc soá íeû, saép xeáp daõy A taêng daàn, daõy B gíaûm
daàn, ín haí daõy A vaø B treân haí doøng khaùc nhau. Noáí haí daõy
A vaø B theo thöù töï ñoù thaønh moät daõy duy nhaát vaø gaùn trôû
íaïí vaøo daõy 7, ín daõy 7.
Ví duï nhaäp daõy 7c3VX TX UX 2X BX WX YX Z4 thì daõy
Ac3UX 2X YX W4, daõy Bc3ZX TX VX B4, vaø 7c3UX 2X YX WX ZX
TX VX B4.
C>CO 12. Nhaäp haí soá #, * vaø haí ma traän A
#X*
vaø B
#X*
. In caùc
ma traän AX BX CcA2B vaø CcA-B íeân maøn hình.
C>CO 13.
Nhaäp vaø ín ma traän A
#X*
.
Tìm soá nhoû nhaát vaø soá íôùn nhaát trong ma traän .
Tính toáng cuûa taát caû caùc phaàn töû trong ma traän.
Neám trong ma traän coù bao nhíeâu soá döông, bao nhíeâu
soá U, bao nhíeâu soá aâm.
C>CO 1%.
Nhaäp vaø ín ma traän A
#X*

Tìm vaø ín soá íôùn nhaát trong töøng haøng cuûa ma traän.
Tìm vaø ín soá íôùn nhaát trong töøng coät cuûa ma traän.
Tìm vaø ín soá nhoû nhaát treân ñöôøng cheùo chính cuûa ma
traän.
C>CO 1,.
96 ShaQn Z. MgoFn ng*N la"= trLnh G
Nhaäp vaø ín ma traän vuoâng A
*X*
.
A coù phaûí íaø ma traän ñoáí xöùng khoâng
A coù phaûí íaø ma traän ñôn vò khoâng?
(A íaø ñoáí xöùng neáu a
ib
ca
bi
vôùí moïí iXb cBX%%%X *. A íaø
ma traän ñôn vò neáu taát caû caùc phaàn töû treân ñöôøng cheùo
chính ñeàu baèng B vaø caùc phaàn töû coøn íaïí ñeàu baèng U).
Gh*ông 4. Gon troû #Sointer% 91
C=DL@A ,. CB@ IJBT (PBZ@IQJ"
Coù ba íí do ñeá söû duïng con troû: 1. Söû duïng con troû
truyeàn tham soá cho haøm ñeá íöu tröõ keát quaû cuûa bíeán sau
khí thoaùt khoûí haøm; 2. Caùc con troû caáp phaùt boä nhôù
ñoäng; 3. Con troû coù theá caûí thíeän híeäu quaû cuûa chöông
trình con.
Con troû íaø ñaëc tính maïnh nhaát vaø cuõng nguy híeám
nhaát trong ngoân ngöõ C.
1.32. 0=>WZ @ZQGX SB@ IJBT
Con troû íaø moät bíeán íöu tröõ ñòa chæ boä nhôù. Nòa chæ
naøy íaø vò trí cuûa ñoáí töôïng khaùc (chaúng haïn bíeán) trong
boä nhôù. Ví duï, moät bíeán chöùa ñòa chæ cuûa moät bíeán khaùc,
bíeán ñaàu tíeân goïí íaø con troû troû ñeán bíeán thöù haí.
1.33. BZQR@ SB@ IJBT
92 ShaQn Z. MgoFn ng*N la"= trLnh G
Daïng toáng quaùt ñeá khaí baùo moät bíeán con troû:
t60e ƒva"_*a#eN
t60e íaø kíeáu döõ ííeäu cuûa con troû, noù coù kíeáu döõ ííeäu
baát kì. t60e ñònh nghóa kíeáu döõ ííeäu maø noù troû ñeán, moïí
con troû ñeàu coù theá troû ñeán vò trí baát kì trong boä nhôù.
1.3%. TB>W@ IDT IJQC@ SB@ IJBT
Coù haí pheùp toaùn cô baûn ñoù íaø pheùp toaùn íaáy ñòa
chæ (f) íaáy gíaù trò (ƒ), ví duï:
# c fcou*tN
Naët vaøo trong bíeán # ñòa chæ cuûa bíeán cou*t hay #
nhaän ñòa chæ cuûa bíeán cou*t. Neá híeáu roõ hôn ta íaáy ví duï
cuï theá nhö sau: gíaû söû bíeán cou*t duøng vò trí trong boä nhôù
íaø 2UUU ñeá íöu tröõ gíaù trò, vaø gíaû söû bíeán cou*t coù gíaù trò
íaø BUU, sau caâu íeänh gaùn treân, # seõ coù gíaù trò íaø 2UUU.
Toaùn töû ƒ duøng ñeá íaáy gíaù trò cuûa bíeán coù ñòa chæ íöu taïí
con troû. Ví duï:
A c ƒ#N
Laáy gíaù trò cuûa bíeán coù ñòa chæ naèm trong #. Trong
tröôøng hôïp naøy # gíöõ ñòa chæ cuûa bíeán cou*t do ñoù caâu
íeänh treân seõ cho gíaù trò cuûa bíeán cou*t, vaø coù gíaù trò íaø
BUU. Caû haí pheùp toaùn naøy coù ñoä öu tíeân cao hôn caùc pheùp
toaùn soá hoïc (tröø pheùp toaùn tröø moät ngoâí, ñoáí vôùí pheùp
toaùn naøy coù cuøng ñoä öu tíeân).
Ta íuoân chaéc chaén raèng, con troû phaûí troû ñeán moät
kíeáu döõ ííeäu hôïp íeä. Ví duï neáu khaí baùo con troû kíeáu i*t,
trình bíeân dòch seõ híeáu haèng moïí ñòa chæ maø noù íöu tröõ
phaûí íaø ñòa chæ cuûa bíeán kíeáu i*t hoaëc noù khoâng troû
ñeán ñaâu. Bôûí vì C cho pheùp ta gaùn moïí ñòa chæ ñeán bíeán
Gh*ông 4. Gon troû #Sointer% 9
con troû nhöng noù seõ khoâng cho keát quaû mong muoán. Xeùt ví
duï:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
dou$le 7 c BUU%BX 6N
i*t ƒ0N
0 c f7N
6 c ƒ0N
0"i*t2?te2tX 6@N €ƒ SŽ 5h-*g i* "a BUU%B ƒ€
getch?@N
4
Chöông trình treân khoâng gaùn gíaù trò cuûa bíeán 7 cho 6.
Bôûí vì 0 íaø moät con troû nguyeân, chæ coù khoaûng haí hoaëc
boán b?te ñöôïc chuyeán sang 6.
1.3,. BZQMO I=DWS SB@ IJBT
Toáng quaùt, bíeáu thöùc con troû phuø hôïp vôùí quy íuaät
bíeáu thöùc khaùc. Tuy nhíeân coù vaøí ñíeám caàn quan taâm.
1.32.1. Vheù< toaùn gaùn
Nhö nhöõng bíeán khaùc, ta coù theá duøng con troû ôû beân
phaûí cuûa pheùp toaùn gaùn. Ví duï:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t 7N
i*t ƒ0BX ƒ02N
0B c f7N
02 c 0BN
€ƒi* <'a ch” c)a 7X 5h-*g 0hmi giF t"' ƒ€
0"i*t2?te0tX 02@N
9& ShaQn Z. MgoFn ng*N la"= trLnh G
getch?@N
4
Caû 0B vaø 02 ñeàu troû ñeán bíeán 7, ñòa chæ cuûa bíeán 7
ñöôïc híeán thò íeân maøn hình thoâng qua íeänh 0"i*t2?Me0M@
1.32.2. &oaùn t'û ,oá hoïc treDn con troû
Coù haí toaùn töû soá hoïc söû duïng cho con troû, ñoù íaø
pheùp coäng vaø pheùp toaùn tröø. Gíaû söû 0B íaø con troû
nguyeân chöùa ñòa chæ (coù gíaù trò) íaø 2UUU vaø soá nguyeân
coù ñoä daøí haí b?te. Bíeáu thöùc 0 cho gíaù trò cuûa 0 íaø 2UU2,
khoâng phaûí 2UUB, íyù do íaø moãí íaàn 0B taêng, noù seõ troû ñeán
moät soá nguyeân keá tíeáp trong boä nhôù, töông öùng vôùí víeäc
taêng haí b?te. Níeàu naøy cuõng töông töï nhö pheùp toaùn tröø. Ta
cuõng coù theá coäng hay tröø con troû vôùí moät soá nguyeân.
1.32.3. Qo ,aùnh con troû
Ta coù theá so saùnh haí bíeán con troû vôùí nhau, ví duï sau
kíeám tra con troû A coù íôùn hôn con troû 0 hay khoâng.
Gh*ông 4. Gon troû #Sointer% 94
i2?0KA@ 0"i*t2?M0 co dia chi *ho ho* AM@N
Thoâng thöôøng duøng pheùp toaùn so saùnh ñeá kíeám tra
xem caùc con troû coù troû ñeán moät ñoáí töôïng hay khoâng. Ví
duï:
Ji*clude Kstdio%hL
Ji*clude Kstdli$%hL
Ji*clude Kco*io%hL
Jde2i*e SI“Š VU
void 0ush?i*t i@N
i*t 0o0?void@N
i*t ƒtosX ƒ0BX stac5gSI“ŠhN
void #ai*?void@
3
i*t valueN
tos c stac5N €ƒ tos 0oi*ts to the to0 o2 stac5 ƒ€
0B c stac5N €ƒ i*itiali8e 0B ƒ€
do 3
0"i*t2?tŠ*te" valuei t@N
sca*2?tedtX fvalue@N
i2?value^cU@ 0ush?value@N
else 0"i*t2?tvalue o* to0 is edl*tX 0o0?@@N
4 !hile?value^c-B@N
getch?@N
4
void 0ush?i*t i@
3
0BN
i2?0Bcc?tosSI“Š@@ 3
0"i*t2?tStac5 Ove"2lo!%l*t@N
e7it?B@N
4
ƒ0B c iN
4
i*t 0o0?void@
3
i2?0Bcctos@ 3
0"i*t2?tStac5 a*de"2lo!%l*t@N
9+ ShaQn Z. MgoFn ng*N la"= trLnh G
e7it?B@N
4
0B--N
"etu"* ƒ?0BB@N
4
1.3-. CB@ IJBT P>U X>T@A
Con troû vaø maûng coù moáí ííeân heä chaëc cheõ vôùí nhau,
ví duï:
cha" st"gRUhX ƒ0BN
0B c st"N
Khí ñoù chöông trình seõ ñaët ñòa chæ cuûa st" vaøo bíeán
con troû 0B, ñeá truy caäp phaàn töû thöù 5 cuûa st", coù theá víeát
theo haí caùch sau:
st"gYh o" ƒ?0Y@
ví duï:
€ƒ I*de7 s as a* a""a6% ƒ€
void 0utst"?cha" ƒs@3
i*t tN
2o"?tcUN sgthN t@ 0utcha"?sgth@N
4
€ƒ Access s as a 0oi*te"% ƒ€
void 0utst"?cha" ƒs@3
!hile?ƒs@ 0utcha"?ƒs@N
4
1.3+. $>T@A S>WS SB@ IJBT
Con troû coù theá ñöôïc khaí baùo thaønh maûng gíoáng nhö
nhöõng kíeáu döõ ííeäu khaùc. Ví duï sau khaí baùo moät maûng con
troû nguyeân coù kích thöôùc 10.
i*t ƒ7gBUhN
Neá gaùn ñòa chæ cuûa bíeán nguyeân coù teân íaø va" ñeán
phaàn töû thöù 3 cuûa maûng 7 ta duøng íeänh sau:
Gh*ông 4. Gon troû #Sointer% 97
7g2h c fva"N
Khí ñoù ñeá íaáy gíaù trò cuûa bíeán va", ta duøng íeänh sau
v c ƒ7g2hN
Neá gôûí moät maûng con troû ñeán haøm, ta khaí baùo haøm
nhö sau:
void 2u*cB?i*t ƒ0gh@N
Khí ñoù haøm 2u*cB?@ nhaän tham soá íaø moät con troû, troû
ñeán maûng caùc con troû nguyeân. Thoâng thöôøng maûng con
troû thöôøng duøng ñeá íöu tröõ caùc con troû ñeán chuoãí. Ví duï:
cha" ƒ0gBUhN
0gUh c MChuoi thu *hatMN
%
%
%
0gZh c MChuoi thu #uoiMN
Ví duï:
Taïo moät haøm thoâng baùo íoãí vôùí moät maõ íoãí cho
tröôùc
void s6*ta7_e""o"?i*t *u#@3
static cha" ƒe""gh c 3 tCa**ot O0e* Filel*tX
tRead Š""o"l*tX
t–"ite Š""o"l*tX
tMedia Failu"el*t
4N
0"i*t2?testX e""g*u#h@N
4
1.34. TJBT AZ>W@ IZQRH
Ta coù theá duøng con troû troû ñeán moät con troû khaùc,
tình huoáng naøy goïí íaø troû gíaùn tíeáp. Neá khaí baùo con troû
naøy ta duøng cuù phaùp nhö sau:
t60e ƒƒva"_*a#eN
9- ShaQn Z. MgoFn ng*N la"= trLnh G
i*t ƒƒ7N
Khí ñoù x íaø moät con troû ñeán moät con troû soá nguyeân,
ñeá truy caäp ñeán gíaù trò gíaùn tíeáp naøy ta duøng: ƒƒva"_*a#eN
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t 7X ƒ0X ƒƒAN
7 c BUN
0 c f7N
A c f0N
0"i*t2?tedtX ƒƒA@N €ƒ 0"i*t the value o2 7 ƒ€
getch?@N
4
1.3#. 0=LTZ A>W@ SB@ IJBT
Sau khí bíeán con troû cuïc boä ñöôïc khaí baùo, nhöng tröôùc
khí gaùn moät gíaù trò noù seõ chöùa moät gíaù trò khoâng xaùc
ñònh. Bíeán toaøn cuïc seõ töï ñoäng gaùn gíaù trò NaLL. Neáu söû
duïng bíeán con troû khí chöa xaùc ñònh cho noù moät gíaù trò
hoaëc ñoáí töôïng, chöông trình seõ bò íoãí.
1.%/. CB@ IJBT =>UX
Gh*ông 4. Gon troû #Sointer% 99
Moät trong nhöõng vaán ñeà phöùc taïp nhaát cuûa con troû
ñoù íaø con troû haøm. Tuy haøm khoâng phaûí íaø moät bíeán
nhöng noù vaãn coù saün moät ñòa chæ trong boä nhôù vaø coù
theá gaùn ñòa chæ naøy cho con troû. Nòa chæ naøy íaø ñíeám
vaøo cuûa haøm vaø noù íaø ñòa chæ ñöôïc söû duïng khí goïí haøm.
Neáu coù moät con troû ñeán haøm, khí ñoù ta coù theá goïí haøm
thoâng qua con troû naøy. Con troû haøm cuõng coù theá tham gía
nhö íaø moät tham soá cuûa haøm khaùc.
Ta coù theá nhaän ñòa chæ cuûa haøm baèng caùch söû duïng
teân haøm maø khoâng coù caùc tham soá. Xeùt ví duï sau:
Ji*clude Kstdio%hL
Ji*clude Kst"i*g%hL
Ji*clude Kco*io%hL
void chec5?cha" ƒaXcha" ƒ$X
i*t ?ƒc#0@?co*st cha" ƒXco*st cha" ƒ@@N
void #ai*?void@3
cha" sBgRUhX s2gRUhN
i*t ?ƒ0@?co*st cha" ƒX co*st cha" ƒ@N
0 c st"c#0N
gets?sB@N
gets?s2@N
chec5?sBX s2X 0@N
getch?@N
4
void chec5?cha" ƒaX cha" ƒ$X
i*t ?ƒc#0@?co*st cha" ƒX co*st cha" ƒ@@
3
0"i*t2?tTesti*g 2o" eAualit6%l*t@N
i2?^?ƒc#0@?aX $@@ 0"i*t2?tŠAualt@N
else 0"i*t2?tNot ŠAualt@N
4
Khí goïí haøm chec5 coù haí con troû kí töï vaø moät con troû
haøm. Beân trong haøm chec5, caâu íeänh ?ƒc#0@?aX $@ thöïc
chaát íaø goïí haøm st"c#0 ñöôïc troû bôûí c#0 vôùí haí tham soá a
166 ShaQn Z. MgoFn ng*N la"= trLnh G
vaø $. Noù cuõng íaø moät caùch goïí haøm thoâng qua con troû.
Caùch thöù haí nhö sau:
c#0?aX $@N
Ta cuõng coù theá goïí haøm chec5 baèng caùch söû duïng
tröïc tíeáp haøm st"c#0.
chec5?sBX s2X st"c#0@N
Ví duï:
Ji*clude Kstdio%hL
Ji*clude Kct60e%hL
Ji*clude Kstdli$%hL
Ji*clude Kst"i*g%hL
Ji*clude Kco*io%hL
void chec5?cha" ƒaXcha" ƒ$Xi*t ?ƒc#0@?co*st cha"ƒXco*st
cha"ƒ@@N
i*t *u#c#0?co*st cha" ƒaX co*st cha" ƒ$@N
void #ai*?void@3
cha" sBgRUhX s2gRUhN
gets?sB@N
gets?s2@N
i2?isal0ha?ƒsB@@
chec5?sBX s2X st"c#0@N
else
chec5?sBX s2X *u#c#0@N
getch?@N
4
void chec5?cha" ƒaXcha" ƒ$Xi*t ?ƒc#0@?co*st cha"ƒXco*st
cha"ƒ@@3
0"i*t2?tTesti*g 2o" eAualit6%l*t@N
i2?^?ƒc#0@?aX $@@ 0"i*t2?tŠAualt@N
else 0"i*t2?tNot ŠAualt@N
4
i*t *u#c#0?co*st cha" ƒaX co*st cha" ƒ$@3
i2?atoi?a@ccatoi?$@@ "etu"* UN
else "etu"* BN
4
Chöông trình sau kíeám tra moät chuoãí coù phaûí íaø soá hay
Gh*ông 4. Gon troû #Sointer% 161
khoâng? Neáu íaø soá thì so saùnh theo kíeáu soá, neáu íaø chuoãí
so saùnh theo daïng chuoãí.
1.%1. C>RH H=>WI VBG @=LW YBG@A
1.#1.1. (aá< <haùt boä nhôù baWng ha$/ /a!!oc("
Caáp phaùt ñoäng íaø chöông trình seõ nhaän boä nhôù khí
thöïc thí, haøm hoã trôï cho caáp phaùt ñoäng trong C íaø #alloc?@
(caáp phaùt). Haøm naøy naèm trong thö víeän stdli$%h%
Cuù phaùp void ƒ#alloc?i*t si8e@
Haøm #alloc seõ traû veà con troû kíeáu void ñíeàu naøy coù
nghóa íaø ta coù theá gaùn cho moïí kíeáu con troû, vaø con troû
naøy troû ñeán b?te ñaàu tíeân cuûa vuøng ñöôïc caáp phaùt, vuøng
nhôù naøy íaø moät daõy caùc b?te ííeân tíeáp nhau. Neáu boä nhôù
khoâng ñuû caáp phaùt, haøm cho con troû gíaù trò NaLL. Ví duï:
Cha" ƒ0N
P c #alloc?BUUU@N
Caáp phaùt 1000 b?te ííeân tuïc trong boä nhôù, vaø 0 seõ troû
ñeán b?te ñaàu tíeân trong 1000 b?te vöøa caáp phaùt. Trong ví duï
treân khoâng baét buoäc con troû coù kíeáu gì ñeá nhaän gíaù trò
traû veà cuûa haøm #alloc. Con troû void seõ töï ñoäng chuyeán
ñoáí kíeáu cho phuø hôïp.
1.#1.2. %iaûi <hoùng boä nhôù baWng ha$/ :ree("
Haøm 2"ee?void ƒ*a#e@ gíaûí phoùng con troû môùí ñöôïc
caáp phaùt bôûí haøm #alloc. Haøm 2"ee naèm trong thö víeän
stdio%h.
1.%2. $BGI \BR P>R@ YQ? PLWZ SB@ IJBT
1.#2.1. Xaùc +ònh con troû tr'ôùc khi ,'û ;uïng
162 ShaQn Z. MgoFn ng*N la"= trLnh G
Chuù yù trong quaù trình ñoïc vaø ghí döõ ííeäu vaøo con troû.
Neáu con troû chöa xaùc ñònh thì víeäc ñoïc seõ cho moät gíaù trò
khoâng mong muoán, neáu ghí coù theá ta seõ ghí ñeø íeân maõ
hoaëc íaø döõ ííeäu cuûa chöông trình. Ví duï:
€ƒ This 0"og"a# is !"o*g% ƒ€
i*t #ai*?void@3
i*t 7X ƒ0N
7 c BUN
ƒ0 c 7N
"etu"* UN
4
Chöông trình treân seõ gaùn gíaù trò 10 vaøo moät vò trí naøo
ñoù trong boä nhôù maø ta chöa xaùc ñònh bôûí vì con troû 0 chöa
bao gíôø ñöôïc gaùn moät gíaù trò cuï theá. Trong tröôøng hôïp
chöông trình nhoû coù theá khoâng gaây aûnh höôûng nhíeàu, neáu
chöông trình quaù íôùn, gíaù trò cuûa 0 coù theá íaø moät vò trí
naøo ñoù cuûa döõ ííeäu, heä ñíeàu haønh, maõ chöông trình.
1.#2.2. KhoDng neDn gaùn giaù trò cuï the* cho con troû
€ƒ This 0"og"a# is !"o*g% ƒ€
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
i*t 7X ƒ0N
7 c BUN
0 c 7N
0"i*t2?tedtX ƒ0@N
getch?@N
4
Khí goïí haøm 0"i*t2 khoâng ín gíaù trò cuûa x noù chæ ín
moät gíaù trò khoâng xaùc ñònh bôûí vì íeänh gaùn 0c7 íaø saí. Neá
söûa íoãí chöông trình naøy, ta duøng íeänh 0cf7.
Gh*ông 4. Gon troû #Sointer% 16
1.#2.3. %iaù trò con troû tha) +o*i
€ƒ This 0"og"a# has a $ug% ƒ€
Ji*clude Kst"i*g%hL
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@
3
cha" ƒ0BN
cha" sgRUhN
0B c sN
do 3
gets?s@N €ƒ "ead a st"i*g ƒ€
€ƒ 0"i*t the deci#al eAuivale*t o2 each
cha"acte" ƒ€
!hile?ƒ0B@ 0"i*t2?t edtX ƒ0B@N
4 !hile?st"c#0?sX tdo*et@@N
getch?@N
4
Chöông trình treân duøng con troû 0B ñeá ín caùc kí töï chöùa
trong s ra maøn hình. OU ñaây s chæ gaùn cho 0B coù moät íaàn.
Voøng íaëp ñaàu tíeân 0B troû ñeán phaàn töû ñaàu tíeân cuûa s.
Tuy nhíeân voøng íaëp thöù haí 0B ñaõ taêng íeân 1, do ñoù noù
khoâng troû ñeán phaàn töû naèm ôû beân traùí nhaát cuûa s vì
vaäy st"c#0?sXMdo*eM@ khoâng cho keát quaû chính xaùc. Neá
khaéc phuïc íoãí treân ta ñöa íeänh 0Bcs vaøo trong voøng íaëp.
1.%3. C>CO =BTZ IJ>cS @A=ZQGX P>U V>UZ I>GH
1.#3.1. (aDu hoûi traTc nghieä/
C>CO 1. Cho bíeát keát quaû híeän ra maøn hình
i*t ƒ0X ƒAX 7cBUN
%
%
0 c f7N
0"i*t2?Medl*MX ƒ0@N
16& ShaQn Z. MgoFn ng*N la"= trLnh G
A c 0N
0"i*t2?Medl*MX ƒA@N
ƒA c 2N
0"i*t2?Medl*MX 7@N
0"i*t2?Medl*MX ƒA@N
0"i*t2?Medl*MX ƒ0@N
C>CO 2. Cho bíeát keát quaû híeän ra maøn hình
i*t ƒ0X 7 c BUN 6 c 2UN
%
%
0 c f7N
0"i*t2?Medl*MX7@N
ƒ0 c 6N
0"i*t2?Medl*MX7@N
C>CO 3. Cho bíeát keát quaû híeän ra maøn hình
i*t ƒ0X 7 c BUN
%
%
0 c #alloc?si8eo2?i*t@@N
ƒ0 c 7N
0"i*t2?Medl*MX7@N
0"i*t2?Medl*MXƒ0@N
7 c 7 2N
0"i*t2?Medl*MX7@N
0"i*t2?Medl*MXƒ0@N
C>CO %. Cho bíeát keát quaû híeän ra maøn hình
i*t ƒ0X agBUhN
%
%
%
2o"?i c UN i K BUN i@ agih c i BN
0 c fag9hN
0"i*t2?Medl*MXƒ0@N
0 c 0 „ 2N
0"i*t2?Medl*MXƒ0@N
0 c 0 YN
Gh*ông 4. Gon troû #Sointer% 164
0"i*t2?Medl*MXƒ0@N
1.#3.2. Ba$i taä<
C>CO 1. Nhaäp soá töï nhíeân *, caáp phaùt cho con troû 0 * soá
nguyeân trong boä nhôù. Nhaäp daõy caùc soá nguyeân vaøo 0. Tìm
soá íôùn nhaát vaø soá nhoû nhaát cuûa daõy. Neám trong daõy coù
bao nhíeâu soá döông, bao nhíeâu soá aâm, bao nhíeâu soá U ? Loaïí
naøo nhíeàu nhaát ?
C>CO 2. Caáp phaùt boä nhôù vaø nhaäp moät daõy soá baát kyø
]
1
@ ]
2
@...@ ]
n
. In ñaûo ngöôïc daõy ñoù, ví duï cho daõy B V 9 R, ín ra:
R 9 V B. Saép xeáp daõy taêng daàn, ín daõy. Saép xeáp daõy
gíaûm daàn, ín daõy.
Gh*ông +. Ka'1 #Wunction% 167
C=DL@A -. H>UX (.O@SIZB@"
1.%%. 3>d@A IBM@A NO>WI SOT> XBGI =>UX
Daïng toáng quaùt cuûa moät haøm:
"etu"*_t60e 2u*ctio*_*a#e?0a"a#ete" list@
3
$od6 o2 the 2u*ctio*
4
Kíeáu traû veà coù kíeáu döõ ííeäu baát kì, ngoaïí tröø kíeáu
maûng. Danh saùch tham soá caùch nhau bôûí daáu phaáy. Haøm
coù theá coù tham soá hoaëc khoâng. Taát caû caùc tham soá cuûa
haøm phaûí ñöôïc khaí baùo moät caùch ríeâng bíeät.
2?t60e va"BX t60e va"2X `X t60e va"N@%
Neá khaí baùo moät haøm, ta duøng khuoân daïng nhö sau:
"etu"*_t60e 2u*ctio*_*a#e?0a"a#ete" list@N
"etu"* t60e #ai*?@3
state#e*ts N
4
"etu"*_t60e 2u*ctio*_*a#e?0a"a#ete" list@
3
$od6 o2 the 2u*ctio*
4
Neá goïí haøm, ta duøng cuù phaùp
2u*ctio*_*a#e?0a"a#ete"BX 0a"a#ete"2X `X 0a"a#ete"N@; Neáu
haøm khoâng coù tham soá hình thöùc ta duøng Fu*ctio*_*a#e?@N
1.%,. C>WS FO>GI H=>dX PZ SOT> =>UX
Moãí haøm íaø moät khoáí íeänh ríeâng bíeät, ta khoâng theá
truy caäp bôûí moät caâu íeänh ôû khoáí khaùc. Ví duï nhö nhaûy
töø haøm naøy ñeán haøm khaùc. Maõ taïo neân thaân haøm ñöôïc
aán daáu ñoáí vôùí nhöõng chöông trình khaùc ngoaïí tröø bíeán cuïc
16- ShaQn Z. MgoFn ng*N la"= trLnh G
boä hoaëc nhöõng döõ ííeäu khaùc. Noù coù theá taùc ñoäng hoaëc
khoâng ñoáí vôùí phaàn khaùc cuûa chöông trình. Noùí caùch khaùc,
maõ vaø döõ ííeäu trong haøm naøy khoâng theá töông taùc vôùí
bíeán vaø maõ trong haøm khaùc. Bíeán ñònh nghóa beân trong
haøm goïí íaø bíeán cuïc boä, vaø noù seõ khôûí taïo khí vaøo haøm
vaø huûy boû khí thoaùt khoûí haøm. Bíeán cuïc boä khoâng gíöõ
gíaù trò khí thoaùt khoûí haøm. Trong C, khoâng cho pheùp ñònh
haøm trong haøm.
1.%-. T=>X \BR SOT> =>UX
Trong moät haøm neáu söû duïng tham soá, noù phaûí ñöôïc
khaí baùo bíeán vaø nhaän gíaù trò cuûa caùc tham soá. Caùc bíeán
naøy ñöôïc goïí íaø tham soá hình thöùc. Bíeán naøy gíoáng nhö íaø
bíeán cuïc boä beân trong haøm vaø ñöôïc taïo ra khí vaøo haøm vaø
bò huûy khí thoaùt khoûí haøm. Ví duï:
i*t is_i*?cha" ƒsX cha" c@
3
!hile ?ƒs@
i2 ?ƒsccc@ "etu"* BN
else sN
"etu"* UN
4
1.#3.1. %oïi ha$/ theo tha/ trò 1a$ theo tha/ chieáu
Trong haàu heát caùc ngoân ngöõ íaäp trình, coù haí caùch
gôûí tham soá ñeán chöông trình con:
1. Gôûí theo gíaù trò: sao cheùp gíaù trò cuûa tham soá vaøo
tham soá hình thöùc cuûa chöông trình con. Trong tröôøng hôïp
naøy, moïí thay ñoáí tham soá hình thöùc khoâng aûnh höôûng ñeán
tham soá.
2. Gôûí theo tham chíeáu: ñòa chæ cuûa tham soá seõ ñöôïc
sao cheùp ñeán tham soá hình thöùc. Khí ñoù, moïí thay ñoáí treân
Gh*ông +. Ka'1 #Wunction% 169
tham soá hình thöùc seõ thay ñoáí tham soá. Ví duï:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
i*t sA"?i*t 7@N
void #ai*?void@3
i*t tcBUN
0"i*t2?Med‰2cedMXtXsA"?t@@N
getch?@N
4
i*t sA"?i*t 7@3
7 c 7 ƒ 7N
"etu"* 7N
4
Trong ví duï treân, gíaù trò cuûa tham soá tcBU ñöôïc sao
cheùp ñeán tham soá hình thöùc 7. Khí gaùn 7c7ƒ7 chæ coù bíeán 7
thay ñoáí trong khí ñoù gíaù trò cuûa t vaãn gíöõ nguyeân.
Neá gôûí moät tham chíeáu ñeán haøm ta söû duïng con troû.
Khí ñoù ñòa chæ cuûa tham soá seõ ñöôïc truyeàn cho tham soá
hình thöùc. Neáu trong haøm coù thay ñoáí gíaù trò cuûa tham soá
hình thöùc, seõ thay ñoáí gíaù trò cuûa tham soá. Ví duï:
Ji*clude Kstdio%L
Ji*clude Kco*io%hL
void s!a0?i*t ƒ7X i*t ƒ6@N
void #ai*?void@3
i*t iX bN
i c BUN
b c 2UN
0"i*t2?Mt"uoc 5hi doi icedX bcedMXiX b@N
s!a0?fiXfb@N
0"i*t2?Msau 5hi doi icedX bcedMXiX b@N
getch?@N
4
1.#3.2. %ôûi /aûng +eán ha$/
Khí gôûí maûng ñeán haøm, ta gôûí ñòa chæ cuûa maûng ñeán
116 ShaQn Z. MgoFn ng*N la"= trLnh G
haøm, trong tröôøng hôïp naøy moïí thay ñoáí treân maûng beân
trong haøm seõ íaøm thay ñoáí gíaù trò maûng trong tham soá. Ví
duï:
Ji*clude Kco*io%hL
Ji*clude Kstdio%hL
Ji*clude Kct60e%hL
Ji*clude Kco*io%hL
void a00e"?cha" ƒst"@N
void #ai*?void@3
cha" ƒsN
gets?s@N
u00e"?s@N
0"i*t2?MesMXs@N
getch?@N
4
1.%+. T=>X \BR IJB@A =>UX X>Z@
Ta coù theá gôûí tham soá ñeán haøm #ai* thoâng qua doøng
íeänh DOS. Tham soá naøy ñöôïc víeát sau teân chöông trình. Coù
haí tham soá ñöôïc xaây döïng saün trong haøm #ai*?@, ñoù a"gv
vaø a"gc duøng ñeá nhaän tham soá töø doøng íeänh. a"gc cho
bíeát soá tham soá ñöôïc gôûí ñeán haøm #ai*?@ thoâng qua caâu
íeänh vaø ñoù íaø moät soá nguyeân, coù gíaù trò ít nhaát íaø 1 bôûí
vì teân cuûa chöông trình íaø tham soá ñaàu tíeân. Tham soá a"gv
íaø moät con troû ñeán moät maûng con troû kí töï (maûng caùc
chuoãí). Taát caû caùc tham soá trong doøng íeänh íaø chuoãí kí töï.
Caùc soá neáu coù seõ ñöôïc chuyeán ñoáí bôûí ngöôøí duøng. Daïng
toáng quaùt cuûa haøm #ai*?@ coù tham soá nhö sau:
t60e #ai*?i*t a"gcX cha" ƒa"gvgh@
Ví duï:
Ji*clude Kstdio%hL
Ji*clude Kstdli$%hL
Gh*ông +. Ka'1 #Wunction% 111
i*t #ai*?i*t a"gcX cha" ƒa"gvgh@
3
i2?a"gc^c2@ 3
0"i*t2?t’ou 2o"got to t60e 6ou" *a#e%l*t@N
e7it?B@N
4
0"i*t2?tHello estX a"gvgBh@N
"etu"* UN
4
Moãí tham soá cuûa doøng íeänh DOS caùch nhau ít nhaát íaø
moät khoaûng troáng. Ví duï:
€ƒ Cou*tdo!* 0"og"a#% ƒ€
Ji*clude Kstdio%hL
Ji*clude K#ath%hL
i*t #ai*?i*t a"gcX cha" ƒa"gvgh@
3
i2?a"gcK2@ 3
0"i*t2?t’ou #ust e*te" the le*gth o2 the
cou*tl*t@N
0"i*t2?to* the co##a*d li*e% T"6 agai*%l*t@N
e7it?B@N
4
0"i*t2?teU%22tXato2?a"gvgBh@ato2?a"gvg2h@@N
"etu"* UN
4
1.%4. C>CO FQG@= JQIOJ@
Coù haí caùch ñeá thoaùt khoûí haøm, thöïc híeän ñeán caâu
íeänh cuoáí cuøng, hoaëc gaëp íeänh "etu"* ñaàu tíeân. Moät haøm
coù theá chöùa nhíeàu íeänh "etu"*.
Taát caû caùc haøm ñeàu traû veà moät gíaù trò, ngoaïí tröø
haøm coù kíeáu void. Neáu haøm khoâng phaûí kíeáu void maø ta
khoâng traû veà moät gíaù trò naøo, chöông trình seõ traû veà moät
gíaù trò baát kì naøo ñoù. Neáu haøm coù traû veà moät gíaù trò
naøo ñoù, noù coù theá tham gía vaøo bíeáu thöùc. Haøm coù theá
112 ShaQn Z. MgoFn ng*N la"= trLnh G
traû veà kíeáu con troû, khí ñoù khaí baùo kíeáu döõ ííeäu traû veà
phaûí roõ raøng, ví duï ta khoâng theá traû veà kíeáu con troû i*t
ñeá traû veà kíeáu con troû cha".
Thoâng thöôøng coù ba íoaïí haøm cô baûn.
1. Tính toaùn vaø traû veà moät gíaù trò.
2. Haøm thao taùc treân thoâng tín vaø traû veà moät gíaù trò
cho bíeát thao taùc coù thaønh coâng hay khoâng.
3. Haøm khoâng traû veà moät gíaù trò naøo. Taát caû caùc
haøm khoâng traû veà gíaù trò ñeàu phaûí khaí baùo kíeáu void.
1.%#. 6QG NO^
Moät haøm ñöôïc goïí íaø ñeä quy neáu moät caâu íeänh naøo
ñoù trong thaân haøm goïí ñeán chính noù. Khí goïí ñeä quy, taäp
taát caû caùc bíeán cuïc boä vaø caùc tham soá seõ ñöôïc íöu tröõ
trong stac5, maõ haøm seõ thöïc thí töø ñænh stac5.
Goïí ñeä quy khoâng phaûí íaø taïo moät phíeân baûn môùí
cuûa haøm, chæ coù nhöõng bíeán ñaõ vaø ñang hoaït ñoäng íaø
môùí, moãí íaàn traû veà trong íôøí goïí ñeä quy, caùc bíeán naøy
seõ bò huûy khoûí stac5 vaø chöông trình quay íaïí ñíeám goïí haøm.
Caùc haøm ñeä quy thöôøng thöïc thí chaäm hôn caùc thuaät toaùn
töông ñöông khoâng ñeä quy. Goïí ñeä quy cuõng coù khaû naêng
gaây traøn stac5. Níeám thuaän tíeän cuûa ñeä quy íaø taïo nhöõng
chöông trình ñôn gíaûn hôn vaø roõ raøng hôn, ví duï nhö thuaät
toaùn Auic5so"t khoù caøí ñaët baèng caùch íaëp. Khí söû duïng
ñeä quy phaûí coù ñíeàu kíeän döøng. Ví duï:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
lo*g giaithua?i*t *@N
void #ai*?void@
Gh*ông +. Ka'1 #Wunction% 11
3
i*t *N
0"i*t2?tNha0 *it@N
sca*2?tedtXf*@N
0"i*t2?ted giai thua celdl*tX *X giaithua?*@@N
getch?@N
4
lo*g giaithua?i*t *@
3
i2 ?*ccU@ "etu"* BN
else
"etu"* *ƒgiaithua?*-B@N
4
1.,/. 0=>Z V>WB ]>@= \>WS= I=>X \BR SBW YBG
]>UZ VZQR@ YBMZ
Ta coù theá ñònh nghóa moät haøm coù soá tham soá thay
ñoáí khí goïí haøm, ví duï nhö haøm 0"i*t2. Neá ñònh nghóa moät
haøm theo daïng naøy ta theâm daáu 3 chaám vaøo sau tham soá
cuoáí cuøng. Ví duï:
i*t 2B?i*t aX i*t $X `@
Khí ñònh nghóa haøm, ta söû duïng cuù phaùp töông töï. Moät
haøm söû duïng tham soá bíeán ñoáí phaûí coù ít nhaát moät tham
soá thöïc söï. Ví duï víeát haøm tính toáng caùc soá nguyeân cho
ñeán khí gaëp soá 0.
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
i*t su#?i*t aX %%%@
3
i*t total c UN
i*t ƒa"gN
a"g c faN
!hile ?ƒa"g@ 3
total c ƒa"gN
a"gN
11& ShaQn Z. MgoFn ng*N la"= trLnh G
4
"etu"* totalN
4
void #ai*?void@
3
0"i*t2?tl* To*g 9 soiedtXsu#?BX2X9XU@@N
0"i*t2?tl* To*g Y soiedtXsu#?BX2X9XYXU@@N
getch?@N
4
1.,1. C>CO =BTZ IJ>cS @A=ZQGX P>U V>UZ I>GH
1.21.1. (aDu hoûi traTc nghieä/
C>CO 1. Cho bíeát keát quaû treân maøn hình
i*t 2?i*t 7@3
7 c 7 ƒ 7N
0"i*t2?MedMX 7@N
"etu"* 7N
4
void #ai*?void@3
i*t ac2N
0"i*t2?Medl*MX2?a@@N
0"i*t2?MedMXa@N
getch?@N
4
C>CO 2. Cho bíeát keát quaû treân maøn hình
i*t 2?i*t 7@3
7 c 7 ƒ 7N
0"i*t2?MedMX 7@N
"etu"* 7N
4
void #ai*?void@3
i*t 7c2N
0"i*t2?Medl*MX2?7@@N
0"i*t2?MedMX7@N
getch?@N
Gh*ông +. Ka'1 #Wunction% 114
4
C>CO 3. Cho bíeát keát quaû treân maøn hình
void 2?i*t i@3
i*t bcBUN €€N+u $} do*g l[*h *•6X 5+t Aum sŽ *hH th+ *•o|
i c i ƒ 2N
0"i*t2?Micedl*MXi@N
0"i*t2?Mbcedl*MXb@N
4
void #ai*?void@3
i*t bcVX 7cTN
0"i*t2?Mbcedl*MXb@N
0"i*t2?M7cedl*MX7@N
2?7@N
0"i*t2?Mbcedl*MXb@N
0"i*t2?M7cedl*MX7@N
getch?@N
4
C>CO %. Cho bíeát keát quaû treân maøn hình
void 2?i*t ƒ0@3
ƒ0 ƒc 2N
4
void #ai*?void@3
i*t 7N
0"i*t2?M7cedMX7@N
2?f7@N
0"i*t2?M7cedMX7@N
getch?@N
4
1.21.2. Ba$i taä<
C>CO 1. Víeát moät haøm ñoáí moät soá thaäp phaân sang soá nhò
phaân vaø ngöôïc íaïí.
C>CO 2. Víeát haøm ñoáí moät soá thaäp phaân sang heä thaäp íuïc
phaân vaø ngöôïc íaïí.
C>CO 3. Víeát haøm tính x
n
11+ ShaQn Z. MgoFn ng*N la"= trLnh G
C>CO %. Víeát haøm Max, mín, trung bình tìm soá íôùn nhaát cuûa
moät daõy soá cho tröôùc.
C>CO ,. Víeát haøm ñoáí chöõ hoa sang thöôøng vaø ngöôïc íaïí.
Gh*ông 7. Kie>u Ttructure,@ cnion@ Hnu1erate 3a' c,erA[e;ine 117
C=DL@A +. 0ZQMO !IJOSIOJQ\1 U@ZB@1
E@OXQJ>IQ P>U U\QJ23Q`Z@Q
1.,2. C>RO IJOWS
Caáu truùc íaø taäp caùc bíeán ñöôïc tham chíeáu thoâng qua
moät teân, caáu truùc cho pheùp ta gíöõ moáí quan heä thoâng tín
gíöõa caùc bíeán vôùí nhau. Bíeán beân trong caáu truùc goïí íaø
thaønh víeân. Taát caû caùc thaønh víeân cuûa caáu truùc coù moáí
quan heä logic vôùí nhau. Khaí baùo:
st"uct st"uct_*a#e3
t60e #e#$e"_*a#eN
t60e #e#$e"_*a#eN
%
%
%
t60e #e#$e"_*a#eN
4va"*a#eN
Ví duï:
st"uct add3
cha" *a#eg9UhN
cha" st"eetgYUhN
cha" cit6g2UhN
cha" stateg9hN
u*sig*ed lo*g i*t 8i0N
4 add_i*2o"N
Khaí baùo kíeáu caáu truùc coù teân íaø add, vaø bíeán caáu
truùc kíeáu add coù teân íaø add_i*2o". Neá khaí baùo moät bíeán
caáu truùc, ta coù theá khaí baùo tröïc tíeáp trong íuùc khaí baùo
kíeáu hoaëc coù theá khaí baùo ríeâng bíeät theo cuù phaùp sau:
st"uct Kst"uct*a#eL Kva"*a#eLN
Khí khaí baùo moät caáu truùc, trình bíeân dòch seõ cung caáp
11- ShaQn Z. MgoFn ng*N la"= trLnh G
ñaày ñuû boä nhôù cho caùc thaønh víeân. Ta coù theá khaí baùo
nhíeàu bíeán caáu truùc khí khaí baùo caáu truùc.
st"uct add"3
cha" *a#eg9UhN
cha" st"eetgYUhN
cha" cit6g2UhN
cha" stateg9hN
u*sig*ed lo*g i*t 8i0N
4 add"_i*2oX $i*2oX ci*2oN
Truy xuaát ñeán caùc thaønh víeân cuûa caáu truùc:
Kva"*a#eL%K#e#$e"L
Ta coù theá gaùn caùc caáu truùc cuøng kíeáu cho nhau.
1.22.1. Yaûng caáu truùc
Caùch thöôøng duøng vôùí caáu truùc ñoù íaø: maûng caáu
truùc. Caùch khaí baùo nhö sau:
st"uct *a#e st"uct_va"g*hN
Ví duï:
Gh*ông 7. Kie>u Ttructure,@ cnion@ Hnu1erate 3a' c,erA[e;ine 119
st"uct add add"_i*2o"gBUUhN
Maûng caáu truùc gíoáng nhö maûng thoâng thöôøng. Töùc íaø
moãí phaàn töû cuûa maûng íaø moät bíeán caáu truùc. Ta coù theá
truy xuaát ñeán töøng thaønh víeân caáu truùc baèng cuù phaùp
st"uct_va"gi*de7h%K#e#$e"L%
1.22.2. %ôûi caáu truùc +eán /oät ha$/
Ta coù theá gôûí töøng thaønh víeân cuûa caáu truùc ñeán
haøm. Neáu muoán gôûí ñòa chæ cuûa töøng thaønh víeân ñeán
haøm, theâm toaùn töû f.
Ta coù theá gôûí toaøn boä caáu truùc ñeán haøm. Khí ñoù
caùch gôûí tham soá íaø theo tham trò. Moïí thay ñoáí beân trong
caáu truùc seõ khoâng aûnh höôûng ñeán beân ngoaøí haøm.
1.22.3. (on troû caáu truùc
Khaí baùo:
st"uct *a#e ƒva"N
Duøng con troû caáu truùc ñeá gôûí caáu truùc ñeán haøm,
coù theá íöu gíöõ nhöõng thay ñoáí gíaù trò cuûa caáu truùc khí
thoaùt khoûí haøm.
Neáu gôûí caáu truùc ñeán haøm trong tröôøng hôïp ñôn gíaûn
ít thaønh víeân chöông trình seõ gôûí caáu truùc íeân stac5. Neáu
caáu truùc quaù nhíeàu thaønh víeân hoaëc thaønh víeân coù theá
íaø maûng hoaëc caùc thaønh phaàn ñöôïc caáp phaùt ñoäng, khí
ñoù coù theá gaây traøn stac5. Neá gíaûí quyeát vaán ñeà naøy ta
söû duïng con troû caáu truùc. Khí gôûí con troû ñeán caáu truùc,
chæ coù ñòa chæ cuûa caáu truùc gôûí ñeán stac5, ñíeàu naøy
íaøm cho haøm thöïc thí nhanh hôn. Níeám thuaän íôïí thöù haí khí
haøm caàn thöïc söï tham chíeáu ñeán caáu truùc thaät cuûa bíeán
caáu truùc. Neá íaáy ñòa chæ caáu truùc, ta duøng toaùn f tröôùc
126 ShaQn Z. MgoFn ng*N la"= trLnh G
bíeán.
Neá truy caäp ñeán caùc thaønh víeân trong con troû caáu
truùc ta duøng cuù phaùp: Kva"*a#eL-LK#e#$e"L. Ví duï:
€ƒ Cis0la6 a so2t!a"e ti#e"% ƒ€
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
Jde2i*e CŠLA’ B2RUUU
st"uct #6_ti#e 3
i*t hou"sN
i*t #i*utesN
i*t seco*dsN
4N
void dis0la6?st"uct #6_ti#e ƒt@N
void u0date?st"uct #6_ti#e ƒt@N
void dela6?void@N
void #ai*?void@3
st"uct #6_ti#e s6sti#eN
s6sti#e%hou"s c UN
s6sti#e%#i*utes c UN
s6sti#e%seco*ds c UN
2o"?NN@ 3
u0date?fs6sti#e@N
dis0la6?fs6sti#e@N
4
getch?@N
4
void u0date?st"uct #6_ti#e ƒt@3
t-Lseco*dsN
i2?t-Lseco*dsccWU@ 3
t-Lseco*ds c UN
t-L#i*utesN
4
i2?t-L#i*utesccWU@ 3
t-L#i*utes c UN
t-Lhou"sN
4
i2?t-Lhou"scc2Y@ t-Lhou"s c UN
Gh*ông 7. Kie>u Ttructure,@ cnion@ Hnu1erate 3a' c,erA[e;ine 121
dela6?@N
4
void dis0la6?st"uct #6_ti#e ƒt@3
0"i*t2?teU2ditX t-Lhou"s@N
0"i*t2?teU2ditX t-L#i*utes@N
0"i*t2?teU2dl*tX t-Lseco*ds@N
4
void dela6?void@3
lo*g i*t tN
€ƒ cha*ge this as *eeded ƒ€
2o"?tcBN tKCŠLA’N t@ N
4
1.22.#. Yaûng 1a$ caáu truùc beDn trong caáu truùc
Thaønh víeân cuûa caáu truùc coù theá íaø moät maûng. Ví duï
ta coù caáu truùc sau:
st"uct 7 3
i*t agBUhgBUhN €ƒ BU 7 BU a""a6 o2 i*ts ƒ€
2loat $N
4 6N
Khí ñoù ñeá truy caäp ñeán phaàn töû thöù 2, 3 cuûa thaønh
víeân a ta duøng cuù phaùp:
6%agBhg2h
Thaønh víeân cuûa caáu truùc coù theá íaø moät caáu truùc
khaùc. Xeùt ví duï sau:
st"uct add"3
cha" *a#eg9UhN
cha" st"eetgYUhN
cha" cit6g2UhN
u*sig*ed lo*g i*t 8i0N
4N
st"uct e#0 3
st"uct add" add"essN €ƒ *ested st"uctu"e ƒ€
2loat !ageN
4 !o"5e"N
122 ShaQn Z. MgoFn ng*N la"= trLnh G
Truy xuaát ñeán töøng thaønh víeân cuûa caáu truùc theo thöù
töï töø ngoaøí vaøo trong. C cho pheùp coù 15 möùc caáu truùc
íoàng nhau.
1.22.2. &r'ô$ng bit
Tröôøng bit cho pheùp ta truy xuaát ñeán töøng phaàn töû
theo bit, moät vaøí íyù do ñeá söû duïng tröôøng bit íaø:
Neáu boä nhôù bò gíôùí haïn, ta coù theá íöu tröõ moät vaøí
bíeán logic trong moät b?te.
Thoâng tín traïng thaùí cuûa moät thíeát bò truyeàn coù theá
maõ hoùa thaønh moät hoaëc nhíeàu bit trong moät b?te.
Maëc daàu caùc taùc vuï naøy coù theá thöïc híeän ñöôïc nhôø
vaøo toaùn töû bit, tuy nhíeân söû duïng tröôøng bit seõ thuaän
tíeän hôn. Khaí baùo nhö sau:
st"uct st"uct-t60e-*a#e {
t60e *a#eB : le*gthB;
t60e *a#e2 : le*gth2;
%%%
%%%
t60e *a#eN : le*gthN;
} va"ia$le_list;
t60e íaø kíeáu cuûa tröôøng bit, le*gth íaø ñoä daøí tính theo
bit cuûa tröôøng. Tröôøng bit coù ñoä daøí baèng 1 phaûí khaí baùo
íaø u*sig*ed. Tröôøng bit thöôøng söû duïng khí phaân tích ñaàu
vaøo cuûa moät thíeát bò phaàn cöùng.
1.,3. 0ZQMO O@ZB@\
u*io*s íaø moät vò trí trong boä nhôù ñöôïc chía seõ cho haí
hay nhíeàu bíeán vôùí nhíeàu kíeáu döõ ííeäu khaùc nhau taïí nhíeàu
thôøí ñíeám khaùc nhau. Khaí baùo kíeáu u*io*s gíoáng nhö khaí
baùo kíeáu caáu truùc. Daïng toáng quaùt nhö sau:
Gh*ông 7. Kie>u Ttructure,@ cnion@ Hnu1erate 3a' c,erA[e;ine 12
u*io* u*io*-t60e-*a#e {
t60e #e#$e"-*a#eN
t60e #e#$e"-*a#e;
t60e #e#$e"-*a#eN
%
%%
} u*io*-va"ia$lesN
Ví duï:
u*io* u_t60e 3
i*t iN
cha" chN
4N
Khaí baùo naøy khoâng taïo boä nhôù cho caùc bíeán. Ta coù
theá khaí baùo bíeán hoaëc baèng caùch ñaët teân cuûa noù ôû
cuoáí khaí baùo hoaëc söû duïng khaí baùo phaân bíeät. Neá khaí
baùo bíeán kíeáu u*io*s ta duøng cuù phaùp nhö sau:
u*io*s u*i_t60e u*i_va"N
Ví duï:
u*io*s u_t60e c*vtN
Trong bíeán c*vt caû bíeán nguyeân i vaø bíeán kí töï ch
cuøng chía seõ moät vuøng nhôù, i haí b?te vaø ch moät b?te.
12& ShaQn Z. MgoFn ng*N la"= trLnh G
Khí khaí baùo moät bíeán u*io*s, chöông trình seõ cung caáp
boä nhôù ñuû ñeá íöu tröõ bíeán coù kích thöôùc íôùn nhaát. Neá
truy caäp vaøo thaønh víeân cuûa moät bíeán kíeáu u*io*s ta duøng
toaùn töû chaám ?%@ vaø toaùn töû -L.
Söû duïng kíeáu u*io*s gíuùp sính ra maõ phuï thuoäc vaøo
maùy. Bôûí vì trình bíeân dòch seõ kíeám tra kích thöôùc thaät cuûa
caùc thaønh víeân, do ñoù íaäp trình víeân khoâng phaûí quan taâm
ñeán kích thöôùc cuûa kíeáu i*t, lo*g, v.v.
Thoâng thöôøng kíeáu u*io*s duøng chuyeán ñoáí kíeáu döõ
ííeäu, bôûí vì ta coù theá tham chíeáu ñeán döõ ííeäu beân trong
u*io*s theo nhíeàu caùch khaùc nhau. Ví duï ta coù theá thao taùc
töøng b?te cuûa kíeáu dou$le ñeá thay ñoáí ñoä chính xaùc hoaëc
thöïc híeän thao taùc íaøm troøn.
Neá híeáu roõ vaán chuyeán ñoáí kíeáu ta xeùt ví duï víeát
moät soá nguyeân ngaén íeân ñóa. Thö víeän chuaán khoâng ñònh
nghóa haøm víeát moät soá nguyeân ngaén vaøo ñóa. Ta coù theá
víeát moïí kíeáu döõ ííeäu vaøo ñóa baèng haøm 2!"ite?@. Tuy
nhíeân söû duïng kíeáu u*io*s ta coù theá víeát töøng b?te vaøo
Gh*ông 7. Kie>u Ttructure,@ cnion@ Hnu1erate 3a' c,erA[e;ine 124
ñóa.
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
u*io* 0! 3
sho"t i*t iN
cha" chg2hN
4N
i*t 0ut!?sho"t i*t *u#X FILŠ ƒ20@N
void #ai*?void@3
FILŠ ƒ20N
20 c 2o0e*?ttest%t#0tX t!$t@N
0ut!?BUUUX 20@N €ƒ !"ite the value BUUU as a* i*tege"
ƒ€
2close?20@N
getch?@N
4
i*t 0ut!?sho"t i*t *u#X FILŠ ƒ20@3
u*io* 0! !o"dN
!o"d%i c *u#N
0utc?!o"d%chgUhX 20@N €ƒ !"ite 2i"st hal2 ƒ€
"etu"* 0utc?!o"d%chgBhX 20@N €ƒ !"ite seco*d hal2 ƒ€
4
1.,%. 0ZQMO FZQGI _QC (E@OXQJ>IZB@"
Kíeáu ííeät keâ íaø taäp caùc haèng soá nguyeân ñöôïc ñaët
teân. Kíeáu ííeät keâ thöôøng xuaát híeän trong cuoäc soáng. Ví duï
kíeáu tíeàn teä ôû Myõ : 0e**6, *ic5el, di#e, Aua"te", hal2-
dolla", dolla". Kíeáu ííeät keâ ñöôïc ñònh nghóa gíoáng nhö kíeáu
caáu truùc. Cuù phaùp khaí baùo nhö sau:
e*u# e*u#*a#e 3e*u#list4
Neá khaí baùo bíeán kíeáu e*u#:
e*u# e*u#*a#e e*u#va"N
Ví duï:
12+ ShaQn Z. MgoFn ng*N la"= trLnh G
e*u# coi* 3 0e**6X *ic5elX di#eX Aua"te"X hal2_dolla"X
dolla"4N
e*u# coi* #o*e6N
Sau khí khaí baùo nhö treân, ta coù theá víeát:
#o*e6c*ic5elN i2 ?#o*e6ccdolla"@
Níeám chính cuûa kíeáu ííeät keâ ñoù íaø duøng kí híeäu ñaïí
díeän cho moät soá nguyeân. Moãí kí híeäu seõ cho gíaù trò íôùn hôn
nhöõng kí híeäu ñöùng tröôùc noù. Gíaù trò ñaàu tíeân baét ñaàu
baèng 0. Ví duï: 0"i*t2?Med edMX 0e**6X di#e@ seõ ín ra maøn
hình gíaù trò 0 vaø 2. Ta cuõng coù theá chæ ñònh moät gíaù trò cuï
theá cho moät hoaëc nhíeàu kí híeäu, baèng caùch gaùn moät gíaù
trò nguyeân sau kí híeäu taïí íuùc khaí baùo. Ví duï:
e*u# coi* 30e**6X*ic5elXdi#eX
Aua"te"cBUUXhal2_dolla"Xdolla"4N
Khí ñoù gíaù trò cuûa caùc kí híeäu nhö sau:
Pe**6 U
*ic5el B
di#e 2
Aua"te" BUU
hal2_dolla" BUB
dolla" BU2
Khí söû duïng kíeáu e*u# ta chuù yù moät soá íoãí sau:
#o*e6cdolla"N
0"i*t2?MesMX #o*e6@N
Hoaëc neáu duøng íeänh sau:
st"c06?#o*e6X tdi#et@N
Bôûí vì dolla", #o*e6 chæ íaø nhöõng gíaù trò nguyeân coù
teân, noù khoâng phaûí íaø chuoãí. Neá híeän caùc gíaù trò cuûa
moät kíeáu e*u# ra maøn hình ta chæ coù moät trong haí caùch nhö
sau:
Caùch 1:
Gh*ông 7. Kie>u Ttructure,@ cnion@ Hnu1erate 3a' c,erA[e;ine 127
s!itch?#o*e6@ 3
case 0e**6i
0"i*t2?t0e**6t@N
$"ea5N
case *ic5eli
0"i*t2?t*ic5elt@N
$"ea5N
case di#ei
0"i*t2?tdi#et@N
$"ea5N
case Aua"te"i
0"i*t2?tAua"te"t@N
$"ea5N
case hal2_dolla"i
0"i*t2?thal2_dolla"t@N
$"ea5N
case dolla"i
0"i*t2?tdolla"t@N
4
Caùch 2:
cha" *a#eghgB2hc3
t0e**6tX
t*ic5eltX
tdi#etX
tAua"te"tX
thal2_dolla"tX
tdolla"t4
0"i*t2?MesMX*a#eg#o*e6h@N
1.,,. 3OU@A IB>W@ IDT \ZgQB` YQM Y>TX V>TB Ih@=
_=>T S=O^QM@
Kíeáu caáu truùc vaø kíeáu u*io*s thöôøng taïo ra caùc bíeán
coù kích thöôùc khaùc nhau vaø kích thöôùc thaät cuûa bíeán phuï
thuoäc vaøo maùy. Toaùn töû si8eo2 duøng ñeá tính kích thöôùc
thaät cuûa moät bíeán hoaëc moät kíeáu gíuùp íoaïí tröø maõ
chöông trình phuï thuoäc vaøo maùy. Trong kíeáu caáu truùc, kích
12- ShaQn Z. MgoFn ng*N la"= trLnh G
thöôùc bao gíôø cuõng íôùn hôn hoaëc baèng toáng kích thöôùc
cuûa caùc thaønh víeân. Toaùn töû si8eo2 íaø moät toaùn töû thöïc
híeän taïí thôøí ñíeám thöïc thí chöông trình, taát caû caùc thoâng tín
veà kích thöôùc cuûa moïí bíeán chæ ñöôïc bíeát taïí thôøí ñíeám
bíeân dòch. Níeàu naøy cuõng raát coù yù nghóa ñoáí vôùí kíeáu
u*io*s bôûí vì kích thöôùc cuûa kíeáu u*io*s íuoân baèng hoaëc
íôùn hôn kích thöôùc cuûa thaønh víeân íôùn nhaát.
1.,-. 0ZQMO ]B @ADLUZ ]OU@A Ya@= @A=i>
Ta coù theá ñònh nghóa teân kíeáu döõ ííeäu môùí baèng töø
khoùa t60ede2. Ta khoâng tạo ra moät kíeáu döõ ííeäu thöïc söï maø
chæ taïo ra moät teân môùí cho kíeáu döõ ííeäu ñaõ toàn taïí. Coâng
víeäc naøy gíuùp ta taïo ra moät chöông trình phuï thuoäc vaøo
maùy trôû neân khaû chuyeán (=ortable) hôn vaø chöông trình deã
ñoïc hôn.
t60ede2 t60e *e!*a#eN
t60e íaø kíeáu döõ ííeäu baát kì, *e!*a#e íaø teân môùí cho
kíeáu naøy. Ví duï:
t60ede2 i*t so*gu6e*N
Khí ñoù so*gu6e* íaø teân khaùc cuûa kíeáu i*t, ñeá taïo
moät bíeán kíeáu i*t ta coù theá víeát:
so*gu6e* *N
Luùc naøy kíeáu so*gu6e* coù theá duøng ñeá ñònh nghóa
kíeáu khaùc, ví duï nhö:
t60ede2 so*gu6e* *gu6e*N
1.,+. C>CO =BTZ IJ>cS @A=ZQGX P>U V>UZ I>GH
1.25.1. (aDu hoûi traTc nghieä/
1.25.2. Ba$i taä<
Gh*ông 7. Kie>u Ttructure,@ cnion@ Hnu1erate 3a' c,erA[e;ine 129
C>CO 1. Neá bíeát moät thí sính ñaäu hay rôùt trong kyø thí tuyeán
sính, caàn bíeát caùc thoâng tín sau:
Hoï teân : hoï vaø teân cuûa thí sính
KV : thí sính thuoäc khu vöïc naøo? ( 1, 2 hay 3 ).
NH : thí sính thuoäc nhoùm naøo ? ( 1, 2, hay 3).
TD : toáng díeám ba moân thí .
a) Haõy nhaäp vaøo moät danh saùch 100 thí sính goàm Hoï
teân, KV, NH, TN. Xeùt xem Keát quaû thí sính naøy ñaäu hay rôùt
döïa vaøo baûng ñíeám chuaán sau :
Ví duï : Thí sính ôû Khu vöïc 1 , Nhoùm 2, coù Toáng ñíeám ?
17.5 thì ñaäu, ngöôïc íaïí thì rôùt.
b) In danh saùch ñaõ saép xeáp theo traät töï gíaûm cuûa TN
íeân maøn hình, goàm caùc muïc Hoï teân, KV, NH, TN vaø Keát quûa
ñaäu, rôùt.
c) Chæ ín danh saùch nhöõng ngöôøí ñaäu íeân maøn hình
theo maãu:
C>CO 2. Moãí ñíeám M(x,y) trong maët phaúng toaï ñoä Oxy ñöôïc
moâ taû nhö sau :
St"uct Cie#3
Float 7X 6N
16 ShaQn Z. MgoFn ng*N la"= trLnh G
4
Víeát chöông trình vôùí caùc yeâu caàu sau :
Taïo moät haøm nhaäp vaøo toïa ñoä cuûa ba ñíeám A, B, C.
Taïo moät haøm kíeám tra xem coù moät caëp ñíeám naøo truøng
nhau khoâng ?. Neáu coù thì baét nhaäp íaïí cho ñeán khí ñöôïc ba
ñíeám A, B, C phaân bíeät.
Taïo moät haøm tính ñoä daøí caùc caïnh AB, BC, AC theo
coâng thöùc :
Neáu A(x
a
,y
a
), B(x
b
,y
b
) thì
Taïo moät haøm kíeám tra xem AB, BC, AC coù phaûí íaø ba
caïnh cuûa moät tam gíaùc khoâng? ( Hd : toáng haí caïnh phaûí
íôùn hôn caïnh coøn íaïí ).
Neáu khoâng phaûí thì ín ra chöõ " Khoâng phaûí Tamgíaùc" ,
ngöôïc íaïí thì tính vaø ín díeän tích cuûa tam gíaùc ABC íeân maøn
hình theo coâng thöùc Heâroâng :
,
vôùí P íaø nöûa chu ví tam gíaùc : P = (AB+BC+AC) / 2 .
C>CO 3. Víeát moät chöông trình C ñeá thöïc híeän caùc yeâu caàu
sau :
Nhaäp soá nguyeân N ( 0<N<100) vaø moät danh saùch N hoïc
sính vôùí caùc thoâng tín veà: hoï vaø teân, chuyeân ban (A , B, C)
vaø caùc ñíeám Toaùn, Vaên, Sính kíeáu thöïc.
Vôùí moãí hoïc sính haõy tính ñíeám trung bình nhö sau :
DTB =(2*Toaùn+ Sính+Vaên)/4 neáu em thuoäc chuyeân ban
A
Gh*ông 7. Kie>u Ttructure,@ cnion@ Hnu1erate 3a' c,erA[e;ine 11
=(Toaùn+2*Sính+Vaên)/4 neáu em thuoäc chuyeân ban B
=(Toaùn+Sính+2*Vaên)/4 neáu em thuoäc chuyeân ban C
Chuyeân ban naøo coù nhíeàu em coù ñíeám trung bình ? 5
nhaát ?
C>CO %. Nhaäp soá nguyeân N ( 0<N<50 ) vaø N hoùa ñôn tính
tíeàn ñíeän, moãí hoùa ñôn coù hoï teân chuû hoä, chæ soá ñíeän
keá thaùng tröôùc (Socu), chæ soá ñíeän keá thaùng naøy (Somoí),
vaø ñònh möùc (Dmuc) ñíeän haøng thaùng cuûa hoä.
Haõy tính tíeàn ñíeän cho moãí hoùa ñôn, bíeát raèng:
Moãí kw trong ñònh möùc coù ñôn gía íaø 5ñ,
100 kw ñaàu tíeân treân ñònh möùc coù ñôn gíaù 8ñ,
Töø kw thöù 101 treân ñònh möùc trôû íeân coù ñôn gía 10ñ.
Tính toáng soá tíeàn thu ñöôïc töø taát caû caùc hoùa ñôn.
Tìm trong caùc hoùa ñôn xem coù hoä naøo teân íaø Tuan
khoâng ? Neáu coù thì ín íeân maøn hình caùc hoùa ñôn coù chuû
hoä teân íaø Tuan goàm caùc thoâng tín veà Socu, Somoí, Dmuc vaø
Tíen ñíeän phaûí traû.
C>CO ,. Nhaäp moät danh saùch N ngöôøí goàm Hoï teân, Chöùc vuï
(GD, TP, PP, NV) vaø Möùc íöông thaùng (ML) .
Tính Phuï caáp íöông (PC) cho töøng ngöôøí nhö sau :
PC = 50% Möùc íöông thaùng neáu chöùc vuï íaø GD
= 40% " " " " TP
= 30% " " " " PP
= 20% " " " " NV
Tính Thu nhaäp (TN) trong thaùng cho töøng ngöôøí :
TN = Möùc íöông + PC
12 ShaQn Z. MgoFn ng*N la"= trLnh G
Noáí hoï teân cuûa moïí ngöôøí ra chöõ thöôøng heát, ríeâng
chöõ caùí ñaàu töø thaønh chöõ hoa, chaúng haïn: Nguyen Thí Loan.
Yeâu caàu phaàn naøy víeát thaønh moät thuû tuïc.
In Hoï teân, Chöùc vuï, Möùc íöông, Phuï caáp vaø Thu nhaäp cuûa nhöõng
ngöôøí coù thu nhaäp cao nhaát íeân maøn hình.
C>CO -. Víeát chöông trình toá chöùc íöu tröõ caùc döõ ííeäu ôû
caùc caâu treân (caâu 52 ñeán caâu 56) döôùí daïng moät taäp tín.
Trong ñoù, taïo caùc haøm ñoïc döõ ííeäu töø ;ile, ghí döõ ííeäu vaøo
;ile.
Gh*ông -. Va'o0^a <*N lie"u 1
C=DL@A 4. V>UB5 R> ]DE FZQGO IJQC@
SB@\BFQ
1.,4. 6BdS P>U PZQRI XBGI _h IDd
Moät trong nhöõng haøm vaøo/ra ñôn gíaûn nhaát íaø:
getcha"?@, ñoïc moät kí töï töø baøn phím, vaø haøm
0utcha"?@víeát moät kí töï ra maøn hình. Haøm getcha"?@ ñôïí
ngöôøí duøng goõ vaøo moät phím vaø traû veà gíaù trò cuûa phím
ñoù, phím vöøa nhaán töï ñoäng híeän íeân maøn hình. Haøm
0utcha"?@ víeát moät kí töï íeân maøn hình taïí vò trí con troû. Haí
haøm naøy ñöôïc ñònh nghóa trong thö víeän stdio%h Daïng toáng
quaùt cuûa haí haøm naøy nhö sau:
i*t getcha"?void@
i*t 0utcha"?i*t c@
Haøm getcha"?@ traû veà moät soá nguyeân. Tuy nhíeân ta
cuõng coù theá gaùn cho bíeán kíeáu ch bôûí vì kí töï chöùa trong
b?te thaáp (b?te cao coù gíaù trò baèng 0). Haøm getcha"?@ traû
veà gíaù trò ŠOF neáu xuaát híeän íoãí.
Haøm 0utcha"?@ nhaän tham soá íaø kíeáu nguyeân, tuy
nhíeân ta coù theá truyeàn tham soá íaø kí töï, chæ coù b?te thaáp
môùí chöùa gíaù trò gôûí ñeán maøn hình. Haøm 0utcha"?@ traû veà
kí töï ñöôïc víeát, neáu xuaát híeän íoãí traû veà gíaù trò ŠOF. ŠOF íaø
moät 1acro coù gíaù trò =-B. Ví duï sau ñaây nhaäp vaøo moät kí
töï neáu chöõ thöôøng chuyeán sang hoa, neáu chöõ hoa chuyeán
sang chöõ thöôøng vaø ín ra maøn hình. Chöông trình keát thuùc
neáu nhaäp vaøo daáu chaám (%).
Ji*clude Kstdio%hL
Ji*clude Kct60e%hL
1& ShaQn Z. MgoFn ng*N la"= trLnh G
Ji*clude Kco*io%hL
void #ai*?void@3
cha" chN
0"i*t2?tŠ*te" so#e te7t ?t60e a 0e"iod to Auit@%l*t@N
do 3
ch c getcha"?@N
i2?islo!e"?ch@@ ch c tou00e"?ch@N
else ch c tolo!e"?ch@N
0utcha"?ch@N
4 !hile ?ch ^c w%w@N
getch?@N
4
1.28.1. Yoät 1aán +eN 1ôùi ha$/ getchar
Haøm getcha"?@ ñöôïc caøí ñaët theo caùch maø caùc kí töï
ñöôïc goõ seõ naèm trong vuøng ñeäm cho ñeán khí baám phím
enter. Do ñoù ta phaûí nhaán phím enter tröôùc khí muoán gôûí moïí
thöù ñeán chöông trình. Haøm getcha"?@ cuõng chæ nhaän moät kí
töï taïí thôøí ñíeám noù ñöôïc goïí, trong khí trong vuøng ñeäm coù
theá coù nhíeàu hôn moät kí töï, do ñoù khí söû duïng haøm naøy
seõ gaëp nhöõng íoãí maø ta khoâng bíeát taïí sao.
1.28.2. Bieán the* cuûa ha$/ getchar("
Haí bíeán theá cuûa haøm getcha"?@ ñoù íaø haøm:
i*t getche?@
i*t getch?@
Thoâng thöôøng haí haøm naøy caøí ñaët trong thö víeän
co*io%h. Haøm getch?@ ñôïí ngöôøí duøng nhaán moät phím vaø
traû veà phím ñöôïc nhaán. Phím ñöôïc nhaán khoâng xuaát híeän
treân maøn hình. Haøm getche?@ töông töï nhö haøm getch?@
nhöng phím ñoù xuaát híeän treân maøn hình. Thoâng thöôøng ta
söû duïng haøm getch?@ ñeá nhaän moät phím, coù theá phím ñoù
khoâng xuaát híeän treân maøn hình nhö phím enter, muõí teân, .
Gh*ông -. Va'o0^a <*N lie"u 14
Ví duï sau söû duïng haøm getch?@ nhaäp moät kí töï vaø
híeän ngay íaäp töùc phím ñöôïc goõ baèng chöõ hoa neáu nhaäp
vaøo chöõ thöôøng vaø ngöôïc íaïí. Chöông trình keát thuùc khí
ngöôøí duøng baám enter.
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
void #ai*?void@3
cha" chN
0"i*t2?tNha0 vao 5i tu ?$a# e*te" de thoat@%l*t@N
do 3
ch c getch?@N
i2?islo!e"?ch@@ ch c tou00e"?ch@N
else ch c tolo!e"?ch@N
0utcha"?ch@N
4 !hile ?ch ^c B9@N
getch?@N
4
1.,#. 6BdS P>U PZQRI S=OBfZ
Haøm gets?@ ñoïc moät chuoãí kí töï nhaäp töø baøn phím vaø
ñaët noù vaøo ñòa chæ ñöôïc troû bôûí tham soá. Ta coù theá goõ
caùc kí töï töø baøn phím cho ñeán khí gaëp phím enter. Löu yù
chuoãí vöøa nhaäp khoâng chöùa kí töï xuoáng doøng, taïí cuoáí
chuoãí chöông trình seõ töï ñoäng cheøn kí töï keát thuùc chuoãí.
Daïng toáng quaùt cuûa haøm nhö sau:
cha" ƒgets?cha" ƒst"@
Trong ñoù st" íaø maûng hoaëc con troû ñeán chuoãí kí töï,
haøm naøy traû veà chuoãí kí töï maø noù ñoïc ñöôïc. Ví duï chöông
trình sau ñoïc moät maûng caùc kí töï vaø ín ñoä daøí ra maøn hình.
Ji*clude Kstdio%hL
Ji*clude Kst"i*g%hL
Ji*clude Kco*io%hL
void #ai*?void@3
1+ ShaQn Z. MgoFn ng*N la"= trLnh G
cha" st"gRUhN
gets?st"@N
0"i*t2?tLe*gth is edtX st"le*?st"@@N
getch?@N
4
Caán thaän khí söû duïng haøm gets?@ bôûí vì noù khoâng
kíeám tra bíeân cuûa maûng khí nhaäp döõ ííeäu. Coù theá ngöôøí
duøng nhaäp vaøo chuoãí coù ñoä daøí hôn khaû naêng khí khaí
baùo.
Haøm 0uts?@ víeát moät chuoãí kí töï ra maøn hình, sau khí
víeát chuoãí xong con troû töï ñoäng xuoáng doøng. Cuù phaùp:
i*t 0uts?cha" ƒst"@N
Haøm 0uts?@ cuõng nhaän daïng ñöôïc caùc kí töï ñaëc bíeät
nhö haøm 0"i*t2?@ ví duï nhö dltd. Haøm 0uts?@ chæ híeán thò
chuoãí kí töï, döõ ííeäu daïng khaùc khoâng híeán thò ñöôïc baèng
haøm naøy. Haøm 0uts?@ thöïc thí nhanh hôn haøm 0"i*t2?@.
Haøm traû veà ŠOF neáu gaëp íoãí.
1.-/. H>UX HJZ@I`
i*t 0"i*t2?cha" ƒco*t"ol_st"i*gX `@N
Traû veà soá kí töï ñöôïc víeát vaø traû veà gíaù trò aâm neáu
xuaát híeän íoãí. Chuoãí ñíeàu khíeán bao goàm haí daïng, kíeáu kí
töï seõ ñöôïc ín ra maøn hình vaø kíeáu kí töï ñaëc taû caùch ñònh
daïng söï xuaát híeän cuûa tham soá. Naëc taû khuoân daïng baét
ñaàu baèng daáu e vaø theo sau íaø maõ ñònh daïng. Soá ñònh
daïng baèng soá tham soá xuaát híeän sau. Naëc taû khuoân daïng
vaø tham soá khôùp nhau theo traät töï xuaát híeän.
Code Fo"#at
ei Sig*ed deci#al i*tege"s
ee Scie*ti2ic *otatio* ?lo!e"case e@
Gh*ông -. Va'o0^a <*N lie"u 17
eŠ Scie*ti2ic *otatio* ?u00e"case Š@
e2 Ceci#al 2loati*g 0oi*t
eg ases ee o" e2X !hicheve" is sho"te"
e… ases eŠ o" eFX !hicheve" is sho"te"
eo a*sig*ed octal
es St"i*g o2 cha"acte"s
eu a*sig*ed deci#al i*tege"s
e7 a*sig*ed he7adeci#al ?lo!e"case lette"s@
e‹ a*sig*ed he7adeci#al ?u00e"case lette"s@
e0 Cis0la6s a 0oi*te"
e*
The associated a"gu#e*t #ust $e a 0oi*te" to a*
i*tege"% This s0eci2ie" causes the *u#$e" o2
cha"acte"s !"itte* so 2a" to $e 0ut i*to that
i*tege"%
ee P"i*ts a e sig*
Bảng 8-1. CFc 5( tx <ipu 5hiP* c)a h•# 0"i*t2?@
Boá sung caùc tíeàn toá tröôùc kí híeäu ñaëc taû
-eg*hcode: quy ñònh ñoä roäng cuûa tham soá
- egU*hcode: neáu tham soá chöa ñuû ñoä daøí, theâm soá
khoâng vaøo ñaàu
- eg7%6hcode: quy ñònh ñoä chính xaùc cuûa soá thöïc
- eg-*hcode: canh íeà beân traùí
- Kí híeäu J: tröôùc 7 vaø ‹ ín soá heä 16 theo daïng U7, U‹. J
tröôùc o, ín soá U ñaàu tröôùc soá heä 8.
eglhcode: ín gíaù trò íaø soá nguyeân daøí, code: u, o, 7, i, d
eghhcode: ín gíaù trò soá nguyeân ngaén, code u, o, 7, i, d
egLhcode: ín gíaù trò kíeáu lo*g dou$le, codei 2, e, g
1.-1. H>UX \S>@`
1- ShaQn Z. MgoFn ng*N la"= trLnh G
i*t sca*2?cha" ƒco*t"ol_st"i*gX `@
Traû veà soá gíaù trò ñaõ gaùn thaønh coâng, neáu xuaát
híeän íoãí traû veà gíaù trò ŠOF, chuoãí ñíeàu khíeán cho bíeát coù
bao nhíeâu gíaù trò ñöôïc nhaäp.
Chuoãí ñíeàu khíeán bao goàm ba íoaïí sau:
Naëc taû khuoân daïng
Caùc kí töï troáng
Caùc kí töï khoâng phaûí khoaûng troáng
Chuoãí ñaëc taû bao goàm caùc kí töï trong baûng sau:
Code Mea*i*g
ec Read a si*gle cha"acte"%
ed Read a deci#al i*tege"%
ei
Read a* i*tege" i* eithe" deci#alX octalX
o" he7adeci#al 2o"#at%
ee Read a 2loati*g-0oi*t *u#$e"%
e2 Read a 2loati*g-0oi*t *u#$e"%
eg Read a 2loati*g-0oi*t *u#$e"%
eo Read a* octal *u#$e"%
es Read a st"i*g%
e7 Read a he7adeci#al *u#$e"%
e0 Read a 0oi*te"%
e*
Receives a* i*tege" value eAual to the
*u#$e" o2 cha"acte"s "ead so 2a"%
eu Read a* u*sig*ed deci#al i*tege"%
egh Sca* 2o" a set o2 cha"acte"s%
ee Read a 0e"ce*t sig*%
Bảng 8-2. CFc 5( tx <ipu 5hiP* c)a h•# sca*2?@
- Noïc moät soá: ed, ei, eo, e7: nhaäp soá nguyeân. Haøm
ngöøng ñoïc khí gaëp moät kí töï ñaàu tíeân khoâng phaûí soá.
Gh*ông -. Va'o0^a <*N lie"u 19
- Noïc moät soá nguyeân khoâng daáu: eu
- Noïc töøng kí töï: ec
- Noïc moät chuoãí es: haøm ngöøng ñoïc khí gaëp moät
khoaûng troáng ñaàu tíeân, kí töï xuoáng doøng, enter.
- Scanset: chæ nhaäp nhöõng kí töï ñöôïc ñònh nghóa trong
taäp sca*set, ngöøng ñoïc khí gaëp moät kí töï ñaàu tíeân khoâng
coù trong scanset.
- Moät kí töï khoâng phaûí íaø khoaûng troáng: haøm sca*2?@
seõ ñoïc kí töï ñoù vaø boû qua khoâng gaùn cho bíeán naøo.
- Noïc moät tröôøng nhöng khoâng gaùn cho bíeán naøo: eƒ
- Neá ñoïc moät soá nguyeân daøí theâm l, ñeá ñoïc moät soá
nguyeân ngaén theâm h, vaøo tröôùc. Caùc boá nghóa naøy ñöôïc
söû duïng cho d, i, o, u, 7
- Ngaàm ñònh, 2, e, g seõ ñoïc moät soá thöïc. Neáu theâm l,
haøm sca*2 seõ ñoïc moät soá dou$le, neáu theâm L, haøm
sca*2?@ seõ ñoïc moät soá lo*g dou$le%
Gh*ông 9. Eoïc0(hi <*N lie"u treFn ;ile
1&1
C=DL@A #. 6BdS5A=Z ]DE FZQGO IJQC@ `ZFQ
1.-2. LOB?@A P>U `ZFQ
1.32.1. uoNng (,trea/"
Heä thoáng ;ile trong C ñöôïc thíeát keá ñeá íaøm víeäc vôùí
nhíeàu thíeát bò bao goàm thíeát bò ñaàu cuoáí, oá ñóa, baêng töø.
Moãí chuyeán ñoáí heä thoáng ;ile trong vuøng ñeäm vaøo caùc
thíeát bò íogíc goïí íaø íuoàng. Taát caû caùc íuoàng coù caùch hoaït
ñoäng nhö nhau. Bôûí vì íuoàng ñoäc íaäp vôùí thíeát bò, cuøng
moät haøm ta coù theá víeát tôùí ñóa, cuõng coù theá víeát ñeán
moät thíeát bò khaùc ví duï nhö co*sole. Coù haí kíeáu íuoàng: vaên
baûn vaø nhò phaân.
Luoàng vaên baûn íaø caùc kí töï. C chuaán cho pheùp (nhöng
khoâng yeâu caàu) moät íuoàng vaên baûn thaønh töøng doøng,
moãí doøng keát thuùc baèng kí töï xuoáng doøng.
Luoàng nhò phaân íaø chuoãí caùc b?te, soá kí töï ñöôïc víeát
ñöôïc ñoïc coù cuøng soá b?te vôùí thíeát bò.
1.32.2. Zi!e
Wile íaø moïí thöù coù treân ñóa, ta coù theá keát hôïp íuoàng
vôùí ;ile baèng thao taùc môû. Khí moät ;ile ñöôïc môû, thoâng tín
chuyeán ñoáí qua íaïí gíöõa ;ile vaø chöông trình.
Trong ;ile hoã trôï khaùí níeäm vò trí, khí moät ;ile ñöôïc môû
vò trí con troû ñeán ñaàu ;ile. Moãí kí töï khí ñöôïc víeát/ñoïc treân
;ile íaøm cho con troû ;ile taêng íeân moät vò trí.
Neá ngaét keát hôïp gíöõa moät íuoàng vaø ;ile ta söû duïng
íeänh ñoùng taäp tín. Khí ñoùng moät taäp tín, noäí dung neáu coù
seõ ñöôïc ghí íeân thíeát bò, quaù trình naøy íaøm saïch vuøng ñeäm
1&2 ShaQn Z. MgoFn ng*N la"= trLnh G
vaø noù ñaûm baûo raèng khoâng coù thoâng tín naøo tình côø bò
víeát íeân ñóa. Taát caû caùc ;ile seõ ñöôïc ñoùng töï ñoäng khí
chöông trình keát thuùc bình thöôøng, hoaëc gaëp íeänh traû veà
töø haøm #ai*?@ hoaëc íeänh e7it. Caùc ;ile seõ khoâng ñöôïc
ñoùng khí chöông trình keát thuùc baát thöôøng, hoaëc bò boû dôõ.
Moãí íuoàng keát hôïp vôùí ;ile coù moät caáu truùc ñíeàu
khíeán ñöôïc goïí FILŠ. Khoâng bao gíôø thay ñoáí caáu truùc naøy.
Muïc ñích chính cuûa íuoàng vaø ;ile íaø cung caáp moät gíao
díeän nhaát quaùn. Söû duïng íuoàng ñaït ñöôïc taát caû caùc thao
taùc vaøo ra döõ ííeäu. Heä thoáng seõ töï ñoäng chuyeán ñoáí döõ
ííeäu vaøo ra thaønh íuoàng ñeá deã quaûn íyù.
1.-3. C>WS =>UX SL \LT SOT> =QG I=BR@A `ZFQ
Na#e Fu*ctio*
2o0e*?@ O0e*s a 2ile%
2close?@ Closes a 2ile%
Putc?@ –"ites a cha"acte" to a 2ile%
20utc?@ Sa#e as 0utc?@%
…etc?@ Reads a cha"acte" 2"o# a 2ile%
2getc?@ Sa#e as getc?@%
2gets?@ Reads a st"i*g 2"o# a 2ile%
20uts?@ –"ites a st"i*g to a 2ile%
2see5?@ See5s to a s0eci2ied $6te i* a 2ile%
2tell?@ Retu"*s the cu""e*t 2ile 0ositio*%
20"i*t2?@
Is to a 2ile !hat 0"i*t2?@ is to the
co*sole%
2sca*2?@
Is to a 2ile !hat sca*2?@ is to the
co*sole%
Feo2?@ Retu"*s t"ue i2 e*d-o2-2ile is "eached%
2e""o"?@ Retu"*s t"ue i2 a* e""o" has occu""ed%
"e!i*d?@ Resets the 2ile 0ositio* i*dicato" to the
Gh*ông 9. Eoïc0(hi <*N lie"u treFn ;ile
1&
$egi**i*g o2 the 2ile%
"e#ove?@ Š"ases a 2ile%
22lush?@ Flushes a 2ile%
Bảng 9-1. CFc h•# t"•* 2ile
Taát caû caùc haøm naøy ñöôïc ñònh nghóa trong thö víeän
<stdio%hL. Con troû ;ile íaø moät con troû troû ñeán caáu truùc
cuûa FILŠ, ñoù íaø moät caáu truùc moâ taû thoâng tín veà ;ile, bao
goàm teân, traïng thaùí vaø vò trí híeän taïí cuûa ;ile. Khaí baùo FILŠ
ƒ02N
Môû moät ;ile:
02 c 2o0e*?cha" ƒ2ile*a#X cha" ƒ#ode@N
Môû moät ;ile coù teân íaø 2ile*a#e, vôùí cheá ñoä #ode.
2ile*a#e íaø teân ;ile vaø ñöôøng daãn, #ode íaø ñoïc hoaëc ghí
kíeáu vaên baûn hay íaø nhò phaân. Neáu 2o0e*?@ coù íoãí, traû veà
con troû NaLL
FILŠ ƒ02N
02 c 2o0e*?Mtest%t7tMX M!M@N
Noùng moät ;ile: i*t c 2close?02@N
Neáu ñoùng ;ile thaønh coâng, haøm seõ traû veà moät gíaù
trò 0. ngoaøí ra gíaù trò khaùc 0
Víeát moät kí töï vaøo ;ile: i*t c 0utc?i*t chX FILŠ ƒ02@N
ch ñònh nghóa kíeáu i*t nhöng chæ coù b?te thaáp môùí ñöôïc ghí
vaøo ;ile. Neáu víeát thaønh coâng, haøm traû veà kí töï ñaõ víeát,
neáu khoâng traû veà gíaù trò ŠOF.
Noïc moät kí töï töø ;ile: i*t getc?FILŠ ƒ02@N traû veà moät
gíaù trò kíeáu nguyeân, tuy nhíeân kí töï ñöôïc íöu ôû b?te thaáp.
!?te cao seõ coù gíaù trò = 0. Neáu coù íoãí b?te cao coù gíaù trò
khaùc 0. Khí gaëp cuoáí ;ile, haøm traû veà gíaù trò ŠOF. Tuy nhíeân,
1&& ShaQn Z. MgoFn ng*N la"= trLnh G
haøm gaëp íoãí cuõng traû veà gíaù trò ŠOF.
Ví duï veà haøm 2o0e*?@, 2close?@, 0utc?@, getc?@ víeát 2
chöông trình: taïo moät ;ile töø doøng íeänh DOS (töông töï nhö copy
con). Híeän noäí dung cuûa ;ile (töông töï nhö íeänh type trong DOS),
chöông trình sao cheùp moät ;ile.
Ta coù theá söû duïng haøm 2eo2?@N ñeá kíeám tra vò trí cuoáí
;ile.
Ta coù theá thao taùc ôû ;ile vôùí chuoãí kí töï: i*t c
20uts?cha" ƒsX FILŠ ƒ02@N ghí moät chuoãí kí töï íeânh ;ile, haøm
traû veà gíaù ŠOF neáu gaëp íoãí.
Haøm 2gets?cha" ƒst"X i*t le*gthX FILŠ ƒ02@N ñoïc moät
chuoãí kí töï töø ;ile cho ñeán khí gaëp doøng môùí hoaëc le*gth-B
kí töï ñöôïc ñoïc, chuoãí keát quaû seõ keát thuùc kí töï roãng.
Neá xoùa moät ;ile, "e#ove?cha" ƒ2ile*a#e@N
Haøm 2"e!i*d?FILŠ ƒ02@N ñöa con troû ;ile veà ñaàu ;ile 02.
Haøm 2e""o"?FILŠ ƒ02@N xaùc ñònh coù hay khoâng moät
thao taùc treân ;ile gaëp íoãí.
Haøm 22lush?FILŠ ƒ02@N íaøm saïch íuoàng keát hôïp vôùí
;ile
Mode k *gh=a
" O0e* a te7t 2ile 2o" "eadi*g%
! C"eate a te7t 2ile 2o" !"iti*g%
a A00e*d to a te7t 2ile%
a$ A00e*d to a $i*a"6 2ile%
" O0e* a te7t 2ile 2o" "ead€!"ite%
! C"eate a te7t 2ile 2o" "ead€!"ite%
a A00e*d o" c"eate a te7t 2ile 2o" "ead€!"ite%
Gh*ông 9. Eoïc0(hi <*N lie"u treFn ;ile
1&4
"$ O0e* a $i*a"6 2ile 2o" "ead€!"ite%
!$ C"eate a $i*a"6 2ile 2o" "ead€!"ite%
a$
A00e*d o" c"eate a $i*a"6 2ile 2o"
"ead€!"ite%
Bảng 9-2. The Legal &alues 2o" Mode
1.-%. `JQ>] P>U `jJZIQ
Cho pheùp ñoïc vaø víeát treân nhíeàu kíeáu döõ ííeäu khaùc
nhau vôùí nhíeàu b?te.
2"ead?void ƒ$u22X i*t si8eX i*t cou*tX FILŠ ƒ02@N
2!"ite?void ƒ$u22X i*t si8eX i*t cou*tX FILŠ ƒ02@N
Noïc/ghí döõ ííeäu töø ;ile, cou*t cho bíeát soá íöôïng, 2"ead?@
traû veà soá ñoáí töôïng ñöôïc ñoïc, 2!"ite?@ traû veà soá ñoáí
töôïng ñöôïc ghí.
1.-,. `\QQ_ P>U IJO^ S>GH @A>fO @=ZQC@
i*t 2see5?FILŠ ƒ20X lo*g *u#$6tesX i*t o"igi*@N
Dòch chuyeán con troû ;ile ñeán vò trí *u#$6te tính töø o"igi*
O"igi* Mac"o Na#e
Begi**i*g o2 2ile SŠŠO_SŠT
Cu""e*t 0ositio* SŠŠO_CaR
Š*d o2 2ile SŠŠO_ŠNC
Neá bíeát vò trí híeän taïí cuûa con troû ;ile ta duøng haøm:
lo*g 2tell?FILŠ ƒ20@N
1.--. `HJZ@I`(" P>U `\S>@`("
i*t 20"i*t2?FILŠ ƒ20X co*st cha" ƒco*t"ol_st"i*gX% % %@N
i*t 2sca*2?FILŠ ƒ20X co*st cha" ƒco*t"ol_st"i*gX% % %@N
Noïc/ ghí döõ ííeäu gíoáng nhö caùc haøm sca*2?@ vaø
0"i*t2?@.
1.-+. LOB?@A S=O>M@
1&+ ShaQn Z. MgoFn ng*N la"= trLnh G
Khí moät chöông trình thöïc thí, coù ba íuoàng chuaán töï
ñoäng môû ñoù íaø stdi*, stdout vaø stde"". Bôûí vì caùc íuoàng
chuaán naøy íaø con troû ;ile neân caùc haøm treân ;ile ñeàu coù
theá thöïc híeän treân íuoàng chuaán. Khí söû duïng caùc íuoàng
naøy ta khoâng caàn phaûí duøng caùc thao taùc môû, ñoùng ;ile
thoâng thöôøng.
Gh*ông 16. )ieQn ]*û l?ù 3a' chuù thích
1&7
C=DL@A 1/. TZQ?@ [DT F^W P>U S=OW
I=hS=
1.-4. k]Q`Z@Q
Daãn höôùng Jde2i*e ñònh nghóa moät ñònh danh vaø chuoãí
kí töï, chuoãí kí töï naøy seõ thay theá ñònh danh moãí íaàn xuaát
híeän trong maõ nguoàn. Cuù phaùp khaí baùo cuûa daãn höôùng:
Jde2i*e #ac"o_*a#e cha"_seAue*ce
Chuù yù, ôû ñaây khoâng coù daáu chaám phaáy. Coù theá coù
nhíeàu daáu troáng gíöõa ñònh danh vaø chuoãí kí töï. Ví duï, muoán
söû duïng töø LŠFT thay cho gíaù trò B, vaø RI…HT thay cho gíaù trò
U, ta coù theá khaí baùo haí daãn höôùng Jde2i*e nhö sau:
Jde2i*e LŠFT B
Jde2i*e RI…HT U
Khí ñoù caâu íeänh sau seõ ín gíaù trò U B 2 íeân maøn hình.
0"i*t2?Med ed edMXRI…HTX LŠFTX LŠFT B@N
Moät 1acro ñöôïc ñònh nghóa, noù coù theá ñöôïc söû duïng
íaø moät phaàn cuûa ñònh nghóa 1acro khaùc. Ví duï sau ñònh
nghóa caùc gíaù trò ONŠ, T–O vaø THRŠŠi
Jde2i*e ONŠ B
Jde2i*e ONŠONŠ
Jde2i*e ONŠT–O
Söï thay theá 1acro ñôn gíaûn íaø thay theá ñònh danh baèng
moät chuoãí kí töï keát hôïp vôùí noù, vì vaäy neáu muoán ñònh
nghóa moät íoãí chuaán ta coù theá ñònh nghóa nhö sau:
Jde2i*e Š_MS Msta*da"d e""o" o* i*0utl*M
€ƒ`ƒ€
0"i*t2?Š_MS@N
1&- ShaQn Z. MgoFn ng*N la"= trLnh G
Trình bíeân dòch seõ thöïc söï thay theá chuoãí Msta*da"d
e""o" o* i*0utl*M khí xuaát híeän ñònh danh Š_MS% Khí bíeân
dòch, haøm 0"i*t2?Š_MS@ thöïc söï xuaát híeän íaø
0"i*t2?Msta*da"d e""o" o* i*0utl*M@N
Chuoãí vaên baûn khoâng ñöôïc thay theá neáu ñònh danh
ñaët trong daáu nhaùy keùp. Ví duï:
Jde2i*e ‹’“ this is a test
%%%
0"i*t2?M‹’“M@N
Khoâng ín Mthis is a testM vaø ín ra ‹’“%
Neáu chuoãí thay theá nhíeàu hôn moät doøng, ta coù theá
víeát tíeáp treân doøng khaùc baèng caùch theâm daáu \
($ac5slash) vaøo cuoáí doøng.
Jde2i*e LON…_STRIN… Mthis is a ve"6 lo*g l
st"i*g that is used as a* e7a#0leM
Caùc íaäp trình víeân thöôøng söû duïng chöõ hoa ñeá ñònh
nghóa ñònh danh, tröôøng hôïp naøy seõ gíuùp cho ngöôøí duøng
ñoïc chöông trình bíeát ñöôïc raèng ñoù íaø moät 1acro ñöôïc thay
theá.
Thoâng thöôøng caùc 1acro ñöôïc ñònh nghóa ñaàu chöông
trình, hoaëc trong moät ;ile ríeâng bíeät (ví duï ;ile ƒ%h).
Macro thöôøng ñöôïc söû duïng ñeá ñònh nghóa d,oá 1a
thua"te (1agic nu1ber) xuaát híeän trong moät chöông trình. Ví duï
ta coù moät chöông trình ñònh nghóa moät maûng vaø coù moät
vaøí ñoaïn chöông trình truy caäp ñeán maûng naøy. Thay vì ta víeát
chính xaùc kích thöôùc cuûa maûng bôûí moät haèng, ta coù theá
ñònh nghóa kích thöôùc bôûí moät daãn höôùng Jde2i*e vaø söû
duïng 1acro naøy baát kì khí naøo caàn söû duïng kích thöôùc cuûa
maûng. Theo caùch naøy, neáu muoán thay ñoáí kích thöôùc cuûa
Gh*ông 16. )ieQn ]*û l?ù 3a' chuù thích
1&9
maûng, ta chæ caàn thay ñoáí caâu íeänh Jde2i*e vaø bíeân dòch
íaïí chöông trình. Ví duï:
Jde2i*e MA‹_SI“Š BUU
€ƒ %%% ƒ€
2loat $ala*cegMA‹_SI“ŠhN
€ƒ %%% ƒ€
2o"?icUN iKMA‹_SI“ŠN i@ 0"i*t2?te2tX $ala*cegih@N
€ƒ %%% ƒ€
2o"?icUN iKMA‹_SI“ŠN i@ 7 c $ala*cegihN
MA‹_SI“Š ñònh nghóa kích thöôùc maûng $ala*ce, neáu kích
thöôùc cuûa maûng $ala*ce caàn thay ñoáí, ta chæ caàn thay ñoáí
ñònh nghóa cuûa MA‹_SI“Š, taát caû caùc tham chíeáu ñeán kích
thöôùc cuûa $ala*ce seõ töï ñoäng caäp nhaät.
1.38.1. Cònh nghKa Yacro gioáng ha$/
Daãn höôùng Jde2i*e coøn coù moät öùng duïng quan troïng
khaùc ñoù íaø teân 1acro coù theá coù tham soá. Moãí íaàn teân
1acro xuaát híeän, tham soá ñaõ söû duïng trong ñònh nghóa seõ
ñöôïc thay theá bôûí tham soá thöïc söï tìm thaáy trong chöông
trình. Daïng naøy ta coøn goïí íaø 1acro töông töï nhö haøm. Ví duï:
Ji*clude Kstdio%hL
Ji*clude Kco*io%hL
Jde2i*e ABS?a@ ?a@KU | -?a@ i ?a@
void #ai*?void@
3
0"i*t2?ta$s o2 -B a*d Bi ed edtX ABS?-B@X ABS?B@@N
getch?@N
4
Khí chöông trình naøy ñöôïc bíeân dòch, a trong ñònh nghóa
1acro seõ ñöôïc thay theá vôùí gíaù trò íaø -B vaø B. Daáu ngoaëc
ñôn bao quanh a ñeá chaéc raèng chöông trình íaøm víeäc trong
moïí tröôøng hôïp. Ví duï neáu xoùa daáu ngoaëc ñôn bao quanh a,
146 ShaQn Z. MgoFn ng*N la"= trLnh G
bíeáu thöùc ABS?BU-2U@ seõ ñöôïc chuyeán ñoáí thaønh -BU-2UKU |
-BU-2U i BU-2U. Trong tröôøng hôïp naøy seõ cho keát quaû saí
yeâu caàu.
Söû duïng 1acro gíoáng haøm thay theá haøm thöïc coù moät
ñíeám thuaän íôïí chính íaø íaøm taêng toác ñoä thöïc thí cuûa
chöông trình bôûí vì khoâng coù íôøí goïí haøm. Tuy nhíeân, neáu
kích thöôùc cuûa 1acro íôùn, noù seõ taêng kích thöôùc cuûa
chöông trình íeân raát nhíeàu bôûí vì coù quaù nhíeàu maõ truøng
nhau.
1.-#. kQJJBJ
Daãn höôùng Je""o" baét buoäc chöông ngöøng bíeân dòch.
Muïc ñích chính íaø duøng cho gôõ roáí. Daïng toáng quaùt cuûa
moät daãn höôùng Je""o" íaø:
Je""o" e""o"_#essage
e""o"_#essage khoâng ñöôïc ñaët gíöõa caëp daáu nhaùy
keùp. Khí daãn höôùng Je""o" xuaát híeän, thoâng ñíeäp íoãí seõ
híeán thò cuøng vôùí nhöõng thoâng tín khaùc coù theá ñöôïc ñònh
nghóa bôûí trình bíeân dòch. Thoâng thöôøng daãn höôùng naøy ñí
theo vôùí caùc daãn höôùng bíeân dòch coù ñíeàu kíeän.
1.+/. kZ@SFO]Q
Daãn höôùng Ji*clude chæ daãn cho trình bíeân dòch ñoïc ;ile
nguoàn khaùc vôùí teân chöùa trong daãn höôùng Ji*clude. Teân
cuûa ;ile nguoàn coù theá ñaët trong daáu nhaùy keùp (MM) hoaëc
daáu oâm (KL). Ví duï:
Ji*clude Mstdio%hM
Ji*clude Kstdio%hL
Caû haí ñeàu chæ daãn trình bíeân dòch ñoïc vaø bíeân dòch
;ile tíeâu ñeà vôùí caùc haøm thö víeän vaøo ra heä thoáng.
Gh*ông 16. )ieQn ]*û l?ù 3a' chuù thích
141
Caùc ;ile ñöôïc cheøn coù theá coù daãn höôùng Ji*clude
beân trong, khí ta goïí íaø cheøn íoàng nhau. Soá caùc möùc íoàng
nhau bíeán ñoáí tuøy theo trình bíeân dòch. Tuy nhíeân trong C
chuaán quy ñònh coù theá coù toáí ña íaø 8 möùc.
Teân ;ile coù theá ñaët trong daáu nhaùy keùp hoaëc trong
caëp daáu oâm ñeá xaùc ñònh caùch thöùc tìm kíeám. Neáu ñaët
trong caëp daáu oâm, chöông trình tìm kíeám trong thö muïc ñöôïc
ñònh nghóa bôûí trình bíeân dòch. Neáu ñaët trong daáu nhaùy
keùp, chöông trình tìm kíeám trong thö muïc ñöôïc chæ ra taïí íuùc
khaí baùo hoaëc trong thö muïc híeän haønh.
Thoâng thöôøng, ta söû duïng daáu oâm ñeá cheøn caùc thö
víeän chuaán vaø daáu nhaùy keùp ñeá cheøn caùc ;ile tíeâu ñeà do
ta víeát ra.
1.+1. C=l I=a VZQC@ ]aS= SBW YZQ?O _ZQG@
Coù moät vaøí daãn höôùng cho pheùp ta choïn vò trí bíeân
dòch trong ;ile maõ nguoàn. Xöû íyù naøy goïí íaø bíeân dòch coù
ñíeàu kíeän vaø ñöôïc söû duïng roäng raõí trong caùc phaàn meàm
thöông maïí.
1.51.1. [i:= [e!,e= [e!i:= [en;i:
Daãn höôùng naøy cho pheùp ta dòch ñíeàu kíeän moät ñoaïn
maõ döïa vaøo keát quaû cuûa bíeáu thöùc haèng. Cuù phaùp:
Ji2 co*sta*t-e70"essio*
state#e*t
Je*di2
Neáu haèng theo sau Ji2 coù gíaù trò ñuùng thì ñoaïn maõ sau
ñoù seõ ñöôïc bíeân dòch, ngoaøí ra boû qua ñoaïn maõ ñoù. Daãn
höôùng Je*di2 ñaùnh daáu keát thuùc cuûa Ji2. Ví duï:
€ƒ Si#0le Ji2 e7a#0le% ƒ€
142 ShaQn Z. MgoFn ng*N la"= trLnh G
Ji*clude Kstdio%hL
Jde2i*e MA‹ BUU
i*t #ai*?void@
3
Ji2 MA‹LZZ
0"i*t2?tCo#0iled 2o" a""a6 g"eate" tha* ZZ%l*t@N
Je*di2
"etu"* UN
4
Chöông trình naøy seõ híeán thò thoâng ñíeäp íeân maøn hình
bôûí vì MA‹ L ZZ. Bíeáu thöùc sau Ji2 phaûí ñöôïc tính toaùn taïí
thôøí ñíeám bíeân dòch, do ñoù noù chæ chöùa nhöõng ñònh danh
vaø haèng ñaõ ñöôïc ñònh nghóa tröôùc, khoâng ñöôïc söû duïng
bíeán trong tröôøng hôïp naøy.
Daãn höôùng Jelse gíoáng nhö meänh ñeà else trong C. Ví
duï:
€ƒ Si#0le Ji2€Jelse e7a#0le% ƒ€
Ji*clude Kstdio%hL
Jde2i*e MA‹ BU
i*t #ai*?void@
3
Ji2 MA‹LZZ
0"i*t2?tCo#0iled 2o" a""a6 g"eate" tha* ZZ%l*t@N
Jelse
0"i*t2?tCo#0iled 2o" s#all a""a6%l*t@N
Je*di2
"etu"* UN
4
Trong tröôøng hôïp naøy MA‹ ñònh nghóa KZZ, khí ñoù maõ sau
Ji2 khoâng thöïc híeän vaø maõ sau Jelse seõ ñöôïc thöïc híeän.
Daãn höôùng Jeli2 gíoáng nhö Melse i2M töùc íaø caùc íeänh
i2 else ííeân tuïc nhau. Daïng toáng quaùt nhö sau:
Ji2 e70"essio*
Gh*ông 16. )ieQn ]*û l?ù 3a' chuù thích
14
state#e*t seAue*ce
Jeli2 e70"essio* B
state#e*t seAue*ce
Jeli2 e70"essio* 2
state#e*t seAue*ce
Jeli2 e70"essio* 9
state#e*t seAue*ce
Jeli2 e70"essio* Y
%
%
%
Jeli2 e70"essio* N
state#e*t seAue*ce
Je*di2
Ví duï sau duøng ACTI&Š_COaNTR’ ñeá ñònh nghóa kí híeäu
tíeàn teä:
Jde2i*e aS U
Jde2i*e ŠN…LANC B
Jde2i*e FRANCŠ 2
Jde2i*e ACTI&Š_COaNTR’ aS
Ji2 ACTI&Š_COaNTR’ cc aS
cha" cu""e*c6gh c tdolla"tN
Jeli2 ACTI&Š_COaNTR’ cc ŠN…LANC
cha" cu""e*c6gh c t0ou*dtN
Jelse
cha" cu""e*c6gh c t2"a*ctN
Je*di2
Trong C chuaán cho pheùp coù 8 möùc íoàng nhau, khí íoàng
nhau moãí Je*di2, Jeli2, Jelse seõ keát hôïp vôùí Ji2, Jeli2 gaàn
nhaát. Ví duï sau hoaøn toaøn hôïp íeä:
Ji2 MA‹LBUU
Ji2 SŠRIAL_&ŠRSION
i*t 0o"tcBZRN
Jeli2
i*t 0o"tc2UUN
Je*di2
14& ShaQn Z. MgoFn ng*N la"= trLnh G
Jelse
cha" out_$u22e"gBUUhN
Je*di2
1.51.2. [i:;e: 1a$ [i:n;e:
Moät caùch khaùc ñeá bíeân dòch coù ñíeàu kíeän ñoù íaø
daãn höôùng Ji2de2 vaø Ji2*de2 coù nghóa íaø di; <e;ine<e vaø di;
not <e;ine<e töông öùng. Daïng toáng quaùt:
Ji2de2 #ac"o-*a#e
state#e*t seAue*ce
Je*di2
Neáu #ac"o-*a#e ñaõ ñöôïc ñònh nghóa tröôùc ñoù baèng
caâu íeänh Jde2i*e, khoáí íeänh seõ ñöôïc bíeân dòch. Caû Ji2de2
vaø Ji2*de2 ñeàu coù theá söû duïng Jelse vaø Jeli2. Ví duï:
Ji*clude Kstdio%hL
Jde2i*e TŠC BU
i*t #ai*?void@
3
Ji2de2 TŠC
0"i*t2?tHi Tedl*t@N
Jelse
0"i*t2?tHi a*6o*el*t@N
Je*di2
Ji2*de2 RALPH
0"i*t2?tRALPH *ot de2i*edl*t@N
Je*di2
"etu"* UN
4
Chöông trình treân seõ ín ra Hi Ted vaø RALPH *ot de2i*ed.
Ta coù theá íoàng caùc daãn höôùng Ji2de2 vaø Ji2*de2 8 möùc
trong C chuaán.
1.+2. kO@]Q`
Daãn höôùng Ju*de2 nghóa íaø dun<e;ineeseõ xoùa ñònh
Gh*ông 16. )ieQn ]*û l?ù 3a' chuù thích
144
nghóa 1acro tröôùc ñoù, daïng toáng quaùt cuûa Ju*de2 nhö sau:
Ju*de2 #ac"o-*a#e
Ví duï:
Jde2i*e LŠN BUU
Jde2i*e –ICTH BUU
cha" a""a6gLŠNhg–ICTHhN
Ju*de2 LŠN
Ju*de2 –ICTH
€ƒ at this 0oi*t $oth LŠN a*d –ICTH a"e u*de2i*ed ƒ€
Caû LŠN vaø –ICTH ñöôïc ñònh nghóa cho ñeán khí xuaát híeän
caâu íeänh Ju*de2.
1.+3. ]Q`Z@Q]
Ta coù theá duøng de2i*ed keát hôïp vôùí Ji2 ñeá xaùc ñònh
moät 1acro ñaõ ñöôïc ñònh nghóa hay chöa. Daïng toáng quaùt
cuûa de2i*ed nhö sau:
de2i*ed #ac"o-*a#e
Neáu 1acro ñaõ ñöôïc ñònh nghóa, bíeáu thöùc cho gíaù trò
ñuùng, ngoaøí ra cho gíaù trò saí. Ví duï ñeá xaùc ñònh 1acro
M’FILŠ ñöôïc ñònh nghóa hay chöa ta coù theá duøng moät trong
haí caùch sau:
Ji2de2 M’FILŠ
hoaëc:
Ji2 de2i*ed M’FILŠ
Ta coù theá theâm daáu ^ ñeá phuû ñònh meänh ñeà de2i*ed.
Ví duï caâu íeänh sau seõ ñöôïc bíeân dòch neáu CŠBa… chöa ñöôïc
ñònh nghóa:
Ji2 ^de2i*ed CŠBa…
0"i*t2?tFi*al ve"sio*^l*t@N
Je*di2
14+ ShaQn Z. MgoFn ng*N la"= trLnh G
1.+%. kFZ@Q
Daãn höôùng Jli*e thay ñoáí noäí dung cuûa __LINŠ__ vaø
__FILŠ__, ñoù íaø haí ñònh danh ñöôïc ñònh nghóa tröôùc trong
trình bíeân dòch. Nònh danh __LINŠ__ chöùa soá doøng híeän thôøí
ñaõ bíeân dòch. Nònh danh __FILŠ__ íaø chuoãí chöùa teân ;ile
nguoàn ñaõ vaø ñang bíeân dòch. Daïng toáng quaùt cuûa Jli*e:
Jli*e *u#$e" M2ile*a#eM
Vôùí *u#$e" íaø moät soá nguyeân döông baát kyø vaø noù íaø
gíaù trò môùí cuûa __LINŠ__, tuøy choïn 2ile*a#e íaø moät teân ;ile
hôïp íeä baát kyø vaø noù trôû thaønh teân môùí cuûa __FILŠ__.
Jli*e söû duïng trong caùc tình huoáng gôõ roáí chöông trình.
Ví duï sau chæ ra raèng ñeám doøng seõ baét ñaàu baèng BUU.
Caâu íeänh 0"i*t2 seõ ín ra gíaù trò BU2 bôûí vì noù íaø doøng thöù
3 cuûa chöông trình sau caâu íeänh Jli*e BUU.
Ji*clude Kstdio%hL
Jli*e BUU €ƒ "eset the li*e cou*te" ƒ€
i*t #ai*?void@ €ƒ li*e BUU ƒ€
3 €ƒ li*e BUB ƒ€
0"i*t2?tedl*tX__LINŠ__@N €ƒ li*e BU2 ƒ€
"etu"* UN
4
1.+,. TB>W@ IDT IZQ?@ [DT F^W k P>U kk
Haí toaùn töû naøy söû duïng vôùí Jde2i*e. Toaùn töû J (coøn
goïí íaø chuoãí hoùa), ñöa tham soá vaøo daáu nhaùy keùp. Xeùt ví
duï sau:
Ji*clude Kstdio%hL
Jde2i*e #5st"?s@ J s
i*t #ai*?void@
3
0"i*t2?#5st"?I li5e C@@N
Gh*ông 16. )ieQn ]*û l?ù 3a' chuù thích
147
"etu"* UN
4
Toaùn töû naøy seõ bíeán doøng:
0"i*t2?#5st"?I li5e C@@N
thaønh doøng:
0"i*t2?tI li5e Ct@N
Toaùn töû JJ (coøn goïí íaø toaùn töû gheùp) gheùp haí theû
vôùí nhau. Ví duï:
Ji*clude Kstdio%hL
Jde2i*e co*cat?aX $@ a JJ $
i*t #ai*?void@
3
i*t 76 c BUN
0"i*t2?tedtX co*cat?7X 6@@N
"etu"* UN
4
Toaùn töû naøy seõ bíeán ñoáí:
0"i*t2?tedtX co*cat?7X 6@@N
thaønh:
0"i*t2?tedtX 76@N
1.+-. C>WS X>SJB Ya@= @A=i> IJDLWS
C chuaán ñònh nghóa 5 1acro nhö sau:
__LINŠ__
__FILŠ__
__CATŠ__
__TIMŠ__
__STCC__
Macro __LINŠ__ vaø __FILŠ__ ñaõ ñöôïc gíôùí thíeäu trong
phaàn treân. Macro __CATŠ__ chöùa moät chuoãí coù daïng
1onth0<a?0?ear ñoù íaø ngaøy chuyeán ñoáí ;ile nguoàn thaønh
maõ.
14- ShaQn Z. MgoFn ng*N la"= trLnh G
Macro __TIMŠ__ chöùa thôøí gían maø chöông trình ñaõ ñöôïc
bíeân dòch. Thôøí gían ñöôïc bíeáu díeãn trong chuoãí
hour`1inute`,econ<.
Neáu __STCC__ ñöôïc ñònh nghóa, trình bíeân dòch chæ chaáp
nhaän nhöõng maõ C chuaán maø khoâng chöùa baát kyø moät môû
roäng khoâng chuaán naøo.
1.++. C=OW I=hS= IJB@A C S=O>M@
Chuù thích baét ñaàu bôûí caëp daáu €ƒ vaø keát thuùc bôûí
caëp daáu ƒ€. Khoâng coù khoaûng troáng gíöõa haí daáu ƒ vaø
daáu €. Trình bíeân dòch seõ boû qua taát caû caùc vaên baûn naèm
trong kí híeäu baét ñaàu vaø keát thuùc chuù thích. Ví duï chöông
trình naøy chæ ín ra doøng chöõ hello treân maøn hình:
Ji*clude Kstdio%hL
i*t #ai*?void@
3
0"i*t2?thellot@N
€ƒ 0"i*t2?tthe"et@N ƒ€
"etu"* UN
4
Chuù thích coù theá xuaát híeän treân nhíeàu doøng. Ví duï:
€ƒ this is a
#ulti-li*e
co##e*t ƒ€
Chuù thích coù theá xuaát híeän moïí nôí trong chöông trình,
tuy nhíeân khoâng ñaët chuù thích vaøo gíöõa ñònh danh vaø töø
khoùa. Ví duï chuù thích sau íaø hôïp íeä:
7 c BU €ƒ add the *u#$e"s ƒ€VN
Chuù thích sau khoâng hôïp íeä bôûí vì noù ñaët vaøo gíöõa töø
khoùa:
s!i€ƒthis !ill *ot !o"5ƒ€tch?c@ 3 %%%
Gh*ông 16. )ieQn ]*û l?ù 3a' chuù thích
149
Chuù thích trong C chuaán khoâng íoàng nhau, nghóa íaø chuù
thích khoâng chöùa chuù thích khaùc.
€ƒ this is a* oute" co##e*t
7 c 6€aN
€ƒ this is a* i**e" co##e*t - a*d causes a* e""o" ƒ€
ƒ€
Gh*ông 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 1+1
P=>?@ II. NABC@ @ADE F>GH IJK@= C99
C=DL@A 11. TBM@A NO>@ PQ? @ABC@ @ADE
F>GH IJK@= C99
1.+4. NAOB?@ ABRS SOT> C99
C++ baét ñaàu nhö íaø môû roäng phíeân baûn cuûa C. Môû
roäng cuûa C++ ñöôïc ñeà caäp íaàn ñaàu tíeân bôûí !farne
Ttrou,tru= vaøo naêm 1979 taïí phoøng thí nghíeäm !ell trong
Murra? Kill, MeR ger,e?. Naàu tíeân oâng goïí ngoân ngöõ naøy íaø C
vôùí íôùp #G Rith cla,,%. Neán naêm 1983 ñoáí thaønh teân íaø C++.
Maët daàu C íaø moät trong nhíeàu ngoân ngöõ yeâu thích vaø
söû duïng roäng raõí ñoáí vôùí caùc nhaø íaäp trình chuyeân nghíeäp
treân theá gíôùí, nhöng söï phaùt mính ngoân ngöõ C++ íaø caàn
thíeát bôûí vì moät yeáu toá chính ñoù íaø: ñoä phöùc taïp ngaøy
caøng taêng. Trong nhíeàu naêm, íaäp trình maùy tính ñaõ trôû neân
roäng hôn vaø phöùc taïp hôn. Cho duø ngoân ngöõ C íaø ngoân
ngöõ íaäp trình raát tuyeät vôøí nhöng noù cuõng coù nhöõng haïn
cheá. Trong C, moät chöông trình môû roäng töø 25000 ñeán
100000 doøng maõ noù trôû neân quaù phöùc taïp vì vaäy raát khoù
ñeá híeáu heát chöông trình. Muïc ñích cuûa C++ íaø khaéc phuïc
trôû ngaïí naøy. Baûn chaát cuûa C++ íaø cho pheùp ngöôøí íaäp
trình híeáu roõ vaø quaûn íyù ñöôïc nhöõng chöông trình íôùn vaø
phöùc taïp hôn.
Haàu heát caùc boá sung ñöôïc taïo bôûí Ttrou,tru= ñeá C hoã
trôï íaäp trình höôùng ñoáí töôïng. Ttrou,tru= phaùt bíeáu raèng
moät vaøí ñaët tröng höôùng ñoáí töôïng cuûa C++ ñöôïc íaáy töø
ngoân ngöõ íaäp trình khaùc ñoù íaø ,i1ula+7. Do ñoù C++ coù caû
1+2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
haí phöông phaùp íaäp trình raát höõu ích.
Khí C++ xuaát híeän íaàn ñaàu tíeân, noù ñaõ coù ba íaàn
söûa ñoáí chính. Laàn söûa ñoáí ñaàu tíeân vaøo naêm 1985 vaø
íaàn thöù haí vaøo naêm 1990. Laàn thöù ba xuaát híeän trong suoát
quaù trình chuaán hoùa C++. Baûn phaùt thaûo tíeâu chuaán ñaàu
tíeân ñöôïc taïo vaøo ngaøy 25-01-1994, trong baûn thaûo naøy,
caùc toá chöùc tíeâu chuaán ñaõ gíöõ íaïí nhöõng ñaët tröng ñaàu
tíeân ñöôïc ñònh nghóa bôûí Ttrou,tru= vaø boá sung moät vaøí
ñaëc ñíeám môùí. Ngaøy 14-11-1997 baûn thaûo cuoáí cuøng ñaõ
ñöôïc chaáp nhaän vaø ñoù íaø tíeâu chuaán C++ híeän nay.
1.+#. 0=>WZ @ZQGX F>GH IJK@= =DLW@A YBRZ IDLd@A
Laäp trình höôùng ñoáí töôïng íaø caùch raát höõu ích ñeá
tíeáp caän vôùí coâng víeäc íaäp trình. Phöông phaùp íaäp trình ñaõ
thay ñoáí ñoät ngoät töø khí xuaát híeän maùy tính. Ví duï, khí maùy
tính xuaát híeän íaàn ñaàu tíeân, íaäp trình ñöôïc thöïc híeän baèng
caùch baäc/taét caùc bit nhò phaân. Khí chöông trình íôùn íeân,
xuaát híeän ngoân ngöõ a,,e1bler khí ñoù íaäp trình coù theá gíaûí
quyeát caùc chöông trình íôùn vaø phöùc taïp hôn baèng caùch söû
duïng caùc kí híeäu bíeáu díeãn caùc íeänh cuûa maùy. Khí chöông
trình tíeáp tuïc íôùn hôn nöõa, ngoân ngöõ íaäp trình caáp cao xuaát
híeän cung caáp cho ngöôøí íaäp trình nhíeàu coâng cuï.
Naêm 1960, xuaát híeän ngoân ngöõ íaäp trình coù caáu truùc.
Níeán hình cho íoaïí ngoân ngöõ naøy íaø PASCAL vaø C. Ngoân ngöõ
íaäp trình coù caáu truùc cho pheùp ta íaäp trình deã daøng hôn.
Naëc ñíeám cuûa ngoân ngöõ coù caáu truùc íaø taïo ra caùc chöông
trình con ñoäc íaäp, bíeán cuïc boä vaø nhíeàu caáu truùc ñíeàu
khíeán. Maëc daàu ngoân ngöõ coù caáu truùc íaø coâng cuï íaäp
trình maïnh, tuy nhíeân noù cuõng gaëp nhíeàu haïn cheá khí
chöông trình quaù íôùn.
Gh*ông 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 1+
Laäp trình höôùng ñoáí töôïng gíöõ íaïí nhöõng yù töôûng toát
nhaát cuûa ngoân ngöõ íaäp trình caáu truùc vaø boá sung theâm
nhöõng khaùí níeäm môùí. Moät caùch toáng quaùt, moät chöông
trình ñöôïc toá chöùc theo haí caùch: bao goùí maõ hoaëc bao goùí
döõ ííeäu. Neáu duøng ngoân ngöõ íaäp trình caáu truùc, bao goùí
maõ. Ví duï moät chöông trình ñöôïc víeát bôûí ngoân ngöõ C ñònh
nghóa caùc haøm, caùc haøm naøy hoaït ñoäng treân moïí kíeáu döõ
ííeäu ñaõ söû duïng bôûí chöông trình.
Laäp trình höôùng ñoáí töôïng hoaït ñoäng theo caùch khaùc.
Noù toá chöùc theo caùch bao goùí döõ ííeäu. Trong ngoân ngöõ
höôùng ñoáí töôïng, ta ñònh nghóa döõ ííeäu vaø chöông trình con
taùc ñoäng treân döõ ííeäu ñoù. Neá hoã trôï cho nguyeân íyù
höôùng ñoáí töôïng, taát caû caùc ngoân ngöõ íaäp trình höôùng
ñoáí töôïng ñeàu coù ba ñaëc ñíeám chung: bao goùí
(enca=,ulation), ña hình (=ol?1or=hir1) vaø keá thöøa (inheritance).
1.59.1. Bao goùi (enca<,ua!ation"
Bao goùí íaø moät cô cheá gheùp döõ ííeäu vaø maõ vôùí nhau
muïc ñích íaø gíöõ an toaøn ñoáí vôùí caùc can thíeäp töø beân
ngoaøí. Maõ vaø döõ ííeäu ííeân keát vôùí nhau taïo ra moät ñoáí
töôïng. Beân trong ñoáí töôïng, maõ vaø döõ ííeäu coù theá íaø
=ri3ate hoaëc =ublic. Maõ vaø döõ ííeäu íaø =ri3ate chæ coù theá
truy caäp bôûí moät phaàn khaùc trong ñoáí töôïng. Khí maõ vaø döõ
ííeäu íaø =ublic, nhöõng phaàn khaùc cuûa chöông trình coù theá
truy caäp töø beân ngoaøí ñoáí töôïng. Thoâng thöôøng caùc phaàn
=ublic cuûa moät ñoáí töôïng cung caáp gíao díeän ñíeàu khíeán
caùc thaønh phaàn =ri3ate cuûa ñoáí töôïng.
1.59.2. Ca hInh (<o!)/or<hi,/"
Trong ngoân ngöõ höôùng ñoáí töôïng coù khaùí níeäm ña
hình. YU nghóa cuûa noù theá híeän bôûí moät caâu "moät gíao
1+& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
díeän, nhíeàu phöông thöùc - one inter;ace@ 1ulti=le 1etho<,". Na
hình íaø tính chaát cho pheùp moät gíao díeän ñíeàu khíeán truy
caäp ñeán moät caùc haønh ñoäng chung. Haønh ñoäng ñöôïc xaùc
ñònh bôûí caùc tình huoáng thöïc teá. Ví duï nhö ta coù moät chöông
trình ñònh nghóa ba kíeáu ,tack chöùa ba kíeáu döõ ííeäu soá
nguyeân, kí töï vaø soá thöïc. Döïa vaøo tính chaát ña hình ta coù
theá ñònh nghóa caùc teân 0ush?@, 0o0?@ söû duïng cho caû ba
stac5 treân. Trong chöông trình ta coù theá ñònh nghóa ba phíeân
baûn khaùc nhau öùng vôùí moãí kíeáu nhöng teân coù theá truøng
nhau. Trình bíeân dòch seõ töï ñoäng choïn moät haønh ñoäng
ñuùng döïa vaøo kíeáu döõ ííeäu ñaõ íöu tröõ.
Na hình gíuùp gíaûm tính phöùc taïp baèng caùch cho pheùp
gíao díeän truøng teân ñöôïc söû duïng ñeá truy caäp ñeán íôùp caùc
haønh ñoäng chung.
1.59.3. Keá th'$a (inheritance"
Keá thöøa íaø caùch xöû íyù maø moät ñoáí töôïng coù theá
nhaän nhöõng tính chaát cuûa moät ñoáí töôïng khaùc. Ví duï nhö
taùo taøu íaø moät phaàn cuûa taùo, taùo íaø moät phaàn cuûa traùí
caây, traùí caây íaø moät phaàn cuûa íöông thöïc. Neáu khoâng coù
söï phaân íoaïí thì moãí ñoáí töôïng ñöôïc ñònh nghóa roõ raøng caùc
tính chaát cuûa noù. Tuy nhíeân, thoâng qua caùch phaân íoaïí moãí
ñoáí töôïng chæ caàn ñònh nghóa caùc tính chaát ríeâng cuûa noù.
1.4/. V>UZ P>R@ YQ? SL V>T@ C99
1.8>.1. Yoät 1í ;uï ch'ông trInh (\\
Ta baét ñaàu vôùí moät chöông trình C++ ñôn gíaûn
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
Gh*ông 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 1+4
3
i*t iN
€€this is a si*gle li*e co##e*t
coutKKtThis is out0ut%l*tN
€ƒ 6ou ca* still use C st6le co##e*ts ƒ€
€€ i*0ut a *u#$e" usi*g LL
cout KK tŠ*te" a *u#$e"i tN
ci* LL iN
€€ *o!X out0ut a *u#$e" usi*g KK
cout KK i KK t sAua"ed is t KK iƒi KK tl*tN
"etu"* UN
4
Baét ñaàu chöông trình, ;ile tíeâu ñeà Kiost"ea#L seõ ñöôïc
cheøn vaøo trong chöông trình (Kiost"ea#L gíoáng nhö Kstdio%hL
trong C). Chuù yù khoâng coù phaàn môû roäng %h trong ;ile tíeâu
ñeà Kiost"ea#L. Doøng tíeáp theo chöông trình íaø:
usi*g *a#es0ace stdN
Thoâng baùo cho trình bíeân dòch bíeát íaø söû duïng moät
khoâng gían teân std. Khoâng gían teân íaø moät ñaëc tröng môùí
boá sung vaøo C++. Khoâng gían teân taïo ra moät vuøng khaí baùo
gíuùp ta toá chöùc moät chöông trình íôùn. Söû duïng usi*g thoâng
baùo cho trình bíeân dòch bíeát ta muoán söû duïng moät khoâng
gían teân std, ñaây íaø moät khoâng gían teân maø trong ñoù toaøn
boä caùc thö víeän chuaán cuûa C++ ñöôïc khaí baùo. Khí söû duïng
khoâng gían teân std, ta ñôn gíaûn hoùa víeäc truy caäp caùc thö
víeän chuaán. Doøng tíeáp theo:
i*t #ai*?@
Chuù yù danh saùch tham soá trong #ai*?@ íaø roãng, ñíeàu
naøy cho bíeát #ai*?@ khoâng coù tham soá. Trong C++, moät
haøm khoâng coù tham soá ta ñeá troáng phaàn khaí baùo tham
soá, khoâng caàn phaûí söû duïng void. Doøng tíeáp theo:
1++ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
coutKKtThis is out0ut%l*tN €€this is a si*gle li*e co##e*t
Doøng naøy coù haí ñaëc ñíeám, thöù nhaát híeán thò This is
out0ut. ra maøn hình sau ñoù íaø moät kí töï xuoáng doøng. Trong
C++, KK coù vaí troø môû roäng hôn. Noù vaãn íaø toaùn töû ñaày
bit, nhöng khí söû duïng trong tình huoáng treân noù íaø toaùn töû
out=ut, cout íaø moät ñònh danh coù chöùc naêng ííeân keát vôùí
maøn hình. Ta coù theá söû duïng cout vôùí KK ñeá híeán thò moïí
döõ ííeäu ra mang hình. Chuù yù ta vaãn coù theá söû duïng
0"i*t2?@ ñeá ín döõ ííeäu ra maøn hình. Naëc ñíeám thöù haí íaø
chuù thích. Trong C++ coù haí caùch chuù thích khaùc nhau: chuù
thích treân moät doøng vaø chuù thích caû ñoaïn vaên baûn.
Doøng tíeáp theo nhaéc ngöôøí duøng nhaäp vaøo moät soá,
moät soá nhaäp töø baøn phím ñöôïc theá híeän trong caâu íeänh
ci* LL i% Trong C++, LL vaãn íaø toaùn töû ñaáy bit tuy nhíeân khí
söû duïng trong tình huoáng treân noù íaø toaùn töû in=ut. Nònh
danh ci* thay theá cho thíeát bò vaøo chuaán thoâng thöôøng íaø
baøn phím. Toáng quaùt, ta söû duïng ci*LL ñeá nhaäp vaøo bíeán
moät kíeáu döõ ííeäu cô sôû keá caû chuoãí. Ta coù theá söû duïng
haøm sca*2?@ ñeá nhaäp moät gíaù trò thay theá cho ci*. Doøng
tíeáp theo:
cout KK i KK t sAua"ed is t KK iƒi KK tl*tN
Gíaû söû ta nhaäp i c BU khí ñoù caâu íeänh treân seõ ín ra
maøn hình BU sAua"ed is BUU sau ñoù íaø moät daáu xuoáng
doøng. Doøng naøy mính hoïa cho vaán ñeà íaø ta coù theá keát
hôïp nhíeàu toaùn töû KK treân moät doøng. Doøng cuoáí cuøng:
"etu"* UN
Traû veà gíaù trò 0 taïí thôøí ñíeám goïí chöông trình, trong
tröôøng hôïp naøy íaø heä ñíeàu haønh. Gíaù trò 0 thoâng baùo cho
heä ñíeàu haønh bíeát chöông trình keát thuùc bình thöôøng.
Gh*ông 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 1+7
1.8>.2. Yoät caùc nhIn gaNn guOi hôn 1eN thao taùc
1a$o ra
Nhö ñaõ ñeà caäp tröôùc ñoù, khí söû duïng thao taùc vaøo ra,
toaùn töû KK vaø LL coù khaû naêng quaûn íyù moïí kíeáu döõ ííeäu
xaây döïng beân trong. Ví duï sau nhaäp moät gíaù trò kíeáu 2loat,
dou$le vaø moät chuoãí sau ñoù híeän ra maøn hình.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
2loat 2N
cha" st"gRUhN
dou$le dN
cout KK tŠ*te" t!o 2loati*g 0oi*t *u#$e"si tN
ci* LL 2 LL dN
cout KK tŠ*te" a st"i*gi tN
ci* LL st"N
cout KK 2 KK t t KK d KK t t KK st"N
"etu"* UN
4
Khí thöïc thí chöông trình naøy, gíaû söû ta nhaäp vaøo gíaù trò
chuoãí íaø this is a te7t, khí ñoù chöông trình chæ híeán thò
chuoãí this phaàn coøn íaïí khoâng ñöôïc híeán thò bôûí vì toaùn töû
LL ngöøng ñoïc khí xuaát híeän moät khoaûng troáng.
Toaùn töû vaøo/ra cuõng nhaän daïng toaøn boä caùc kí töï
\maõ ñaõ gíôùí thíeäu trong chöông 2, ví duï ta coù theá víeát:
cout KK tAltBltCtN
1.8>.3. Khai baùo bieán cuïc boä
Trong C++ ta coù theá khaí baùo bíeán cuïc boä ôû baát kì
ñaâu trong khoáí íeänh, khoâng nhaát thíeát phaûí ñaàu chöông
trình gíoáng nhö C. Ví duï:
1+- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
2loat 2N
dou$le dN
cout KK tŠ*te" t!o 2loati*g 0oi*t *u#$e"si tN
ci* LL 2 LL dN
cout KK tŠ*te" a st"i*gi tN
cha" st"gRUhN€€st" decla"ed he"eX bust $e2o"e Bst use
ci* LL st"N
cout KK 2 KK t t KK d KK t t KK st"N
"etu"* UN
4
Ta coù theá khaí baùo bíeán ôû ñaàu chöông trình hoaëc ôû vò
trí tröôùc khí söû duïng. Tuy nhíeân khaí baùo bíeán gaàn vôùí nôí
söû duïng nhaát coù theá deã gôõ roáí, toát nhaát íaø neân khaí
baùo ngay vò trí ñaàu tíeân tröôùc khí söû duïng.
1.8>.#. Kie*u ;'O !ieäu boo!
C++ ñònh nghóa moät kíeáu !oolean coù teân íaø $ool íöu
tröõ haí gíaù trò íaø t"ue vaø 2alse. Tuy nhíeân C++ vaãn gíöõ
quan ñíeám 0 íaø 2alse vaø khaùc 0 íaø t"ue.
1.41. $BC =K@= SOE \B PLWZ XBC =K@= =ZQG@ Y>dZ
Nhö ñaõ ñeà caäp tröôùc ñoù, C++ ñaõ traûí qua moät quaù
trình tíeán tríeán trong suoát quaù trình phaùt tríeán vaø tíeâu
chuaán hoùa. Töø ñoù daãn ñeán söï ra ñôøí haí phíeân baûn cuûa
C++. Phíeân baûn ñaàu tíeân goïí íaø phíeân baûn cuõ döïa vaøo
thíeát keá ban ñaàu cuûa !farne Ttrou,tru=, vaø phíeân baûn thöù
haí íaø C++ chuaán ñöôïc taïo ra bôûí !farne Ttrou,tru= vaø híeäp
hoäí tíeâu chuaán ANSI/ISO. Haí phíeân baûn naøy töông töï nhau,
tuy nhíeân phíeân baûn C++ chuaán chöùa moät vaøí caûí tíeán. Söï
Gh*ông 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 1+9
khaùc nhau chính gíöõa haí phíeân baûn naøy ôû haí ñaëc tröng
khoâng gían teân vaø tíeâu ñeà kíeáu môùí. Xeùt ví duï:
€ƒ
A* old-st6le C 0"og"a#%
ƒ€
Ji*clude Kiost"ea#%hL
i*t #ai*?@
3
"etu"* UN
4
Naây íaø chöông trình víeát theo phíeân baûn cuõ, chuù yù
raèng ;ile tíeâu ñeà coù phaàn môû roäng %h ñoáí vôùí phíeân baûn
môùí ta coù ñoaïn chöông trình sau:
€ƒ
A #ode"*-st6le C 0"og"a# that uses
the *e!-st6le heade"s a*d a *a#es0ace%
ƒ€
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
"etu"* UN
4
Phíeân baûn naøy söû duïng ;ile tíeâu ñeà theo kíeáu môùí vaø
coù chæ ra khoâng gían teân.
1.81.1. &ieDu +eN trong (\\
Nhö ta ñaõ bíeát, khí söû duïng haøm trong thö víeän ta phaûí
khaí baùo ;ile tíeâu ñeà baèng caùch söû duïng Ji*clude. Trong C+
+ chuaán, tíeâu ñeà khoâng chæ ra teân ;ile thay vaøo ñoù noù
duøng ñònh danh chuaán vaø ñònh danh naøy seõ keát noáí vôùí ;ile
tíeâu ñeà, do ñoù tíeâu ñeà trong C++ chuaán khoâng coù phaàn
môû roäng. Bôûí vì C++ ñöôïc môû roäng töø C do ñoù ta coù theá
176 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
cheøn ;ile tíeâu ñeà trong C chuaán ví duï nhö Ji*clude Kco*io%hL.
Tuy nhíeân, C++ chuaán cuõng ñònh nghóa nhöõng ;ile tíeâu ñeà
môùí thay theá nhöõng ;ile tíeâu ñeà naøy. Caùc ;ile naøy coù theâm
tíeàn toá McM tröôùc moãí tíeâu ñeà vaø boû phaàn %h, ví duï
K#ath%hL thay theá baèng Kc#athL. Tuy nhíeân ;ile tíeâu ñeà theo
caùch cuõ ñöôïc khuyeán caùo khoâng neân söû duïng.
1.81.2. KhoDng gian teDn
Khí ta cheøn moät ;ile tíeâu ñeà kíeáu môùí vaøo chöông trình,
noäí dung ;ile ñoù ñöôïc chöùa trong khoâng gían teân std. Moät
khoâng gían teân ñôn gíaûn íaø moät vuøng khaí baùo. Muïc ñích
cuûa khoâng gían teân íaø ñònh vò teân ñònh danh ñeá traùnh bò
xung ñoät. Caùc phaàn töû khaí baùo trong khoâng gían teân naøy
ñöôïc phaân bíeät khí khaí baùo trong khoâng gían khaùc. Naàu
tíeân, teân cuûa caùc haøm thö víeän chuaán ñöôïc ñaët vaøo
khoâng gían teân toaøn cuïc.
1.81.3. a$/ 1ieäc 1ôùi trInh bieDn ;òch cuO
Caû khoâng gían teân vaø tíeâu ñeà theo caùch môùí íaø
nhöõng ñaëc tröng môùí ñöôïc boá sung vaøo C++ trong quaù trình
chuaán hoùa. Trong khí caùc trình bíeân dòch môùí coù hoã trôï
nhöõng ñaëc tröng naøy, coøn caùc trình bíeân dòch cuõ thì khoâng.
Trong tröôøng hôïp naøy, trình bíeân dòch seõ thoâng baùo raát
nhíeàu íoãí. Khí ñoù ta söû duïng tíeâu ñeà theo caùch cuõ vaø boû
khoâng gían teân.
1.42. GZLWZ I=ZQGO FLWH IJB@A C99
Trong C++, ñeá taïo ra moät ñoáí töôïng ta phaûí ñònh nghóa
daïng toáng quaùt cuûa noù baèng caùch söû duïng töø khoùa
class, moät töø khoùa class töông töï nhö cuù phaùp cuûa
st"uctu"ed. Ví duï:
Gh*ông 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 171
Jde2i*e SI“Š BUU
€€ This c"eates the class stac5%
class stac5 3
i*t stc5gSI“ŠhN
i*t tosN
0u$lici
void i*it?@N
void 0ush?i*t i@N
i*t 0o0?@N
4N
Lôùp coù theá chöùa nhöõng thaønh phaàn ríeâng (=ri3ate)
hoaëc coâng khaí (=ublic). Ngaàm ñònh, taát caû caùc thaønh ñònh
nghóa trong íôùp íaø =ri3ate, ví duï bíeán stc5 vaø tos íaø caùc
bíeán =ri3ate. Níeàu naøy coù nghóa íaø noù khoâng ñöôïc truy
xuaát bôûí nhöõng haøm khoâng íaø thaønh víeân cuûa íôùp (ñaây
íaø caùch theá híeän tính chaát bao goùí trong íaäp trình höôùng
ñoáí töôïng).
Neá taïo nhöõng phaàn cuûa íôùp íaø =ublic, ta phaûí khaí baùo
sau töø khoùa 0u$lic. Taát caû caùc bíeán vaø haøm ñònh nghóa
sau töø khoùa 0u$lic coù theá truy caäp bôûí haøm khaùc trong
chöông trình. Veà baûn chaát thì nhöõng thaønh phaàn coøn íaïí
cuûa chöông trình truy caäp moät ñoáí töôïng thoâng caùc haøm
=ublic cuûa noù. Maëc daàu ta coù theá khaí baùo bíeán íaø =ublic,
tuy nhíeân toát hôn heát íaø ta haïn cheá caùch truy caäp cuûa noù
baèng caùch khaí baùo noù íaø =ri3ate vaø truy caäp noù thoâng
qua caùc haøm =ublic. Töø khoùa 0u$lic theo sau bôûí moät daáu
haí chaám (i).
Caùc haøm trong íôùp goïí íaø haøm thaønh víeân, döõ ííeäu
trong íôùp goïí bíeán thaønh víeân. Löu yù íaø moät ñoáí töôïng
ñöôïc taïo töø haí yeáu toá ñoù íaø maõ vaø döõ ííeäu. Chæ coù
haøm thaønh víeân môùí ñöôïc quyeàn truy caäp vaøo caùc thaønh
172 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
víeân =ri3ate cuûa íôùp ñoù.
Khí ñaõ taïo ra moät íôùp, ta coù theá taïo ra ñoáí töôïng cuûa
íôùp ñoù baèng caùch duøng teân íôùp. Thöïc teá thì teân íôùp ñaõ
taïo thaønh moät kíeáu döõ ííeäu môùí. Ví duï ñeá taïo ra moät ñoáí
töôïng #6stac5 thuoäc kíeáu stac5%
stac5 #6stac5N
Khí khaí baùo moät ñoáí töôïng, ta ñaõ taïo ra moät theá híeän
cuûa íôùp, trong ví duï treân #6stac5 íaø moät theá híeän cuûa
stac5. Ta cuõng coù theá taïo moät ñoáí töôïng khí ñònh nghóa íôùp
baèng caùch ñaët teân sau daáu 4%
Toùm íaïí, trong C++, íôùp taïo ra moät kíeáu döõ ííeäu môùí
coù theá söû duïng ñeá taïo ra moät ñoáí töôïng. Do ñoù, moät ñoáí
töôïng íaø moät theá híeän cuûa íôùp. Caùch khaí baùo moät íôùp:
class class-*a#e 3
0"ivate data a*d 2u*ctio*s
0u$lici
0u$lic data a*d 2u*ctio*s
4 o$bect-*a#e-list;
Trong ñoù o$bect-*a#e-list coù theá boû troáng.
Trong íôùp, caùc haøm thaønh víeân phaûí khaí baùo theo
nguyeân maãu, khí víeát maõ cho haøm thuoäc íôùp ñoù, ta phaûí
noùí cho trình bíeân dòch bíeát íôùp maø haøm ñoù ôû beân trong.
Ví duï ñònh nghóa haøm 0ush?@ cho íôùp stac5
void stac5ii0ush?i*t i@
3
i2?tosccSI“Š@ 3
cout KK tStac5 is 2ull%l*tN
"etu"*N
4
stc5gtosh c iN
tosN
Gh*ông 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 17
4
Trong ñoù ii íaø toaùn töû phaân gíaûí phaïm ví, trong ví duï
treân noù noùí cho trình bíeân dòch bíeát haøm 0ush?@ thuoäc íôùp
stac5. Trong C++, caùc íôùp khaùc nhau coù theá duøng chung
moät teân haøm, trình bíeân dòch seõ bíeát haøm ñoù thuoäc íôùp
naøo nhôø toaùn töû phaân gíaûí phaïm ví.
Khí tham chíeáu ñeán caùc thaønh víeân töø maõ beân ngoaøí
íôùp, ta söû duïng cuù phaùp <teân ñoáí töôïng>.<thaønh víeân>.
Ví duï:
stac5 stac5BX stac52N
stac5B%i*it?@N
Noaïn chöông trình treân taïo ra haí ñoáí töôïng stac5B, stac52
vaø khôûí taïo ñoáí töôïng stac5B. Löu yù, haí ñoáí töôïng stac5B,
stac52 íaø haí ñoáí töôïng ríeâng bíeät. Níeàu ñoù coù nghóa íaø
khôûí taïo stac5B khoâng coù nghóa íaø khôûí taïo stac52. Haí ñoáí
töôïng naøy chæ moät moáí ííeân heä ñoù íaø cuøng teân íôùp.
Beân trong moät íôùp, moät haøm thaønh víeân coù theá goïí
moät haøm thaønh víeân khaùc hoaëc coù theá tham chíeáu tröïc
tíeáp ñeán döõ ííeäu thaønh víeân maø khoâng caàn toaùn töû
chaám (%).
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
Jde2i*e SI“Š BUU
€€ This c"eates the class stac5%
class stac5 3
i*t stc5gSI“ŠhN
i*t tosN
0u$lici
void i*it?@N
void 0ush?i*t i@N
i*t 0o0?@N
17& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4N
void stac5iii*it?@
3
tos c UN
4
void stac5ii0ush?i*t i@
3
i2?tosccSI“Š@ 3
cout KK tStac5 is 2ull%l*tN
"etu"*N
4
stc5gtosh c iN
tosN
4
i*t stac5ii0o0?@
3
i2?tosccU@ 3
cout KK tStac5 u*de"2lo!%l*tN
"etu"* UN
4
tos--N
"etu"* stc5gtoshN
4
i*t #ai*?@
3
stac5 stac5BX stac52N €€ c"eate t!o stac5 o$bects
stac5B%i*it?@N
stac52%i*it?@N
stac5B%0ush?B@N
stac52%0ush?2@N
stac5B%0ush?9@N
stac52%0ush?Y@N
cout KK stac5B%0o0?@ KK t tN
cout KK stac5B%0o0?@ KK t tN
cout KK stac52%0o0?@ KK t tN
cout KK stac52%0o0?@ KK tl*tN
"etu"* UN
4
Gh*ông 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 174
Keát quaû íaø: 9 B Y 2
Cuoáí cuøng, caùc thaønh víeân =ri3ate cuûa moät ñoáí töôïng
chæ ñöôïc truy caäp bôûí caùc haøm íaø thaønh víeân cuûa moät
ñoáí töôïng. Ví duï:
stac5B%tos c UN €€ Š""o"X tos is 0"ivate%
Seõ bò íoãí neáu íeänh treân naèm trong haøm #ai*?@ bôûí vì
tos íaø bíeán =ri3ate.
1.43. H>UX I>TZ VBGZ (.O@SIZB@ OPQJFB>]Z@A"
Moät theá híeän cuûa khaùí níeäm ña hình ñoù íaø caùch söû
duïng haøm taûí boäí. Trong C++, moät haøm coù theá chía seõ vôùí
nhau moät teân chung míeãn sao khaùc nhau veà tham soá.
Neá híeáu ñöôïc tính quan troïng cuûa haøm taûí boäí, ta xeùt
ba haøm a$s?@, la$s?@, 2a$s?@ trong C. Maët daàu ba haøm naøy
söû duïng ba teân khaùc nhau, nhöng noù coù nhíeäm vuï gíoáng
nhau ñoù íaø íaáy gíaù trò tuyeät ñoáí cuûa soá nguyeân, soá
nguyeân daøí, soá thöïc kíeáu dou$le. Níeàu naøy íaøm cho vaán
ñeà phöùc taïp hôn so vôùí thöïc teá. Tuy nhíeân, trong C++ ta coù
theá söû duïng moät teân cho ba haøm naøy, chöông trình ñöôïc
mính hoïa nhö sau:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
€€ a$s is ove"loaded th"ee !a6s
i*t a$s?i*t i@N
dou$le a$s?dou$le d@N
lo*g a$s?lo*g l@N
i*t #ai*?@
3
cout KK a$s?-BU@ KK tl*tN
cout KK a$s?-BB%U@ KK tl*tN
cout KK a$s?-ZL@ KK tl*tN
17+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
"etu"* UN
4
i*t a$s?i*t i@
3
cout KK tasi*g i*tege" a$s?@l*tN
"etu"* iKU | -i i iN
4
dou$le a$s?dou$le d@
3
cout KK tasi*g dou$le a$s?@l*tN
"etu"* dKU%U | -d i dN
4
lo*g a$s?lo*g l@
3
cout KK tasi*g lo*g a$s?@l*tN
"etu"* lKU | -l i lN
4
Keát quaû suaát híeän nhö sau:
asi*g i*tege" a$s?@
BU
asi*g dou$le a$s?@
BB
asi*g lo*g a$s?@
Z
Chöông trình treân taïo ra ba haøm coù cuøng teân, moãí haøm
traû veà moät gíaù trò töông öùng vôùí tham soá. Trình bíeân dòch
bíeát haøm naøo seõ ñöôïc goïí trong tình huoáng cuï theá phuï
thuoäc vaøo tham soá. Trình bíeân dòch khoâng phaân bíeät ñöôïc
haí haøm khaùc nhau coù cuøng teân, cuøng tham soá nhöng khaùc
nhau kíeáu traû veà.
1.4%. TB>W@ IDT I>TZ VBGZ (OHQJ>IBJ OPQJFB>]Z@A"
Moät caùch theá híeän khaùc cuûa ña hình ñoù íaø toaùn töû
taûí boäí. Nhö ta ñaõ bíeát trong C++ ta coù theá söû duïng toaùn
töû KK vaø LL thöïc híeän thao taùc vaøo ra. Haí toaùn töû treân coù
Gh*ông 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 177
theá thöïc híeän ñöôïc thao taùc môû roäng bôûí vì trong tíeâu ñeà
Kiost"ea#L ñaõ taûí boäí toaùn töû naøy.
1.4,. 0QR I=DU>
Keá thöøa íaø moät ñaëc ñíeám chính trong íaäp trình höôùng
ñoáí töôïng. Trong C++ keá thöøa ñöôïc hoã trôï baèng caùch cho
pheùp moät íôùp naøy saùp nhaäp vôùí moät íôùp khaùc trong khaí
baùo. Keá thöøa cho pheùp taïo ra moät caây phaân caáp dí
chuyeán töø toáng quaùt nhaát ñeán chí tíeát nhaát. Caùch xöû íyù
naøy íaø ñaàu tíeân taïo moät íôùp cô sôû (íôùp naøy ñònh nghóa
caùc thuoäc tính chung nhaát cuûa taát caû caùc ñoáí töôïng). Lôùp
keá thöøa töø íôùp cô sôû coøn ñöôïc goïí íaø íôùp daãn xuaát. Moät
íôùp daãn xuaát bao goàm caùc ñaëc tính cuûa íôùp cô sôû vaø boá
sung caùc ñaët tính ríeâng cuûa íôùp daãn xuaát. Ví duï sau taïo
caùc íôùp khaùc nhau ñeá phaân íoaïí caùc toøa nhaø.
Naàu tíeân, xaây döïng íôùp $uildi*g. Lôùp naøy nhö íaø íôùp
cô sôû ñeá daãn xuaát ra haí íôùp khaùc.
class $uildi*g 3
i*t "oo#sN
i*t 2loo"sN
i*t a"eaN
0u$lici
void set_"oo#s?i*t *u#@N
i*t get_"oo#s?@N
void set_2loo"s?i*t *u#@N
i*t get_2loo"s?@N
void set_a"ea?i*t *u#@N
i*t get_a"ea?@N
4N
Taát caû caùc toøa nhaø ñeàu coù ba ñaëc ñíeám chung, ñoù
íaø soá phoøng, soá taàng vaø toáng díeän tích. Baây gíôø ta coù
theá ñònh nghóa kíeáu roäng hôn $uildi*g ví duï íôùp housei
17- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
€€ house is de"ived 2"o# $uildi*g
class house i 0u$lic $uildi*g 3
i*t $ed"oo#sN
i*t $athsN
0u$lici
void set_$ed"oo#s?i*t *u#@N
i*t get_$ed"oo#s?@N
void set_$aths?i*t *u#@N
i*t get_$aths?@N
4N
Khaí baùo toáng quaùt cho moät íôùp keá thöøa:
class de"ived-class i access $ase-class 3
// $od6 o2 *e! class
4
access ôû ñaây íaø tuøy choïn, neáu xuaát híeän noù chæ
nhaän 3 gíaù trò íaø 0u$lic, 0"ivate, 0"otected. Ví duï treân keá
thöøa theo daïng 0u$lic. Níeàu ñoù coù nghóa íaø caùc thaønh
víeân =ublic cuûa íôùp cô sôû seõ íaø thaønh víeân =ublic cuûa íôùp
keá thöøa. Chöông trình sau ñaây mính hoïa tính keá thöøa. Noù taïo
ra haí íôùp daãn xuaát cuûa $uildi*g ñoù íaø íôùp house vaø
school.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $uildi*g 3
i*t "oo#sN
i*t 2loo"sN
i*t a"eaN
0u$lici
void set_"oo#s?i*t *u#@N
i*t get_"oo#s?@N
void set_2loo"s?i*t *u#@N
i*t get_2loo"s?@N
void set_a"ea?i*t *u#@N
i*t get_a"ea?@N
4N
Gh*ông 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 179
€€ house is de"ived 2"o# $uildi*g
class house i 0u$lic $uildi*g 3
i*t $ed"oo#sN
i*t $athsN
0u$lici
void set_$ed"oo#s?i*t *u#@N
i*t get_$ed"oo#s?@N
void set_$aths?i*t *u#@N
i*t get_$aths?@N
4N
€€ school is also de"ived 2"o# $uildi*g
class school i 0u$lic $uildi*g 3
i*t class"oo#sN
i*t o22icesN
0u$lici
void set_class"oo#s?i*t *u#@N
i*t get_class"oo#s?@N
void set_o22ices?i*t *u#@N
i*t get_o22ices?@N
4N
void $uildi*giiset_"oo#s?i*t *u#@
3
"oo#s c *u#N
4
void $uildi*giiset_2loo"s?i*t *u#@
3
2loo"s c *u#N
4
void $uildi*giiset_a"ea?i*t *u#@
3
a"ea c *u#N
4
i*t $uildi*giiget_"oo#s?@
3
"etu"* "oo#sN
4
i*t $uildi*giiget_2loo"s?@
3
1-6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
"etu"* 2loo"sN
4
i*t $uildi*giiget_a"ea?@
3
"etu"* a"eaN
4
void houseiiset_$ed"oo#s?i*t *u#@
3
$ed"oo#s c *u#N
4
void houseiiset_$aths?i*t *u#@
3
$aths c *u#N
4
i*t houseiiget_$ed"oo#s?@
3
"etu"* $ed"oo#sN
4
i*t houseiiget_$aths?@
3
"etu"* $athsN
4
void schooliiset_class"oo#s?i*t *u#@
3
class"oo#s c *u#N
4
void schooliiset_o22ices?i*t *u#@
3
o22ices c *u#N
4
i*t schooliiget_class"oo#s?@
3
"etu"* class"oo#sN
4
i*t schooliiget_o22ices?@
3
"etu"* o22icesN
4
Gh*ông 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 1-1
i*t #ai*?@
3
house hN
school sN
h%set_"oo#s?B2@N
h%set_2loo"s?9@N
h%set_a"ea?YVUU@N
h%set_$ed"oo#s?V@N
h%set_$aths?9@N
cout KK thouse has t KK h%get_$ed"oo#s?@N
cout KK t $ed"oo#sl*tN
s%set_"oo#s?2UU@N
s%set_class"oo#s?BRU@N
s%set_o22ices?V@N
s%set_a"ea?2VUUU@N
cout KK tschool has t KK s%get_class"oo#s?@N
cout KK t class"oo#sl*tN
cout KK tIts a"ea is t KK s%get_a"ea?@N
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
house has V $ed"oo#s
school has BRU class"oo#s
Its a"ea is 2VUUU
1.4-. C>RO IDT P>U =OT^ IDT (SB@IJOSIBJ1
]Q\IJOSIBJ"
Moät thao taùc raát thöôøng gaëp trong íaäp trình höôùng ñoáí
töôïng ñoù íaø khôûí taïo caùc ñoáí töôïng tröôùc khí söû duïng. Ví
duï nhö ñoáí töôïng stac5, tröôùc khí söû duïng ta phaûí thíeát íaäp
tos baèng 0. Níeàu naøy ñöôïc thöïc híeän baèng haøm i*it?@. Vì
thao taùc khôûí taïo thöôøng xuyeân söû duïng neân C++ cho pheùp
ñoáí töôïng ñöôïc khôûí taïo khí noù ñöôïc khaí baùo. Thao taùc khôûí
taïo töï ñoäng naøy ñöôïc thöïc híeän thoâng qua caùch söû duïng
cuûa haøm caáu töû.
1-2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Haøm caáu töû íaø moät haøm ñaëc bíeät noù íaø thaønh víeân
cuûa moät íôùp vaø coù cuøng teân vôùí íôùp. Ví duï:
€€ This c"eates the class stac5%
class stac5 3
i*t stc5gSI“ŠhN
i*t tosN
0u$lici
stac5?@N €€ co*st"ucto"
void 0ush?i*t i@N
i*t 0o0?@N
4N
Caáu töû stac5?@ khoâng traû veà moät gíaù trò roõ raøng.
Trong C++ haøm caáu töû khoâng traû veà gíaù trò naøo. Haøm
stac5?@ coù maõ nhö sau:
€€ stac5ws co*st"ucto" 2u*ctio*
stac5iistac5?@
3
tos c UN
cout KK tStac5 I*itiali8edl*tN
4
Thoâng ñíeäp Stac5 I*itiali8ed chæ ñeá mính hoïa trong ví
duï treân, trong thöïc teá raát nhíeàu haøm caáu töû khoâng vaøo
hoaëc ra baát kì döõ ííeäu naøo. Noù chæ ñôn gíaûn íaø thöïc híeän
caùc thao taùc khôûí taïo. Moät caáu töû seõ töï ñoäng thöïc híeän
khí moät ñoáí töôïng ñöôïc taïo.
Ngöôïc íaïí vôùí caáu töû íaø huûy töû. Trong raát nhíeàu tình
huoáng, moät ñoáí töôïng caàn moät vaøí haønh ñoäng khí huûy
boû. Noáí töôïng cuïc boä seõ ñöôïc taïo khí vaøo caùc ñoaïn maõ
vaø huûy boû khí thoaùt khoûí caùc ñoaïn maõ. Noáí töôïng toaøn
cuïc seõ huûy boû khí keát thuùc chöông trình. Khí ñoáí töôïng huûy
boû, huûy töû cuûa noù neáu coù seõ töï ñoäng thöïc híeän. Coù
nhíeàu íí do ñeá söû duïng huûy töû, ví duï nhö gíaûí phoùng vuøng
Gh*ông 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 1-
nhôù ñaõ ñöôïc caáp phaùp tröôùc ñoù hoaëc coù theá ñoùng moät
;ile ñaõ môû. Huûy töû coù cuøng teân vôùí caáu töû nhöng phaûí
ñaët tröôùc ñoù moät daáu Œ. Ví duï íôùp stac5 cuøng vôùí caáu töû
vaø huûy töû:
€€ This c"eates the class stac5%
class stac5 3
i*t stc5gSI“ŠhN
i*t tosN
0u$lici
stac5?@N €€ co*st"ucto"
Œstac5?@N €€ dest"ucto"
void 0ush?i*t i@N
i*t 0o0?@N
4N
€€ stac5ws co*st"ucto" 2u*ctio*
stac5iistac5?@
3
tos c UN
cout KK tStac5 I*itiali8edl*tN
4
€€ stac5ws dest"ucto" 2u*ctio*
stac5iiŒstac5?@
3
cout KK tStac5 Cest"o6edl*tN
4
Gíoáng nhö caáu töû, huûy töû khoâng coù gíaù trò traû veà. Ví
duï sau íaø phíeân baûn caûí tíeán cuûa íôùp stac5 nhö ñaõ ñeà
caäp ôû ví duï tröôùc:
€€ asi*g a co*st"ucto" a*d dest"ucto"%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
Jde2i*e SI“Š BUU
€€ This c"eates the class stac5%
class stac5 3
i*t stc5gSI“ŠhN
1-& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
i*t tosN
0u$lici
stac5?@N €€ co*st"ucto"
Œstac5?@N €€ dest"ucto"
void 0ush?i*t i@N
i*t 0o0?@N
4N
€€ stac5ws co*st"ucto" 2u*ctio*
stac5iistac5?@
3
tos c UN
cout KK tStac5 I*itiali8edl*tN
4
€€ stac5ws dest"ucto" 2u*ctio*
stac5iiŒstac5?@
3
cout KK tStac5 Cest"o6edl*tN
4
void stac5ii0ush?i*t i@
3
i2?tosccSI“Š@ 3
cout KK tStac5 is 2ull%l*tN
"etu"*N
4
stc5gtosh c iN
tosN
4
i*t stac5ii0o0?@
3
i2?tosccU@ 3
cout KK tStac5 u*de"2lo!%l*tN
"etu"* UN
4
tos--N
"etu"* stc5gtoshN
4
i*t #ai*?@
3
Gh*ông 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 1-4
stac5 aX $N €€ c"eate t!o stac5 o$bects
a%0ush?B@N
$%0ush?2@N
a%0ush?9@N
$%0ush?Y@N
cout KK a%0o0?@ KK t tN
cout KK a%0o0?@ KK t tN
cout KK $%0o0?@ KK t tN
cout KK $%0o0?@ KK tl*tN
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
Stac5 I*itiali8ed
Stac5 I*itiali8ed
9 B Y 2
Stac5 Cest"o6ed
Stac5 Cest"o6ed
1.4+. TDU _=BW> IJB@A C99
Coù taát caû 63 töø khoùa ñònh ñöôïc ñònh nghóa trong C++
chuaán theá híeän trong baûng 11.1. C++ íaø ngoân ngöõ coù
phaân bíeät chöõ hoa vaø chöõ thöôøng, taát caû caùc töø khoùa
trong C++ íaø chöõ thöôøng.
as# auto $ool $"ea5
case catch cha" class
co*st co*st_cast co*ti*ue de2ault
delete do dou$le d6*a#ic_cast
else e*u# e70licit e70o"t
e7te"* 2alse 2loat 2o"
2"ie*d goto i2 i*li*e
i*t lo*g #uta$le *a#es0ace
Ne! o0e"ato" 0"ivate 0"otected
0u$lic Registe" "ei*te"0"et_cast "etu"*
sho"t Sig*ed si8eo2 static
1-+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
static_cast St"uct s!itch te#0late
this th"o! t"ue t"6
t60ede2 T60eid t60e*a#e u*io*
u*sig*ed usi*g vi"tual void
volatile !cha"_t !hile
Bảng 11-1. CFc t: 5h;a t"o*g C
1.44. 3>d@A IBM@A NO>WI SOT> XBGI S=DL@A IJK@=
C99
Daïng toáng quaùt cuûa moät chöông trình C++ nhö sau:
Ji*cludes
$ase-class decla"atio*s
de"ived class decla"atio*s
*o*#e#$e" 2u*ctio* 0"otot60es
i*t #ai*? @
3
€€%%%
4
*o*#e#$e" 2u*ctio* de2i*itio*s
Trong haàu heát caùc döï aùn íôùn, taát caû caùc khaí baùo
íôùp ñeàu ñaët trong ;ile tíeâu ñeà vaø ñöôïc cheøn vaøo moãí
1o<ul. Nhöng caùc toá chöùc chöông trình toáng quaùt vaãn thöïc
híeän theo daïng treân.
Gh*ông 12. $ôù= 3a' .oái t*ôïng #Gla,, 8 hbfect% 1-7
C=DL@A 12. LLWH P>U YBRZ IDLd@A (CF>\\
>@] OVmQSI"
1.4#. LLWH
Lôùp ñöôïc taïo baèng töø khoùa class. Moät khaí baùo íôùp
ñònh nghóa moät kíeáu döõ ííeäu môùí ííeân keát maõ vaø döõ ííeäu.
Kíeáu döõ ííeäu naøy ñöôïc söû duïng ñeá khaí baùo caùc ñoáí töôïng
cuûa íôùp ñoù. Khaí baùo íôùp töông töï nhö khaí baùo cuù phaùp
khaí baùo caáu truùc:
class class-*a#e 3
0"ivate data a*d 2u*ctio*s
access-s0eci2ie"i
data a*d 2u*ctio*s
access-s0eci2ie"i
data a*d 2u*ctio*s
€€ %%%
access-s0eci2ie"i
data a*d 2u*ctio*s
4 o$bect-listN
o$bect-list íaø tuøy choïn, neáu xuaát híeän noù seõ khaí
baùo ñoáí töôïng cuûa íôùp ñoù. access-s0eci2ie" ñaëc taû truy
caäp vaø íaø moät trong ba töø khoùa: 0u$lic, 0"ivate, 0"otected.
Khaí baùo 0"ivate íaø ngaàm ñònh, nghóa íaø haøm vaø döõ
ííeäu khoâng coù ñaëc taû truy caäp noù seõ íaø =ri3ate. Ta coù theá
thay ñoáí ñaëc taû truy caäp baát cöù íuùc naøo beân trong khaí
baùo íôùp, ví duï:
class e#0lo6ee 3
cha" *a#egRUhN €€ 0"ivate $6 de2ault
0u$lici
void 0ut*a#e?cha" ƒ*@N €€ these a"e 0u$lic
void get*a#e?cha" ƒ*@N
1-- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
0"ivatei
dou$le !ageN €€ *o!X 0"ivate agai*
0u$lici
void 0ut!age?dou$le !@N €€ $ac5 to 0u$lic
dou$le get!age?@N
4N
Tuy nhíeân, ñeá deã daøng ñoïc chöông trình, ta neân nhoùm
caùc thaønh víeân coù cuøng ñaët taû truy caäp íaïí vôùí nhau.
Haøm khaí baùo trong íôùp ñöôïc goïí íaø haøm thaønh víeân.
Haøm thaønh víeân coù theá truy caäp ñeán baát kì thaønh víeân
naøo trong íôùp keá caùc caùc thaønh phaàn =ri3ate. Bíeán beân
trong íôùp ñöôïc goïí íaø bíeán thaønh víeân hoaëc döõ ííeäu thaønh
víeân.
1.#/. !Dd FZQC@ NO>@ AZDE> FLWH P>U YBRZ IDLd@A
Trong C++, vaí troø cuûa caáu truùc ñöôïc môû roäng, ñoù íaø
caùch taïo khaùc cuûa íôùp. Trong thöïc teá, söï khaùc nhau gíöõa
íôùp vaø caáu truùc ôû ñíeám duy nhaát íaø tính chaát ngaàm ñònh,
taát caû caùc thaønh víeân trong caáu truùc ngaàm ñònh íaø =ublic
vaø trong íôùp íaø =ri3ate. Taát caû caùc tính chaát coøn íaïí thì íôùp
vaø caáu truùc íaø töông ñöông. Trong C++ caáu truùc ñònh nghóa
íôùp, ví duï:
€€ asi*g a st"uctu"e to de2i*e a class%
Ji*clude Kiost"ea#L
Ji*clude Kcst"i*gL
usi*g *a#es0ace stdN
st"uct #6st" 3
void $uildst"?cha" ƒs@N €€ 0u$lic
void sho!st"?@N
0"ivatei €€ *o! go 0"ivate
cha" st"g2VVhN
4 N
void #6st"ii$uildst"?cha" ƒs@
Gh*ông 12. $ôù= 3a' .oái t*ôïng #Gla,, 8 hbfect% 1-9
3
i2?^ƒs@ ƒst" c wlUwN €€ i*itiali8e st"i*g
else st"cat?st"X s@N
4
void #6st"iisho!st"?@
3
cout KK st" KK tl*tN
4
i*t #ai*?@
3
#6st" sN
s%$uildst"?tt@N €€ i*it
s%$uildst"?tHello t@N
s%$uildst"?tthe"e^t@N
s%sho!st"?@N
"etu"* UN
4
Chöông trình treân seõ híeán thò Hello the"e^ treân maøn
hình. Caáu truùc #6st" coù theá víeát döôùí daïng íôùp nhö sau:
class #6st" 3
cha" st"g2VVhN
0u$lici
void $uildst"?cha" ƒs@N €€ 0u$lic
void sho!st"?@N
4
Ta seõ thaéc maéc vì sao C++ íaø coù haí töø khoùa töông
ñöôcng nhö vaäy, söï dö thöøa naøy coù moät vaøí íí do nhö sau:
Thöù nhaát: taêng khaû naêng söû duïng cuûa caáu truùc.
Trong C, caáu truùc ñaõ ñoùng goùí döõ ííeäu do vaäy boá sung
theâm haøm thaønh víeân chæ íaø theâm moät böôùc nhoû.
Thöù haí: bôûí vì caáu truùc vaø íôùp coù ííeân quan, ta coù
theá deã daøng chuyeán moät chöông trình C sang C++.
Thöù ba: cung caáp haí töø khoùa ñeá ñònh nghóa íôùp ñeá
ngöôøí duøng coù theá töï do phaùt tríeán chöông trình hôn.
196 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
1.#1. !Dd FZQC@ NO>@ SOT> I>GH =LdH P>U FLWH
Gíoáng nhö caáu truùc, u*io* cuõng coù theá söû duïng ñeá
taïo íôùp. Trong C++, u*io* coù theá chöùa caû bíeán vaø haøm
thaønh víeân vaø noù cuõng coù theá coù caáu töû vaø huûy töû.
Trong C++, u*io* vaãn gíöõ caùc ñaëc tröng trong C, ñaëc tröng
quan troïng nhaát íaø taát caû caùc thaønh víeân ñeàu chía seõ
moät vuøng nhôù. Gíoáng nhö caáu truùc, ngaàm ñònh íaø taát caû
caùc thaønh víeân cuûa u*io* íaø =ublic vaø hoaøn toaøn töông
thích vôùí C, ví duï sau cho ta caùch hoaùn ñoáí vò trí haí b?te cuûa
moät soá nguyeân:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
u*io* s!a0_$6te 3
void s!a0?@N
void set_$6te?u*sig*ed sho"t i@N
void sho!_!o"d?@N
u*sig*ed sho"t uN
u*sig*ed cha" cg2hN
4N
void s!a0_$6teiis!a0?@
3
u*sig*ed cha" tN
t c cgUhN
cgUh c cgBhN
cgBh c tN
4
void s!a0_$6teiisho!_!o"d?@
3
cout KK uN
4
void s!a0_$6teiiset_$6te?u*sig*ed sho"t i@
3
u c iN
4
Gh*ông 12. $ôù= 3a' .oái t*ôïng #Gla,, 8 hbfect% 191
i*t #ai*?@
3
s!a0_$6te $N
$%set_$6te?YZU9Y@N
$%s!a0?@N
$%sho!_!o"d?@N
"etu"* UN
4
Gíoáng nhö caáu truùc, khaí baùo u*io* ñònh nghóa moät íôùp
ñaëc bíeät. Do ñoù caùc nguyeân íyù bao goùí vaãn ñöôïc duy trì.
Coù moät vaøí haïn cheá khí söû duïng uníon trong C++:
Thöù nhaát: u*io* khoâng ñöôïc pheùp keá thöøa trong caùc
íôùp hay noù khoâng theá íaø íôùp cô sôû. Moät u*io* khoâng coù
haøm thaønh víeân aûo.
Thöù haí: moät u*io* khoâng theá coù thaønh víeân íaø ñoáí
töôïng taûí boäí toaùn töû c
Thöù ba: khoâng coù ñoáí töôïng naøo íaø thaønh víeân cuûa
u*io* neáu ñoáí töôïng ñoù coù caáu töû hoaëc huûy töû.
1.91.1. Hôï< naGc ;anh (anon)/ou, union,"
Coù moät kíeáu ñaëc bíeät cuûa kíeáu u*io* trong C++ goïí
íaø hôïp naëc danh. Hôïp naëc danh khoâng coù teân kíeáu vaø ñoáí
töôïng khí khaí baùo. Thay vaøo ñoù, hôïp naëc danh thoâng baùo
cho trình bíeân dòch bíeát caùc bíeán thaønh víeân chía seõ moät
vuøng nhôù, vaø caùc bíeán naøy ñöôïc tham chíeáu tröïc tíeáp
khoâng thoâng qua toaùn töû (%). Ví duï sau:
Ji*clude Kiost"ea#L
Ji*clude Kcst"i*gL
usi*g *a#es0ace stdN
i*t #ai*?@
3
€€ de2i*e a*o*6#ous u*io*
192 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
u*io* 3
lo*g lN
dou$le dN
cha" sgYhN
4 N
€€ *o!X "e2e"e*ce u*io* ele#e*ts di"ectl6
l c BUUUUUN
cout KK l KK t tN
d c B29%29Y2N
cout KK d KK t tN
st"c06?sX thit@N
cout KK sN
"etu"* UN
4
Ta thaáy caùc bíeán thaønh víeân ñöôïc tham chíeáu gíoáng
nhö bíeán cuïc boä thoâng thöôøng. Xa hôn nöõa ñoù íaø noù coù
cuøng phaïm ví nhö moïí bíeán cuïc boä khaùc beân trong cuøng
moät khoáí. Níeàu naøy suy ra raèng teân cuûa caùc thaønh víeân
hôïp naëc danh khoâng ñöôïc truøng vôùí caùc ñònh danh khaùc
trong moät phaïm ví.
Hôïp naëc danh ngoaøí nhöõng haïn cheá cuûa kíeáu u*io*
coøn coù moät soá haïn cheá sau: caùc thaønh víeân beân trong
chæ íaø döõ ííeäu, khoâng coù haøm thaønh víeân; khoâng chöùa
caùc ñaëc taû truy caäp 0"ivate vaø 0"otected; caùc hôïp naëc
daïnh toaøn cuïc phaûí khaí baùo íaø static.
1.#2. H>UX I=>C@ I=ZQG@
Ta coù theá cho pheùp moät haøm khoâng phaûí thaønh víeân
cuûa moät íôùp truy caäp vaøo caùc thaønh víeân =ri3ate cuûa íôùp
baèng caùch söû duïng 2"ie*d. Moät haøm íaø thaân thíeän coù
theá truy caäp taát caû caùc thaønh phaàn =ri3ate vaø =rotecte<
cuûa moät íôùp. Neá khaí baùo moät haøm thaân thíeän, ta cheøn
töø khoùa 2"ie*d tröôùc khaí baùo haøm trong íôùp. Xeùt ví duï sau:
Gh*ông 12. $ôù= 3a' .oái t*ôïng #Gla,, 8 hbfect% 19
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class #6class 3
i*t aX $N
0u$lici
2"ie*d i*t su#?#6class 7@N
void set_a$?i*t iX i*t b@N
4N
void #6classiiset_a$?i*t iX i*t b@
3
a c iN
$ c bN
4
€€ Notei su#?@ is *ot a #e#$e" 2u*ctio* o2 a*6 class%
i*t su#?#6class 7@
3
€ƒ Because su#?@ is a 2"ie*d o2 #6classX it ca*
di"ectl6 access a a*d $% ƒ€
"etu"* 7%a 7%$N
4
i*t #ai*?@
3
#6class *N
*%set_a$?9X Y@N
cout KK su#?*@N
"etu"* UN
4
Trong ví duï treân, haøm su#?@ khoâng phaûí íaø thaønh víeân
cuûa íôùp #6class, tuy nhíeân noù vaãn coù theá truy caäp vaøo
caùc thaønh víeân =ri3ate. Chuù yù, khí goïí haøm su#?@ ta khoâng
caàn coù toaùn töû chaám (%) bôûí vì noù khoâng phaûí íaø haøm
thaønh víeân neân khoâng caàn chæ ra teân ñoáí töôïng.
Maëc daàu khoâng coù íôïí khí khaí baùo haøm su#?@ íaø thaân
thíeän, tuy nhíeân coù moät vaøí tình huoáng caàn phaûí söû duïng
haøm thaân thíeän. Thöù nhaát haøm thaân thíeän raát coù ích khí
19& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
taûí boäí caùc toaùn töû. Thöù haí, haøm thaân thíeän taïo ra caùc
kíeáu haøm vaøo/ra deã daøng. Thöù ba, haøm thaân thíeän ñaùp
öùng moät soá tröôøng hôïp nhö haí hoaëc nhíeàu íôùp coù chöùa
caùc thaønh víeân ííeân quan ñeán phaàn khaùc cuûa chöông trình.
1.#3. LLWH I=>C@ I=ZQG@
Ta coù theá cho moät íôùp íaø thaân thíeän vôùí íôùp khaùc.
Tröôøng hôïp naøy, íôùp thaân thíeän vaø taát caû caùc haøm
thaønh víeân cuûa noù coù theá truy caäp ñeán caùc thaønh víeân
=ri3ate ñöôïc ñònh nghóa trong íôùp khaùc. Ví duï:
€€ asi*g a 2"ie*d class%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class T!o&alues 3
i*t aN
i*t $N
0u$lici
T!o&alues?i*t iX i*t b@ 3 a c iN $ c bN 4
2"ie*d class Mi*N
4N
class Mi* 3
0u$lici
i*t #i*?T!o&alues 7@N
4N
i*t Mi*ii#i*?T!o&alues 7@
3
"etu"* 7%a K 7%$ | 7%a i 7%$N
4
i*t #ai*?@
3
T!o&alues o$?BUX 2U@N
Mi* #N
cout KK #%#i*?o$@N
"etu"* UN
4
Gh*ông 12. $ôù= 3a' .oái t*ôïng #Gla,, 8 hbfect% 194
Trong ví duï treân, íôùp Mi* coù theá truy caäp ñeán caùc
bíeán =ri3ate a vaø $ ñöôïc khaí baùo beân trong íôùp T!o&alues.
Khí moät íôùp íaø thaân thíeän vôùí íôùp khaùc noù chæ truy
caäp ñeán teân ñöôïc ñònh nghóa beân trong íôùp khaùc, noù
khoâng keá thöøa íôùp ñoù vaø thaønh víeân cuûa íôùp ñaàu khoâng
phaûí íaø thaønh víeân cuûa íôùp thaân thíeän. Lôùp thaân thíeän ít
khí ñöôïc söû duïng trong caùc tình huoáng íaäp trình.
1.#%. H>UX I@FZ@Q
Haøm inline íaø moät ñaëc tröng quan troïng ngoân ngöõ C++.
Noù thöôøng ñöôïc söû duïng vôùí íôùp. Ta coù theá taïo ra moät
haøm ngaén maø noù khoâng thöïc söï ñöôïc goïí, hay maõ cuûa noù
ñöôïc môû roäng treân moät doøng taïí ñíeám goïí haøm. Caùch xöû
íyù naøy gíoáng nhö 1acro trong C. Neá taïo haøm naøy, ta theâm
töø khoùa i*li*e tröôùc khaí baùo haøm. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*li*e i*t #a7?i*t aX i*t $@
3
"etu"* aL$ | a i $N
4
i*t #ai*?@
3
cout KK #a7?BUX 2U@N
cout KK t t KK #a7?ZZX RR@N
"etu"* UN
4
Khí ñoù trình bíeân dòch seõ cheøn thaân haøm #a7?@ vaøo
ngay vò trí goïí haøm, khí thöïc híeän chöông trình coù maõ töông
ñöông nhö sau:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
19+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
i*t #ai*?@
3
cout KK ?BUL2U | BU i 2U@N
cout KK t t KK ?ZZLRR | ZZ i RR@N
"etu"* UN
4
Lí do haøm inline thöôøng ñöôïc söû duïng íaø do tính híeäu
quaû cuûa noù, bôûí vì haøm inline khoâng coù cô cheá goïí haøm
thoâng thöôøng do ñoù seõ thöïc híeän nhanh hôn. Tuy nhíeân haøm
inline seõ íaøm cho chöông trình coù kích thöôùc íôùn hôn bôûí vì söï
truøng hôïp cuûa maõ. Thoâng thöôøng ta chæ söû duïng haøm
inline trong tröôøng hôïp thaân haøm ngaén.
1.9#.1. Cònh nghKa ha$/ Ln!ine trong /oät !ôù<
Ta coù theá ñònh nghóa haøm inline trong khaí baùo íôùp (töùc
íaø ta víeát maõ tröïc tíeáp cuûa haøm trong khaí baùo íôùp). Khí
haøm ñònh nghóa beân trong khaí baùo íôùp, noù seõ töï ñoäng taïo
ra moät haøm inline. Ta khoâng caàn cheøn töø khoùa i*li*e tröôùc
khaí baùo haøm. Chöông trình sau ñònh nghóa haøm i*it?@ vaø
haøm sho!?@ trong khaí baùo íôùp:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class #6class 3
i*t aX $N
0u$lici
€€ auto#atic i*li*e
void i*it?i*t iX i*t b@ 3 aciN $cbN 4
void sho!?@ 3 cout KK a KK t t KK $ KK tl*tN 4
4N
i*t #ai*?@
3
#6class 7N
7%i*it?BUX 2U@N
7%sho!?@N
Gh*ông 12. $ôù= 3a' .oái t*ôïng #Gla,, 8 hbfect% 197
"etu"* UN
4
Trong ví duï treân, haøm i*it?@ vaø haøm sho!?@ íaø haøm
inline bôûí vì noù ñöôïc ñònh nghóa beân trong íôùp. Caáu töû vaø
huûy töû cuõng coù theá íaø haøm inline.
1.#,. C>RO IDT SBW I=>X \BR
Ta coù theá truyeàn tham soá ñeán haøm caáu töû. Nhöõng
tham soá naøy gíuùp khôûí taïo moät ñoáí töôïng khí noù ñöôïc taïo.
Neá taïo caáu töû coù tham soá, ta chæ caàn boá sung tham soá
vaøo khaí baùo caáu töû. Khí ñònh nghóa thaân caáu töû, ta duøng
caùc tham soá naøy ñeá khôûí taïo caùc cho ñoáí töôïng. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class #6class 3
i*t aX $N
0u$lici
#6class?i*t iX i*t b@ 3aciN $cbN4
void sho!?@ 3cout KK a KK t t KK $N4
4N
i*t #ai*?@
3
#6class o$?9X V@N
o$%sho!?@N
"etu"* UN
4
Trong ñònh nghóa caáu töû #6class?@, caùc tham soá i, b
duøng ñeá gaùn gíaù trò cho a, $. Caùch taïo caáu töû coù tham soá
thöôøng ñöôïc söû duïng trong caùc tình huoáng íaäp trình. Chuù yù,
caâu íeänh:
#6class o$?9X Y@N
Coù theá thay baèng caâu íeänh:
#6class o$ c #6class?9X Y@N
19- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Ví duï sau, khaí baùo moät íôùp íöu tröõ thoâng tín cuûa thö
víeän saùch. Chöông trình coù söû duïng caáu töû coù tham soá.
Ji*clude Kiost"ea#L
Ji*clude Kcst"i*gL
usi*g *a#es0ace stdN
co*st i*t IN c BN
co*st i*t CHŠCOŠC_OaT c UN
class $oo5 3
cha" autho"gYUhN
cha" titlegYUhN
i*t statusN
0u$lici
$oo5?cha" ƒ*X cha" ƒtX i*t s@N
i*t get_status?@ 3"etu"* statusN4
void set_status?i*t s@ 3status c sN4
void sho!?@N
4N
$oo5ii$oo5?cha" ƒ*X cha" ƒtX i*t s@
3
st"c06?autho"X *@N
st"c06?titleX t@N
status c sN
4
void $oo5iisho!?@
3
cout KK title KK t $6 t KK autho"N
cout KK t is tN
i2?statusccIN@ cout KK ti*%l*tN
else cout KK tout%l*tN
4
i*t #ai*?@
3
$oo5 $B?tT!ai*tX tTo# Sa!6e"tX IN@N
$oo5 $2?tMelvilletX tMo$6 Cic5tX CHŠCOŠC_OaT@N
$B%sho!?@N
$2%sho!?@N
"etu"* UN
Gh*ông 12. $ôù= 3a' .oái t*ôïng #Gla,, 8 hbfect% 199
4
1.92.1. (aáu t'û /oät tha/ ,oá
Neáu caáu töû coù moät tham soá, coù ba caùch ñeá gôûí gíaù
trò khôûí taïo ñeán caáu töû. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class ‹ 3
i*t aN
0u$lici
‹?i*t b@ 3 a c bN 4
i*t geta?@ 3 "etu"* aN 4
4N
i*t #ai*?@
3
‹ o$ c ZZN €€ 0asses ZZ to b
cout KK o$%geta?@N €€ out0uts ZZ
"etu"* UN
4
Caâu íeänh:
‹ o$ c ZZN
Coù theá ñöôïc thay baèng:
‹ o$?ZZ@N
Hoaëc:
‹ o$ c ‹?ZZ@N
1.#-. T=>U@= PZQC@ Ii@= SOT> XBGI FLWH
1.93.1. ]'O !ieäu tha$nh 1ieDn tKnh
Khí cheøn tröôùc bíeán thaønh víeân moät töø khoùa static,
ta baùo cho trình bíeân dòch bíeát raèng chæ coù moät bíeán toàn
taïí vaø taát caû caùc ñoáí töôïng cuûa íôùp seõ chía seõ bíeán naøy.
Taát caû caùc bíeán ,tatic ñöôïc khôûí taïo baèng 0 tröôùc khí ñoáí
töôïng ñaàu tíeân ñöôïc taïo. Khí khaí baùo moät döõ ííeäu ,tatic
266 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
trong moät íôùp, ta khoâng caáp phaùt boä nhôù cho noù. Thay vaøo
ñoù ta phaûí caáp phaùt boä nhôù cho noù beân ngoaøí íôùp. Neá
íaøm ñíeàu naøy, ta khaí baùo íaïí bíeán ,tatic baèng caùch söû
duïng toaùn töû phaïm ví ñeá xaùc ñònh íôùp maø chöùa noù. Neá
híeáu roõ hôn, ta xeùt ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class sha"ed 3
static i*t aN
i*t $N
0u$lici
void set?i*t iX i*t b@ 3aciN $cbN4
void sho!?@N
4 N
i*t sha"ediiaN €€ de2i*e a
void sha"ediisho!?@
3
cout KK tThis is static ai t KK aN
cout KK tl*This is *o*-static $i t KK $N
cout KK tl*tN
4
i*t #ai*?@
3
sha"ed 7X 6N
7%set?BX B@N €€ set a to B
7%sho!?@N
6%set?2X 2@N €€ cha*ge a to 2
6%sho!?@N
7%sho!?@N €ƒ He"eX a has $ee* cha*ged 2o" $oth 7 a*d
6 $ecause a is sha"ed $6 $oth o$bects% ƒ€
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
This is static ai B
This is *o*-static $i B
This is static ai 2
Gh*ông 12. $ôù= 3a' .oái t*ôïng #Gla,, 8 hbfect% 261
This is *o*-static $i 2
This is static ai 2
This is *o*-static $i B
Chuù yù, ta phaûí khaí baùo bíeán a beân trong vaø beân
ngoaøí íôùp sha"ed. Bôûí vì khaí baùo a beân trong íôùp khoâng
thöïc söï taïo ra moät vuøng nhôù.
Moät bíeán ,tatic toàn taïí tröôùc khí moïí ñoáí töôïng cuûa íôùp
ñöôïc taïo. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class sha"ed 3
0u$lici
static i*t aN
4 N
i*t sha"ediiaN €€ de2i*e a
i*t #ai*?@
3
€€ i*itiali8e a $e2o"e c"eati*g a*6 o$bects
sha"ediia c ZZN
cout KK tThis is i*itial value o2 ai t KK sha"ediiaN
cout KK tl*tN
sha"ed 7N
cout KK tThis is 7%ai t KK 7%aN
"etu"* UN
4
a íaø bíeán ñöôïc khaí baùo ,tatic vaø =ublic, noù coù theá
ñöôïc truy caäp tröïc tíeáp trong haøm #ai*?@, a toàn taïí tröôùc khí
caùc ñoáí töôïng ñònh nghóa.
Moät caùch söû duïng bíeán thaønh víeân tónh íaø cung caáp
caùch ñíeàu khíeán truy caäp ñeá chía seõ taøí nguyeân ñöôïc söû
duïng bôûí taát caû chöông trình. Ví duï, ta taïo ra nhíeàu ñoáí töôïng
vaø ghí caùc ñoáí töôïng naøy vaøo ;ile. Roõ raøng chæ coù moät
ñoáí töôïng ñöôïc ghí vaøo ;ile taïí moät thôøí ñíeám. Trong tröôøng
262 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
hôïp naøy ta khaí baùo moät bíeán tónh cho bíeát khí naøo thì ;ile
ñang duøng hoaëc ñang roãí. Moãí ñoáí töôïng tröôùc khí ghí döõ
ííeäu vaøo ;ile seõ kíeám tra traïng thaùí cuûa ;ile naøy. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class cl 3
static i*t "esou"ceN
0u$lici
i*t get_"esou"ce?@N
void 2"ee_"esou"ce?@ 3"esou"ce c UN4
4N
i*t clii"esou"ceN €€ de2i*e "esou"ce
i*t cliiget_"esou"ce?@
3
i2?"esou"ce@ "etu"* UN €€ "esou"ce al"ead6 i* use
else 3
"esou"ce c BN
"etu"* BN €€ "esou"ce allocated to this o$bect
4
4
i*t #ai*?@
3
cl o$BX o$2N
i2?o$B%get_"esou"ce?@@
cout KK to$B has "esou"cel*tN
i2?^o$2%get_"esou"ce?@@
cout KK to$2 de*ied "esou"cel*tN
o$B%2"ee_"esou"ce?@N €€ let so#eo*e else use it
i2?o$2%get_"esou"ce?@@
cout KK to$2 ca* *o! use "esou"cel*tN
"etu"* UN
4
Moät caùch söû duïng bíeán thaønh víeân tónh ñoù íaø theo
doõí soá íöôïng caùc ñoáí töôïng ñang toàn taïí. Ví duï:
class Cou*te" 3
0u$lici
Gh*ông 12. $ôù= 3a' .oái t*ôïng #Gla,, 8 hbfect% 26
static i*t cou*tN
Cou*te"?@ 3 cou*tN 4
ŒCou*te"?@ 3 cou*t--N 4
4N
i*t Cou*te"iicou*tN
void 2?@N
i*t #ai*?void@
3
Cou*te" oBN
cout KK tO$bects i* e7iste*cei tN
cout KK Cou*te"iicou*t KK tl*tN
Cou*te" o2N
cout KK tO$bects i* e7iste*cei tN
cout KK Cou*te"iicou*t KK tl*tN
2?@N
cout KK tO$bects i* e7iste*cei tN
cout KK Cou*te"iicou*t KK tl*tN
"etu"* UN
4
void 2?@
3
Cou*te" te#0N
cout KK tO$bects i* e7iste*cei tN
cout KK Cou*te"iicou*t KK tl*tN
€€ te#0 is dest"o6ed !he* 2?@ "etu"*s
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
O$bects i* e7iste*cei B
O$bects i* e7iste*cei 2
O$bects i* e7iste*cei 9
O$bects i* e7iste*cei 2
Bíeán cou*t seõ taêng khí moät ñoáí töôïng ñöôïc taïo, vaø
gíaûm khí moät ñoáí töôïng bò huûy boû. Theo caùch naøy, ta coù
theá theo doõí ñöôïc caùc ñoáí töôïng híeän taïí cuûa moät íôùp.
1.93.2. Ha$/ tha$nh 1ieDn tKnh
26& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Haøm thaønh víeân cuõng coù theá khaí baùo íaø tónh, coù
moät soá haïn cheá khí söû duïng haøm thaønh víeân tónh. Noù chæ
coù theá truy xuaát tröïc tíeáp ñeán caùc thaønh víeân tónh cuûa
íôùp. ÖUng duïng chính cuûa haøm thaønh víeân tónh íaø xöû íyù
caùc bíeán thaønh víeân tónh tröôùc khí caùc ñoáí töôïng ñöôïc taïo.
Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class static_t60e 3
static i*t iN
0u$lici
static void i*it?i*t 7@ 3i c 7N4
void sho!?@ 3cout KK iN4
4N
i*t static_t60eiiiN €€ de2i*e i
i*t #ai*?@
3
€€ i*it static data $e2o"e o$bect c"eatio*
static_t60eiii*it?BUU@N
static_t60e 7N
7%sho!?@N €€ dis0la6s BUU
"etu"* UN
4
1.#+. 0=Z @>UB XBGI S>RO IDT P>U =OT^ IDT I=DdS
=ZQG@n
Theo quy íuaät chung, caáu töû cuûa moät ñoáí töôïng seõ
ñöôïc goïí khí moät ñoáí töôïng ñöôïc taïo vaø moät huûy töû cuûa
ñoáí töôïng thöïc híeän khí moät ñoáí töôïng bò huûy boû.
Chính xaùc, moät haøm caáu töû cuïc boä seõ ñöôïc thöïc híeän
khí xuaát híeän caâu íeänh khaí baùo. Haøm huûy töû cuûa ñoáí
töôïng cuïc boä seõ ñöôïc thöïc thí theo traät töï ngöôïc íaïí cuûa
haøm caáu töû. Noáí töôïng toaøn cuïc thöïc thí caáu töû tröôùc khí
Gh*ông 12. $ôù= 3a' .oái t*ôïng #Gla,, 8 hbfect% 264
thöïc thí haøm #ai*?@. Caáu töû toaøn cuïc thöïc híeän theo thöù töï
khaí baùo cuûa noù beân trong moät ;ile. Huûy töû seõ thöïc híeän
theo thöù töï ngöôïc íaïí sau haøm #ai*?@ keát thuùc. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class #6class 3
0u$lici
i*t !hoN
#6class?i*t id@N
Œ#6class?@N
4 glo$_o$B?B@X glo$_o$2?2@N
#6classii#6class?i*t id@
3
cout KK tI*itiali8i*g t KK id KK tl*tN
!ho c idN
4
#6classiiŒ#6class?@
3
cout KK tCest"ucti*g t KK !ho KK tl*tN
4
i*t #ai*?@
3
#6class local_o$B?9@N
cout KK tThis !ill *ot $e 2i"st li*e dis0la6ed%l*tN
#6class local_o$2?Y@N
"etu"* UN
4
Keát quaû híeán thò treân maøn hình:
I*itiali8i*g B
I*itiali8i*g 2
I*itiali8i*g 9
This !ill *ot $e 2i"st li*e dis0la6ed%
I*itiali8i*g Y
Cest"ucti*g Y
Cest"ucti*g 9
Cest"ucti*g 2
26+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Cest"ucti*g B
Chuù yù, tuøy theo trình bíeân dòch maø ta coù theá thaáy
hoaëc khoâng haí doøng cuoáí cuøng.
1.#4. TB>W@ IDT H=>C@ AZ>TZ H=>dX PZ
Nhö ñaõ ñeà caäp toaùn töû ii ííeân keát teân íôùp vôùí caùc
thaønh víeân ñeá thoâng baùo cho trình bíeân dòch bíeát thaønh
víeân ñoù thuoäc íôùp naøo. Tuy nhíeân toaùn töû phaân gíaûí
phaïm ví coøn coù caùch söû duïng khaùc ñoù íaø cho pheùp truy
caäp ñeán teân trong vuøng maø aán daáu bôûí moät khaí baùo cuïc
boä coù cuøng teân. Ví duï xeùt ñoaïn chöông trình sau:
i*t iN €€ glo$al i
void 2?@
3
i*t iN €€ local i
i c BUN €€ uses local i
%
%
%
4
Caâu íeänh i c BU tham chíeáu ñeán bíeán cuïc boä i, tuy
nhíeânn haøm 2?@ coù theá truy caäp ñeán bíeán i toaøn cuïc baèng
caùch chæ tröôùc i moät toaùn töû ii, ví duï:
i*t iN €€ glo$al i
void 2?@
3
i*t iN €€ local i
iii c BUN €€ *o! "e2e"s to glo$al i
%
%
%
4
1.##. LLWH FB?@A @=>O
Gh*ông 12. $ôù= 3a' .oái t*ôïng #Gla,, 8 hbfect% 267
Ta coù theá khaí baùo moät íôùp trong moät íôùp, ñíeàu naøy
seõ taïo ra íôùp íoâng nhau. Tuy nhíeân trong thöïc teá ít khí ta söû
duïng tình huoáng naøy.
1.1//. LLWH SOdS VBG
Ta coù theá ñònh nghóa moät íôùp beân trong haøm. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void 2?@N
i*t #ai*?@
3
2?@N
€€ #6class *ot 5*o!* he"e
"etu"* UN
4
void 2?@
3
class #6class 3
i*t iN
0u$lici
void 0ut_i?i*t *@ 3 ic*N 4
i*t get_i?@ 3 "etu"* iN 4
4 o$N
o$%0ut_i?BU@N
cout KK o$%get_i?@N
4
Khí moät íôùp ñònh nghóa beân trong haøm, noù chæ ñöôïc
bíeát beân trong haøm ñoù. Coù moät vaøí haïn cheá khí söû duïng
íôùp cuïc boä. Caùc haøm thaønh víeân cuûa íôùp cuïc boä phaûí
ñònh nghóa beân trong khaí baùo íôùp; íôùp cuïc boä khoâng ñöôïc
söû duïng hoaëc truy caäp ñeán caùc bíeán cuïc boä cuûa haøm maø
coù khaí baùo íôùp cuïc boä (ngoaïí tröø íôùp cuïc boä coù bíeán
tónh); khoâng ñònh nghóa bíeán tónh trong íôùp cuïc boä.
1.1/1. GLTZ XBGI YBRZ IDLd@A YQR@ =>UX
26- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Noáí töôïng ñöôïc gôûí ñeán haøm gíoáng nhö nhöõng kíeáu
döõ ííeäu khaùc. Noáí töôïng gôûí ñeán haøm hoaït ñoäng theo cô
cheá truyeàn tham soá theo trò (b? 3alue). Níeàu naøy coù nghóa
íaø sao cheùp moät phíeân baûn cuûa ñoáí töôïng gôûí ñeán haøm.
Caâu hoûí ñaët ra íaø coù hay khoâng phíeân baûn sao cheùp naøy
thöïc híeän caáu töû vaø huûy töû hay? Xeùt ví duï sau:
€€ Passi*g a* o$bect to a 2u*ctio*%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class #6class 3
i*t iN
0u$lici
#6class?i*t *@N
Œ#6class?@N
void set_i?i*t *@ 3 ic*N 4
i*t get_i?@ 3 "etu"* iN 4
4N
#6classii#6class?i*t *@
3
i c *N
cout KK tCo*st"ucti*g t KK i KK tl*tN
4
#6classiiŒ#6class?@
3
cout KK tCest"o6i*g t KK i KK tl*tN
4
void 2?#6class o$@N
i*t #ai*?@
3
#6class o?B@N
2?o@N
cout KK tThis is i i* #ai*i tN
cout KK o%get_i?@ KK tl*tN
"etu"* UN
4
void 2?#6class o$@
Gh*ông 12. $ôù= 3a' .oái t*ôïng #Gla,, 8 hbfect% 269
3
o$%set_i?2@N
cout KK tThis is local ii t KK o$%get_i?@N
cout KK tl*tN
4
Keát quaû treân maøn hình nhö sau:
Co*st"ucti*g B
This is local ii 2
Cest"o6i*g 2
This is i i* #ai*i B
Cest"o6i*g B
Chuù yù, coù haí íôøí goïí haøm huûy töû nhöng chæ coù moät
haøm caáu töû ñöôïc thöïc thí. Töø keát quaû treân maøn hình ta
thaáy caáu töû khoâng thöïc híeän khí sao cheùp o ñeá gôûí ñeán
o$. Neáu caáu töû ñöôïc goïí khí gôûí ñeán haøm, seõ thöïc thí caùc
haønh ñoäng khôûí taïo, ñíeàu naøy íaøm thay ñoáí traïng thaùí cuûa
ñoáí töôïng. Tuy nhíeân ñoáí vôùí huûy töû vaãn thöïc híeän bình
thöôøng, ñíeàu naøy cuõng gíoáng nhö íaø gíaûí phoùng caùc bíeán
cuïc boä tröôùc khí thoaùt khoûí haøm.
1.1/2. TJ>T PQ? XBGI YBRZ IDLd@A
Moät haøm coù theá traû veà moät ñoáí töôïng. Ví duï:
€€ Retu"*i*g o$bects 2"o# a 2u*ctio*%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class #6class 3
i*t iN
0u$lici
void set_i?i*t *@ 3 ic*N 4
i*t get_i?@ 3 "etu"* iN 4
4N
#6class 2?@N €€ "etu"* o$bect o2 t60e #6class
i*t #ai*?@
3
216 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
#6class oN
o c 2?@N
cout KK o%get_i?@ KK tl*tN
"etu"* UN
4
#6class 2?@
3
#6class 7N
7%set_i?B@N
"etu"* 7N
4
Khí moät ñoáí töôïng traû veà bôûí moät haøm, moät ñoáí
töôïng taïm thôøí ñöôïc taïo ra ñeá íöu tröõ gíaù trò traû veà. Sau khí
gíaù trò ñöôïc traû veà, ñoáí töôïng seõ töï ñoäng huûy boû. Vaán
ñeà ôû ñaây íaø huûy boû ñoáí töôïng naøy coù theá phaùt sính ra
moät soá taùc ñoäng khoâng mong muoán. Ví duï neáu ñoáí töôïng
ñöôïc traû veà bôûí haøm coù moät huûy töû maø gíaûí phoùng
vuøng nhôù ñaõ caáp phaùt ñoäng, boä nhôù naøy seõ bò gíaûí
phoùng ngay caû khí ñoáí töôïng nhaän gíaù trò traû veà vaãn ñang
söû duïng chuùng. Neá khaéc phuïc ñíeàu naøy, ta seõ söû duïng
toaùn töû taûí boäí ôû nhöõng phaàn sau.
1.1/3. G>W@ XBGI YBRZ IDLd@A
Gíaû söû coù haí ñoáí töôïng cuøng kíeáu, ta coù theá gaùn
ñoáí töôïng naøy cho ñoáí töôïng khaùc. Khí ñoù döõ ííeäu beân
phaûí pheùp gaùn seõ sao cheùp ñeán döõ ííeäu beân traùí pheùp
gaùn. Ví duï:
€€ Assig*i*g o$bects%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class #6class 3
i*t iN
0u$lici
void set_i?i*t *@ 3 ic*N 4
Gh*ông 12. $ôù= 3a' .oái t*ôïng #Gla,, 8 hbfect% 211
i*t get_i?@ 3 "etu"* iN 4
4N
i*t #ai*?@
3
#6class o$BX o$2N
o$B%set_i?ZZ@N
o$2 c o$BN €€ assig* data 2"o# o$B to o$2
cout KK tThis is o$2ws ii t KK o$2%get_i?@N
"etu"* UN
4
Chöông trình treân seõ híeán thò gíaù trò ZZ. Ngaàm ñònh taát
caû döõ ííeäu ñöôïc sao cheùp töø ñoáí töôïng naøy ñeán ñoáí töôïng
khaùc baèng caùch sao cheùp töøng bit moät. Tuy nhíeân ta coù
theá taûí boäí toaùn töû gaùn ñeá thöïc híeän coâng víeäc naøy.
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 21
C=DL@A 13. $>T@A1 SB@ IJBT1 I=>X
S=ZQRO P>U IB>W@ IDT S>RH H=>WI VBG
@=LW YBG@A
1.1/%. $>T@A S>WS YBRZ IDLd@A
Trong C++ cho pheùp ñònh nghóa maûng caùc ñoáí töôïng.
Cuù phaùp khaí baùo vaø söû duïng maûng caùc ñoáí töôïng hoaøn
toaøn gíoáng vôùí kíeáu döõ ííeäu khaùc. Ví duï chöông trình sau söû
duïng maûng 3 ñoáí töôïng:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class cl 3
i*t iN
0u$lici
void set_i?i*t b@ 3 icbN 4
i*t get_i?@ 3 "etu"* iN 4
4N
i*t #ai*?@
3
cl o$g9hN
i*t iN
2o"?icUN iK9N i@ o$gih%set_i?iB@N
2o"?icUN iK9N i@
cout KK o$gih%get_i?@ KK tl*tN
"etu"* UN
4
Chöông trình treân seõ híeán thò caùc soá B 2 9 íeân maøn
hình.
Neáu trong íôùp coù ñònh nghóa moät caáu töû coù tham soá,
ta coù theá khôûí taïo moãí ñoáí töôïng trong maûng baèng caùch
chæ ra danh saùch caùc gíaù trò khôûí taïo gíoáng nhö khôûí taïo
21& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
maûng caùc kíeáu döõ ííeäu khaùc. Tuy nhíeân daïng chính xaùc
cuûa danh saùch gíaù trò khôûí taïo phuï thuoäc vaøo soá íöôïng
tham soá trong caáu töû. Noáí vôùí caáu töû coù moät tham soá,
khôûí taïo gíoáng nhö maûng thoâng thöôøng. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class cl 3
i*t iN
0u$lici
cl?i*t b@ 3 icbN 4 €€ co*st"ucto"
i*t get_i?@ 3 "etu"* iN 4
4N
i*t #ai*?@
3
cl o$g9h c 3BX 2X 94N €€ i*itiali8e"s
i*t iN
2o"?icUN iK9N i@
cout KK o$gih%get_i?@ KK tl*tN
"etu"* UN
4
Chöông trình treân seõ híeán thò caùc soá B 2 9 ra maøn hình.
Cuù phaùp khôûí taïo ôû ví duï treân íaø daïng víeát taét, víeát ñaày
ñuû thì caâu íeänh khôûí gaùn gíaù trò treân íaø:
cl o$g9h c 3 cl?B@X cl?2@X cl?9@ 4N
Trong tröôøng hôïp caáu töû coù haí tham soá trôû íeân, ta
phaûí söû duïng cuù phaùp khôûí gaùn gíaù trò ñaày ñuû. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class cl 3
i*t hN
i*t iN
0u$lici
€€co*st"ucto" !ith 2 0a"a#ete"s
cl?i*t bX i*t 5@ 3 hcbN ic5N 4
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 214
i*t get_i?@ 3"etu"* iN4
i*t get_h?@ 3"etu"* hN4
4N
i*t #ai*?@
3
cl o$g9h c 3
cl?BX 2@X €€ i*itiali8e
cl?9X Y@X
cl?VX W@
4N
i*t iN
2o"?icUN iK9N i@ 3
cout KK o$gih%get_h?@N
cout KK tX tN
cout KK o$gih%get_i?@ KK tl*tN
4
"etu"* UN
4
Chuù yù: daïng víeát ngaén khoâng söû duïng ñöôïc trong tình
huoáng treân.
1.1>#.1. &aïo /oät /aûng coù khôûi taïo 1a$ khoDng
Tröôøng hôïp ñaëc bíeät neáu ta muoán taïo moät maûng vöøa
khôûí gaùn gíaù trò vaø khoâng khôûí gaùn cho moät maûng ñoáí
töôïng. Xeùt íôùp sau:
class cl 3
i*t iN
0u$lici
cl?i*t b@ 3 icbN 4
i*t get_i?@ 3 "etu"* iN 4
4N
OU ñaây haøm caáu töû caàn moät tham soá, ñíeàu naøy coù
nghóa íaø taát caû caùc maûng khí khaí baùo caàn phaûí khôûí gaùn
gíaù trò. Khí ñoù caâu íeänh:
cl agZhN €€ e""o"X co*st"ucto" "eAui"es i*itiali8e"s
21+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Seõ baùo íoãí bôûí vì cl chæ coù moät caáu töû coù tham soá,
ñeá gíaûí quyeát vaán ñeà naøy ta khaí baùo theâm moät caáu töû
khoâng tham soá. Ví duï:
class cl 3
i*t iN
0u$lici
cl?@ 3 icUN 4 €€ called 2o" *o*-i*itiali8ed a""a6s
cl?i*t b@ 3 icbN 4 €€ called 2o" i*itiali8ed a""a6s
i*t get_i?@ 3 "etu"* iN 4
4N
Khí ñoù caû haí caâu íeänh sau íaø hôïp íeä:
cl aBg9h c 39X VX W4N €€ i*itiali8ed
cl a2g9YhN €€ u*i*itiali8ed
1.1/,. CB@ IJBT YBRZ IDLd@A
Trong C++ cho pheùp con troû ñeán ñoáí töôïng. Khí ñoù ñeá
truy caäp ñeán caùc thaønh víeân cuûa íôùp ta söû duïng toaùn töû
muõí teân (-L) thay cho toaùn töû daáu chaám (%). Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class cl 3
i*t iN
0u$lici
cl?i*t b@ 3 icbN 4
i*t get_i?@ 3 "etu"* iN 4
4N
i*t #ai*?@
3
cl o$?RR@X ƒ0N
0 c fo$N €€ get add"ess o2 o$
cout KK 0-Lget_i?@N €€ use -L to call get_i?@
"etu"* UN
4
Nhö ta ñaõ bíeát, khí moät con troû taêng noù seõ troû ñeán
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 217
phaàn töû keá tíeáp. Toáng quaùt, pheùp toaùn con troû soá hoïc
ííeân quan ñeán kíeáu döõ ííeäu cô sôû. Ouy íuaät naøy cuõng ñuùng
cho ñoáí töôïng. Ví duï, chöông trình sau mính hoïa con troû truy
caäp ñeán taát caû caùc phaàn töû cuûa maûng sau khí ñaõ gaùn
phaàn töû ñaàu tíeân:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class cl 3
i*t iN
0u$lici
cl?@ 3 icUN 4
cl?i*t b@ 3 icbN 4
i*t get_i?@ 3 "etu"* iN 4
4N
i*t #ai*?@
3
cl o$g9h c 3BX 2X 94N
cl ƒ0N
i*t iN
0 c o$N €€ get sta"t o2 a""a6
2o"?icUN iK9N i@ 3
cout KK 0-Lget_i?@ KK tl*tN
0N €€ 0oi*t to *e7t o$bect
4
"etu"* UN
4
Ta coù theá gaùn thaønh víeân =ublic cuûa moät ñoáí töôïng
ñeán con troû vaø sau ñoù truy caäp ñeán thaønh víeân naøy baèng
caùch söû duïng con troû. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class cl 3
0u$lici
i*t iN
cl?i*t b@ 3 icbN 4
21- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4N
i*t #ai*?@
3
cl o$?B@N
i*t ƒ0N
0 c fo$%iN €€ get add"ess o2 o$%i
cout KK ƒ0N €€ access o$%i via 0
"etu"* UN
4
1.1>2.1. Kie*/ tra kie*u trong con troû (\\
Ta chæ coù theá gaùn con troû ñeán con troû khaùc chæ khí
noù cuøng kíeáu. Ví duï:
*t ƒ0iN
loat ƒ02N
Trong C++, caâu íeänh sau íaø khoâng hôïp íeä
i c 02N €€ e""o" -- t60e #is#atch
1.1>2.2. (on troû thi,
Khí moät haøm thaønh víeân ñöôïc goïí, noù töï ñoäng gôûí
moät tham soá aán íaø moät con troû ñeán ñoáí töôïng goïí (ñoáí
töôïng maø chöùa haøm ñöôïc goïí). Con troû naøy goïí íaø con troû
this. Neá híeáu this, xeùt ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class 0!" 3
dou$le $N
i*t eN
dou$le valN
0u$lici
0!"?dou$le $aseX i*t e70@N
dou$le get_0!"?@ 3 "etu"* valN 4
4N
0!"ii0!"?dou$le $aseX i*t e70@
3
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 219
$ c $aseN
e c e70N
val c BN
i2?e70ccU@ "etu"*N
2o"? N e70LUN e70--@ val c val ƒ $N
4
i*t #ai*?@
3
0!" 7?Y%UX 2@X 6?2%VX B@X 8?V%TX U@N
cout KK 7%get_0!"?@ KK t tN
cout KK 6%get_0!"?@ KK t tN
cout KK 8%get_0!"?@ KK tl*tN
"etu"* UN
4
Beân trong haøm thaønh víeân, thaønh víeân cuûa íôùp coù
theá truy caäp tröïc tíeáp maø khoâng caàn chæ ra ñoáí töôïng vaø
íôùp. Trong haøm haøm 0!"?@ caâu íeänh:
$ c $aseN
Noáí töôïng keát hôïp vôùí $ seõ ñöôïc gaùn gíaù trò chöùa
trong $ase, tuy nhíeân ta cuõng coù theá víeát íaïí döôùí daïng sau:
this-L$ c $aseN
Con troû this troû ñeán ñoáí töôïng maø goïí 0!"?@, ví duï
0!"?@ ñaõ ñöôïc goïí bôûí ñoáí töôïng 7, khí ñoù this cuõng troû
ñeán 7. Víeát caâu íeänh maø khoâng coù this thöïc ra íaø caùch
víeát taét. Sau ñaây íaø haøm 0!"?@ ñöôïc víeát ñaày ñuû töø this.
0!"ii0!"?dou$le $aseX i*t e70@
3
this-L$ c $aseN
this-Le c e70N
this-Lval c BN
i2?e70ccU@ "etu"*N
2o"? N e70LUN e70--@
this-Lval c this-Lval ƒ this-L$N
4
226 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Coù haí vaán ñeà caàn íöu yù: haøm thaân thíeän khoâng
phaûí íaø thaønh víeân cuûa íôùp do ñoù ta khoâng söû duïng con
troû this cho haøm thaønh víeân; haøm thaønh víeân tónh cuõng
khoâng ñöôïc söû duïng con troû this.
1.1>2.3. (on troû +eán kie*u ;aPn Muaát
Toáng quaùt con troû khoâng theá troû ñeán ñoáí töôïng khaùc
kíeáu. Tuy nhíeân coù moät ngoaïí íeä trong tình huoáng naøy ñoù
íaø con troû íôùp cô sôû coù theá troû ñeán ñoáí töôïng cuûa íôùp
daãn xuaát. Gíaû söû coù haí íôùp goïí íaø B vaø C, C ñöôïc daãn
xuaát töø íôùp B, trong tình huoáng naøy con troû kíeáu B ƒ coù
theá troû ñeán moät ñoáí töôïng coù kíeáu C.
Maëc daàu con troû íôùp cô sôû troû ñeán íôùp daãn xuaát
nhöng ngöôïc íaïí thì khoâng ñöôïc. Con troû kíeáu C khoâng theá
troû ñeán ñoáí töôïng kíeáu B. Hôn nöõa ta chæ coù theá truy caäp
vaøo nhöõng thaønh víeân ñaõ ñöôïc keá thöøa töø íôùp cô sôû (Tuy
nhíeân ta coù theá eùp con troû kíeáu cô sôû thaønh con troû kíeáu
daãn xuaát vaø truy caäp toaøn boä caùc thaønh víeân trong íôùp cô
sôû). Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
i*t iN
0u$lici
void set_i?i*t *u#@ 3 ic*u#N 4
i*t get_i?@ 3 "etu"* iN 4
4N
class de"ivedi 0u$lic $ase 3
i*t bN
0u$lici
void set_b?i*t *u#@ 3 bc*u#N 4
i*t get_b?@ 3 "etu"* bN 4
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 221
4N
i*t #ai*?@
3
$ase ƒ$0N
de"ived dN
$0 c fdN €€ $ase 0oi*te" 0oi*ts to de"ived o$bect
€€ access de"ived o$bect usi*g $ase 0oi*te"
$0-Lset_i?BU@N
cout KK $0-Lget_i?@ KK t tN
€ƒ The 2ollo!i*g !o*wt !o"5% ’ou ca*wt access ele#e*t
o2 a de"ived class usi*g a $ase class 0oi*te"%
$0-Lset_b?RR@N €€ e""o"
cout KK $0-Lget_b?@N €€ e""o"
ƒ€
"etu"* UN
4
Neá truy caäp ñöôïc caùc thaønh víeân cuûa íôùp daãn xuaát
töø con troû íôùp cô sôû, ta söû duïng caâu íeänh:
€€ access *o! allo!ed $ecause o2 cast
??de"ived ƒ@$0@-Lset_b?RR@N
cout KK ??de"ived ƒ@$0@-Lget_b?@N
Chuù yù raèng pheùp toaùn soá hoïc treân con troû coù ííeân
quan ñeán kíeáu döõ ííeäu cô sôû. Do ñoù con troû kíeáu cô sôû troû
ñeán kíeáu daãn xuaát, taêng/gíaûm con troû khoâng troû ñeán ñoáí
töôïng tíeáp theo cuûa íôùp daãn xuaát thay vaøo ñoù noù seõ troû
ñeán nhöõng vò trí maø noù cho íaø cuûa íôùp cô sôû. Níeàu naøy
taát nhíeân seõ cho keát quaû khoâng chính xaùc. Ví duï:
€€ This 0"og"a# co*tai*s a* e""o"%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
i*t iN
0u$lici
void set_i?i*t *u#@ 3 ic*u#N 4
i*t get_i?@ 3 "etu"* iN 4
222 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4N
class de"ivedi 0u$lic $ase 3
i*t bN
0u$lici
void set_b?i*t *u#@ 3bc*u#N4
i*t get_b?@ 3"etu"* bN4
4N
i*t #ai*?@
3
$ase ƒ$0N
de"ived dg2hN
$0 c dN
dgUh%set_i?B@N
dgBh%set_i?2@N
cout KK $0-Lget_i?@ KK t tN
$0N €€ "elative to $aseX *ot de"ived
cout KK $0-Lget_i?@N €€ ga"$age value dis0la6ed
"etu"* UN
4
1.1>2.#. (on troû +eán tha$nh 1ieDn cuûa !ôù<
C++ cho pheùp sính ra moät con troû ñaëc bíeät troû ñeán
thaønh víeân cuûa íôùp khoâng caàn theá híeän thaønh víeân trong
íôùp ñoù. Con troû ñeán thaønh víeân khoâng gíoáng con troû
thoâng thöôøng trong C++, noù chæ cung caáp moät ñòa chæ
o;;,et cuûa thaønh víeân trong íôùp ñoù. Con troû ñeán caùc thaønh
víeân cuûa íôùp khoâng thöïc söï íaø moät con troû, do ñoù caùc
toaùn töû chaám (%) vaø muõí teân (-L) khoâng theá aùp duïng. Neá
truy caäp ñeán caùc thaønh víeân cuûa íôùp ta söû duïng toaùn töû
con troû thaønh víeân %ƒ vaø -Lƒ. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class cl 3
0u$lici
cl?i*t i@ 3 valciN 4
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 22
i*t valN
i*t dou$le_val?@ 3 "etu"* valvalN 4
4N
i*t #ai*?@
3
i*t cliiƒdataN €€ data #e#$e" 0oi*te"
i*t ?cliiƒ2u*c@?@N €€ 2u*ctio* #e#$e" 0oi*te"
cl o$B?B@X o$2?2@N €€ c"eate o$bects
data c fcliivalN €€ get o22set o2 val
2u*c c fcliidou$le_valN €€ get o22set o2 dou$le_val?@
cout KK tHe"e a"e valuesi tN
cout KK o$B%ƒdata KK t t KK o$2%ƒdata KK tl*tN
cout KK tHe"e the6 a"e dou$ledi tN
cout KK ?o$B%ƒ2u*c@?@ KK t tN
cout KK ?o$2%ƒ2u*c@?@ KK tl*tN
"etu"* UN
4
Trong haøm #ai*?@, chöông trình taïo ra haí con troû thaønh
víeân data vaø 2u*c (chuù yù caùch khaí baùo moãí con troû). Khí
khaí baùo con troû thaønh víeân, ta phaûí chæ ra íôùp vaø toaùn töû
phaân gíaûí phaïm ví. Chöông trình cuõng taïo ra haí ñoáí töôïng o$B
vaø o$2. Nhö ñaõ mính hoïa, con troû thaønh víeân cuõng coù theá
troû ñeán döõ ííeäu hoaëc haøm. Tíeáp theo, chöông trình seõ nhaän
ñòa chæ cuûa val vaø dou$le_val. Nòa chæ ôû ñaây chæ íaø ñòa
chæ o;;,et cuûa caùc thaønh víeân trong íôùp ñoù. Tíeáp theo híeán
thò gíaù trò thaønh víeân val thoâng qua con troû data vaø thöïc
híeän haøm dou$le_val?@ thoâng qua con troû 2u*c.
Khí truy caäp vaøo thaønh víeân cuûa moät ñoáí töôïng baèng
ñoáí töôïng ta söû duïng toaùn töû %ƒ, tuy nhíeân khí truy caäp
thaønh víeân cuûa ñoáí töôïng baèng con troû ñoáí töôïng ta söû
duïng toaùn töû -Lƒ. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
22& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
class cl 3
0u$lici
cl?i*t i@ 3 valciN 4
i*t valN
i*t dou$le_val?@ 3 "etu"* valvalN 4
4N
i*t #ai*?@
3
i*t cliiƒdataN €€ data #e#$e" 0oi*te"
i*t ?cliiƒ2u*c@?@N €€ 2u*ctio* #e#$e" 0oi*te"
cl o$B?B@X o$2?2@N €€ c"eate o$bects
cl ƒ0BX ƒ02N
0B c fo$BN €€ access o$bects th"ough a 0oi*te"
02 c fo$2N
data c fcliivalN €€ get o22set o2 val
2u*c c fcliidou$le_valN €€ get o22set o2 dou$le_val?@
cout KK tHe"e a"e valuesi tN
cout KK 0B-Lƒdata KK t t KK 02-Lƒdata KK tl*tN
cout KK tHe"e the6 a"e dou$ledi tN
cout KK ?0B-Lƒ2u*c@?@ KK t tN
cout KK ?02-Lƒ2u*c@?@ KK tl*tN
"etu"* UN
4
Nhôù raèng, troû ñeán thaønh víeân cuûa moät íôùp khaùc
vôùí troû ñeán theá híeän cuûa thaønh víeân trong moät íôùp. Xeùt
ñoaïn chöông trình sau:
i*t cliiƒdN
i*t ƒ0N
cl oN
0 c fo%val €€ this is add"ess o2 a s0eci2ic val
d c fcliival €€ this is o22set o2 ge*e"ic val
Khí ñoù 0 íaø ñòa chæ thaät söï cuûa o%val trong boä nhôù,
coøn d íaø ñòa chæ o;;,et trong cuûa val trong ñoáí töôïng.
Toáng quaùt, toaùn töû troû ñeán thaønh víeân chæ aùp duïng
trong moät vaøí tình huoáng ñaëc bíeät. Noù khoâng phaûí íaø caùch
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 224
söû duïng tíeâu bíeáu trong íaäp trình híeän taïí.
1.1/-. T=>X S=ZQRO
C++ chöùa moät ñaëc tröng ííeân quan ñeán con troû goïí íaø
tham chíeáu. Veà baûn chaát tham chíeáu íaø moät con troû aán.
Coù ba caùch söû duïng tham chíeáu: 1. Tham soá cuûa haøm; 2.
Gíaù trò traû veà cuûa moät haøm; 3. Tham chíeáu ñoäc íaäp.
1.1>3.1. &ha/ chieáu +eán tha/ ,oá
Coù haí caùch gôûí tham soá ñeán haøm ñoù íaø goïí theo gíaù
trò vaø goïí theo tham chíeáu. Goïí theo gíaù trò íaø sao cheùp tham
soá roàí gôûí ñeán haøm, goïí theo tham chíeáu íaø gôûí ñòa cuûa
tham soá ñeán haøm. Ngaàm ñònh C++ goïí theo gíaù trò, tuy
nhíeân cuõng coù haí caùch ñeá goïí theo tham chíeáu. Naàu tíeân
ta coù theá gôûí moät con troû ñeán tham soá. Thöù haí ta söû duïng
tham chíeáu tham soá. Neá híeáu roõ hôn ta baét ñaàu vôùí ví duï
goïí baèng tham chíeáu baèng caùch söû duïng con troû:
€€ Ma*uall6 c"eate a call-$6-"e2e"e*ce usi*g a 0oi*te"%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void *eg?i*t ƒi@N
i*t #ai*?@
3
i*t 7N
7 c BUN
cout KK 7 KK t *egated is tN
*eg?f7@N
cout KK 7 KK tl*tN
"etu"* UN
4
void *eg?i*t ƒi@
3
ƒi c -ƒiN
4
22+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Trong chöông trình treân, *eg?@ seõ nhaän tham soá íaø moät
con troû soá nguyeân, do ñoù *eg?@ phaûí ñöôïc goïí moät caùch roõ
raøng vôùí ñòa chæ cuûa 7. Vaø toaùn töû ƒ phaûí ñöôïc söû duïng
ñeá truy caäp ñeán bíeán ñöôïc troû bôûí i.
Neá taïo ra moät tham chíeáu tham soá, ta ñaët tröôùc tham
soá moät daáu f. Ví duï khaí baùo haøm *eg?@ baèng tham chíeáu
tham soá nhö sau:
void *eg?i*t fi@N
Khí ñoù i chính íaø teân khaùc cuûa bíeán maø ñöôïc goïí bôûí
haøm *eg?@. Moïí thao taùc treân i thöïc teá íaø thao taùc treân
bíeán ñöôïc goïí bôûí haøm *eg?@. Döôùí thuaät ngöõ kó thuaät, i
íaø moät con troû aán töï ñoäng tham chíeáu ñeán tham soá ñöôïc
söû duïng trong caùc íôøí goïí haøm *eg?@. Bíeán i ñaõ ñöôïc taïo íaø
tham chíeáu, do ñoù khoâng caàn thíeát phaûí aùp duïng toaùn töû
ƒ. Thay vaøo ñoù moãí íaàn i ñöôïc söû duïng noù seõ tham chíeáu
aán ñeán tham soá vaø moïí thay ñoáí treân i ñeàu taùc ñoäng ñeán
tham soá. Hôn nöõa, khí goïí haøm *eg?@ khoâng caàn thíeát phaûí
chæ tröôùc teân tham soá toaùn töû f, trình bíeân dòch seõ töï
ñoäng thöïc híeän víeäc naøy. Ví duï sau íaø phíeân baûn khaùc cuûa
ví duï treân:
€€ ase a "e2e"e*ce 0a"a#ete"%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void *eg?i*t fi@N €€ i *o! a "e2e"e*ce
i*t #ai*?@
3
i*t 7N
7 c BUN
cout KK 7 KK t *egated is tN
*eg?7@N €€ *o lo*ge" *eed the f o0e"ato"
cout KK 7 KK tl*tN
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 227
"etu"* UN
4
void *eg?i*t fi@
3
i c -iN €€ i is *o! a "e2e"e*ceX do*wt *eed ƒ
4
Khí taïo ra moät tham chíeáu tham soá, noù töï ñoäng tham
chíeáu ñeán (troû ñeán) tham soá ñöôïc söû duïng ñeá goïí haøm. Do
ñoù trong chöông trình treân, caâu íeänh ic-i thöïc söï taùc ñoäng
íeân 7 khoâng phaûí íaø baûn sao cuûa 7. Vì vaäy khoâng caàn phaûí
aùp duïng toaùn töû f ñeán tham soá. Beân trong haøm, tham
chíeáu tham soá ñöôïc söû duïng tröïc tíeáp maø khoâng caàn phaûí
söû duïng toaùn töû ƒ. Toáng quaùt, khí gaùn moät gíaù trò ñeán
tham chíeáu, ta thöïc söï gaùn gíaù trò ñoù ñeán bíeán maø tham
soá troû ñeán.
Beân trong haøm ta khoâng theá thay ñoáí nhöõng gì maø
tham chíeáu troû ñeán. Cuï theá caâu íeänh i beân trong haøm
chæ taêng gíaù trò cuûa bíeán ñöôïc söû duïng ñeá goïí haøm *eg?@
íeân chöù khoâng troû ñeán phaàn töû tíeáp theo. Ví duï: xaây döïng
haøm s!a0?@ ñeá traùo ñoáí haí bíeán:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void s!a0?i*t fiX i*t fb@N
i*t #ai*?@
3
i*t aX $X cX dN
a c BN
$ c 2N
c c 9N
d c YN
cout KK ta a*d $i t KK a KK t t KK $ KK tl*tN
s!a0?aX $@N €€ *o f o0e"ato" *eeded
cout KK ta a*d $i t KK a KK t t KK $ KK tl*tN
22- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
cout KK tc a*d di t KK c KK t t KK d KK tl*tN
s!a0?cX d@N
cout KK tc a*d di t KK c KK t t KK d KK tl*tN
"etu"* UN
4
void s!a0?i*t fiX i*t fb@
3
i*t tN
t c iN €€ *o ƒ o0e"ato" *eeded
i c bN
b c tN
4
Keát quaû híeán thò íeân maøn hình nhö sau:
a a*d $i B 2
a a*d $i 2 B
c a*d di 9 Y
c a*d di Y 9
1.1>3.2. %ôûi tha/ chieáu ;eán +oái t'ôïng
Khí moät ñoáí töôïng gôûí ñeán haøm, taïo ra moät baûn sao
cuûa ñoáí töôïng ñoù. Khí haøm keát thuùc, huûy töû cuûa baûn sao
ñoù seõ ñöôïc goïí. Coù moät vaøí tình huoáng ta khoâng muoán
huûy töû thöïc híeän khí keát thuùc haøm, khí ñoù ta gôûí ñoáí
töôïng baèng tham chíeáu. Khí gôûí ñoáí töôïng baèng tham chíeáu,
khoâng taïo ra söï sao cheùp ñoáí töôïng. Vì vaäy seõ khoâng coù
huûy töû naøo thöïc híeän khí keát thuùc haøm. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class cl 3
i*t idN
0u$lici
i*t iN
cl?i*t i@N
Œcl?@N
void *eg?cl fo@ 3 o%i c -o%iN 4 €€ *o te#0o"a"6
c"eated
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 229
4N
cliicl?i*t *u#@
3
cout KK tCo*st"ucti*g t KK *u# KK tl*tN
id c *u#N
4
cliiŒcl?@
3
cout KK tCest"ucti*g t KK id KK tl*tN
4
i*t #ai*?@
3
cl o?B@N
o%i c BUN
o%*eg?o@N
cout KK o%i KK tl*tN
"etu"* UN
4
Keát quaû xuaát híeän nhö sau:
Co*st"ucti*g B
-BU
Cest"ucti*g B
Ta thaáy chæ coù moät íôøí goïí haøm huûy töû. Neáu goïí
haøm theo trò, taïo ra haí ñoáí töôïng trong haøm *eg?@ vaø huûy
töû seõ thöïc híeän haí íaàn khí thoaùt khoûí haøm.
Truy caäp caùc thaøm víeân cuûa íôùp trong haøm *eg?@ chæ
duøng toaùn töû chaám khoâng duøng toaùn töû -L.
Khí gôûí ñeán tham soá baèng tham chíeáu, nhôù raèng moïí
thay ñoáí cuûa ñoáí töôïng beân trong haøm taùc ñoäng ñeán ñoáí
töôïng ñöôïc söû duïng ñeá goïí haøm.
Gôûí nhöõng ñoáí töôïng nhoû baèng tham chíeáu nhanh hôn
íaø gôûí theo gíaù trò. Caùc tham soá thöôøng gôûí ñeán stack.
Thaät vaäy, ñoáí töôïng íôùn seõ maát soá íöôïng ñaùng keá chu kì
26 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
cuûa CPU ñeá ñaáy vaø íaáy ra töø ngaên xeáp.
1.1>3.3. &raû 1eN /oät tha/ chieáu
Moät haøm coù theá traû veà moät tham chíeáu. Níeàu naøy
coù taùc ñoäng cho pheùp haøm ñöôïc söû duïng beân traùí cuûa
pheùp gaùn. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
cha" f"e0lace?i*t i@N €€ "etu"* a "e2e"e*ce
cha" sgRUh c tHello The"etN
i*t #ai*?@
3
"e0lace?V@ c w‹wN €€ assig* ‹ to s0ace a2te" Hello
cout KK sN
"etu"* UN
4
cha" f"e0lace?i*t i@
3
"etu"* sgihN
4
Chöông trình naøy thay theá khoaûng troáng gíöõa haí töø
Hello vaø The"e baèng moät kí töï ‹. Khí ñoù noù híeán thò
Hello‹The"e. Ta xem noù thöïc híeän nhö theá naøo. Naàu tíeân
haøm "e0lace?@ ñöôïc khaí baùo vaø traû veà tham chíeáu ñeán
moät kí töï. Khí víeát maõ haøm "e0lace?@, noù traû veà tham
chíeáu ñeán phaàn töû cuûa s ñöôïc chæ ra bôûí tham soá i. Tham
chíeáu naøy sau ñoù ñöôïc söû duïng trong haøm #ai*?@ ñeá gaùn
baèng kí töï ‹.
Chuù yù cuoáí cuøng ñoù íaø khí traû veà moät tham chíeáu
íaø ñoáí töôïng ñöôïc tham chíeáu khoâng naèm ngoaøí phaïm ví sau
khí keát thuùc haøm.
1.1>3.#. &ha/ chieáu +oäc !aä<
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 21
Ta coù theá khaí baùo tham chíeáu nhö íaø moät bíeán thoâng
thöôøng, thao taùc naøy goïí íaø tham chíeáu ñoäc íaäp. Khí taïo
moät tham chíeáu ñoäc íaäp, ta taïo ra moät teân khaùc cho bíeán
ñoáí töôïng. Taát caû caùc tham chíeáu phaûí ñöôïc khôûí gaùn khí
ñöôïc taïo. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
i*t aN
i*t f"e2 c aN €€ i*de0e*de*t "e2e"e*ce
a c BUN
cout KK a KK t t KK "e2 KK tl*tN
"e2 c BUUN
cout KK a KK t t KK "e2 KK tl*tN
i*t $ c BZN
"e2 c $N €€ this 0uts $ws value i*to a
cout KK a KK t t KK "e2 KK tl*tN
"e2--N €€ this dec"e#e*ts a
€€ it does *ot a22ect !hat "e2 "e2e"s to
cout KK a KK t t KK "e2 KK tl*tN
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
BU BU
BUU BUU
BZ BZ
BR BR
Tham chíeáu ñoäc íaäp ít khí ñöôïc söû duïng trong caùc tình
huoáng íaäp trình bôûí vì cuøng moät ñoáí töôïng coù haí teân khaùc
nhau seõ íaøm cho chöông trình íoän xoän.
1.1>3.2. &ha/ chieáu +eán /oät kie*u ;aPn Muaát
Tham chíeáu moät íôùp cô sôû coù theá ñöôïc söû duïng ñeá
22 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
tham chíeáu ñeán ñoáí töôïng cuûa moät íôùp daãn xuaát. ÖUng
duïng thoâng duïng nhaát trong tröôøng hôïp naøy íaø tham soá
trong haøm. Tham soá tham chíeáu ñeán moät íôùp cô sôû coù theá
nhaän ñöôïc moät ñoáí töôïng cuûa íôùp cô sôû vaø caùc kíeáu ñoáí
töôïng khaùc daãn xuaát töø íôùp cô sôû.
1.1>3.3. Haïn cheá cuûa tha/ chieáu
Coù moät vaøí haïn cheá khí söû duïng tham chíeáu. Ta khoâng
theá tham chíeáu ñeán moät tham chíeáu khaùc. Noùí caùch khaùc,
ta khoâng theá íaáy ñòa chæ cuûa moät tham chíeáu. Khoâng theá
taïo ra maûng caùc tham chíeáu. Khoâng theá taïo ra con troû tham
chíeáu. Khoâng theá tham chíeáu ñeán tröôøng bit.
Bíeán tham chíeáu phaûí ñöôïc khôûí gaùn khí khaí baùo tröø
khí noù íaø thaønh víeân cuûa moät íôùp, tham soá cuûa moät haøm
hoaëc gíaù trò traû veà. Khoâng coù tham chíeáu roãng.
1.1/+. TB>W@ IDT S>RH H=>WI YBG@A
C++ cung caáp haí toaùn töû caáp phaùp boä nhôù ñoäng ñoù
íaø *e! vaø delete. Toaùn töû naøy duøng ñeá caáp phaùp vaø gíaûí
phoùng vuøng nhôù taïí thôøí ñíeám thöïc thí chöông trình. Trong C+
+ cuõng hoã trôï haí haøm #alloc?@ vaø 2"ee?@ ñeá thöïc híeän haí
thao taùc treân. Tuy nhíeân haí toaùn töû *e! vaø delete coù
nhíeàu ñíeám thuaän íôïí hôn.
Toaùn töû *e! caáp phaùp vuøng nhôù vaø traû veà con troû
baét ñaàu taïí vuøng nhôù ñoù. Toaùn töû delete gíaûí phoùng
vuøng nhôù ñaõ ñöôïc caáp phaùp bôûí toaùn töû *e! tröôùc ñoù.
Cuù phaùp cuûa haí toaùn töû nhö sau:
0_va" = *e! t60eN
delete 0_va"N
Neáu nhö toaùn töû *e! khoâng thöïc híeän ñöôïc noù traû veà
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 2
moät ngoaïí íeä $ad_alloc. Ngoaïí íeä naøy ñöôïc ñònh nghóa trong
tíeâu ñeà K*e!L. Ngöôøí íaäp trình phaûí quaûn íí ngoaïí íeä naøy vaø
ñöa ra haønh ñoäng töông öùng. Neáu ta khoâng baét ngoaïí íeä
naøy, chöông trình seõ keát thuùc. Trong moät soá trình bíeân dòch
cuõ, neáu toaùn töû *e! khoâng thöïc híeän ñöôïc, traû veà moät
con troû roãng. Ví duï:
Ji*clude Kiost"ea#L
Ji*clude K*e!L
usi*g *a#es0ace stdN
i*t #ai*?@
3
i*t ƒ0N
t"6 3
0 c *e! i*tN €€ allocate s0ace 2o" a* i*t
4catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* Failu"el*tN
"etu"* BN
4
ƒ0 c BUUN
cout KK tAt t KK 0 KK t tN
cout KK tis the value t KK ƒ0 KK tl*tN
delete 0N
"etu"* UN
4
Chöông trình naøy gaùn 0 ñeán ñòa chæ cuûa boä nhôù hea=
vaø vuøng nhôù naøy phaûí ñuû íôùn ñeá íöu tröõ soá nguyeân. Sau
ñoù gaùn boä nhôù naøy gíaù trò BUU vaø híeán thò noäí dung ñoù
íeân maøn hình. Cuoáí cuøng gíaûí phoùng boä nhôù ñaõ caáp
phaùt. Neáu trình bíeân dòch caøí ñaët theo caùch traû veà *ull khí
khoâng thöïc híeän ñöôïc ta phaûí thay ñoáí íaïí chöông trình naøy.
Toaùn töû delete phaûí söû duïng keát hôïp vôùí toaùn töû
*e!. Neáu söû duïng delete vôùí moïí kíeáu con troû khaùc chöông
trình seõ gaëp nhöõng íoãí raát nghíeâm troïng ví duï treo maùy.
2& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Maëc daàu *e! vaø delete thöïc híeän gíoáng nhö haøm
#alloc?@ vaø haøm 2"ee?@, tuy nhíeân noù coù nhíeàu ñíeám
thuaän tíeän hôn: thöù nhaát toaùn töû *e! coù theá caáp phaùt boä
nhôù ñuû cho ñoáí töôïng khoâng caàn phaûí söû duïng toaùn töû
si8eo2?@. Thöù haí toaùn töû *e! töï ñoäng traû veà kíeáu con troû
phuø hôïp vôùí kíeáu döõ ííeäu, ta khoâng caàn eùp kíeáu gíoáng
nhö haøm #alloc?@. Cuoáí cuøng caû *e! vaø delete ñeàu coù theá
taûí boäí.
1.1>5.1. Khôûi gaùn cho boä nhôù +aO caá< <haùt
Ta coù theá khôûí taïo cho boä nhôù ñaõ caáp phaùt moät vaøí
gíaù trò baèng caùch ñaët gíaù trò khôûí taïo sau teân kíeáu trong
caâu íeänh *e!. Cuù phaùp:
0_va" = *e! va"_t60e ?i*itiali8e"@N
Taát nhíeân gíaù trò khôûí gaùn phaûí töông thích kíeáu döõ
ííeäu vôùí kíeáu maø ñaõ ñöôïc caáp phaùt. Ví duï chöông trình sau
ín ra moät soá nguyeân ñaõ ñöôïc khôûí taïo vôùí gíaù trò RT:
Ji*clude Kiost"ea#L
Ji*clude K*e!L
usi*g *a#es0ace stdN
i*t #ai*?@
3
i*t ƒ0N
t"6 3
0 c *e! i*t ?RT@N €€ i*itiali8e to RT
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* Failu"el*tN
"etu"* BN
4
cout KK tAt t KK 0 KK t tN
cout KK tis the value t KK ƒ0 KK tl*tN
delete 0N
"etu"* UN
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 24
4
1.1>5.2. (aá< <haùt /aûng
Ta coù theá söû duïng *e! ñeá caáp phaùt cho maûng, cuù
phaùp:
0_va" = *e! a""a6_t60e gsi8ehN
si8e íaø soá phaàn töû trong maûng. Neá gíaûí phoùng vuøng
nhôù naøy, ta söû duïng cuù phaùp:
delete gh 0_va"N
Ví duï sau seõ caáp phaùt moät maûng 10 soá nguyeân:
Ji*clude Kiost"ea#L
Ji*clude K*e!L
usi*g *a#es0ace stdN
i*t #ai*?@
3
i*t ƒ0X iN
t"6 3
0 c *e! i*t gBUhN €€ allocate BU i*tege" a""a6
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* Failu"el*tN
"etu"* BN
4
2o"?icUN iKBUN i @
0gih c iN
2o"?icUN iKBUN i@
cout KK 0gih KK t tN
delete gh 0N €€ "elease the a""a6
"etu"* UN
4
Haïn cheá cuûa víeäc caáp phaùt boä nhôù cho maûng íaø ta
khoâng theá duøng khôûí gaùn caùc gíaù trò trong íuùc khaí baùo.
1.1>5.3. (aá< <haù< cho +oái t'ôïng
Ta coù theá caáp phaùt ñoäng cho ñoáí töôïng baèng toaùn töû
2+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
*e!. Khí ñoù moät ñoáí töôïng ñöôïc taïo ra vaø moät con troû ñeán
ñoáí töôïng ñoù seõ ñöôïc traû veà. Noáí töôïng ñöôïc caáp phaùt
ñoäng gíoáng nhö moïí ñoáí töôïng khaùc cuøng kíeáu. Khí ñöôïc
taïo, caáu töû cuõng thöïc híeän, khí gíaûí phoùng huûy töû cuõng
thöïc híeän. Ví duï sau taïo moät íôùp $ala*ce ííeân keát teân ngöôøí
vôùí soá taøí khoaûn cuûa hoï, beân trong haøm #ai*?@ caùc ñoáí
töôïng ñöôïc caáp phaùt ñoäng:
Ji*clude Kiost"ea#L
Ji*clude K*e!L
Ji*clude Kcst"i*gL
usi*g *a#es0ace stdN
class $ala*ce 3
dou$le cu"_$alN
cha" *a#egRUhN
0u$lici
void set?dou$le *X cha" ƒs@ 3
cu"_$al c *N
st"c06?*a#eX s@N
4
void get_$al?dou$le f*X cha" ƒs@ 3
* c cu"_$alN
st"c06?sX *a#e@N
4
4N
i*t #ai*?@
3
$ala*ce ƒ0N
cha" sgRUhN
dou$le *N
t"6 3
0 c *e! $ala*ceN
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* Failu"el*tN
"etu"* BN
4
0-Lset?B29RT%RTX tRal0h –ilso*t@N
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 27
0-Lget_$al?*X s@N
cout KK s KK tws $ala*ce isi t KK *N
cout KK tl*tN
delete 0N
"etu"* UN
4
Bôûí vì 0 íaø con troû chöùa ñoáí töôïng, neân ta duøng toaùn
töû muõí teân ñeá truy xuaát caùc thaønh víeân. Noáí töôïng caáp
phaùt ñoäng cuõng coù caáu töû vaø huûy töû, caáu töû cuõng coù
theá coù tham soá. Ví duï sau íaø phíeân baûn khaùc cuûa ví duï
tröôùc:
Ji*clude Kiost"ea#L
Ji*clude K*e!L
Ji*clude Kcst"i*gL
usi*g *a#es0ace stdN
class $ala*ce 3
dou$le cu"_$alN
cha" *a#egRUhN
0u$lici
$ala*ce?dou$le *X cha" ƒs@ 3
cu"_$al c *N
st"c06?*a#eX s@N
4
Œ$ala*ce?@ 3
cout KK tCest"ucti*g tN
cout KK *a#e KK tl*tN
4
void get_$al?dou$le f*X cha" ƒs@ 3
* c cu"_$alN
st"c06?sX *a#e@N
4
4N
i*t #ai*?@
3
$ala*ce ƒ0N
cha" sgRUhN
2- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
dou$le *N
€€ this ve"sio* uses a* i*itiali8e"
t"6 3
0 c *e! $ala*ce ?B29RT%RTX tRal0h –ilso*t@N
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* Failu"el*tN
"etu"* BN
4
0-Lget_$al?*X s@N
cout KK s KK tws $ala*ce isi t KK *N
cout KK tl*tN
delete 0N
"etu"* UN
4
Ta coù theá caáp phaùt maûng caùc ñoáí töôïng, nhöng coù
moät chuù yù. Maûng caáp phaùt bôûí toaùn töû *e! khoâng theá
coù khôûí gaùn gíaù trò, ta phaûí chaéc raèng neáu íôùp coù caáu
töû thì phaûí coù moät caáu töû khoâng tham soá. Neáu ta khoâng
íaøm ñíeàu naøy, trình bíeân dòch seõ khoâng tìm ñöôïc caáu töû
naøo phuø hôïp khí coá gaéng caáp phaùt cho maûng vaø noù seõ
khoâng bíeân dòch chöông trình. Ví duï sau seõ caáp phaùt cho
$ala*ce moät maûng vaø noù seõ goïí caáu töû khoâng tham soá:
Ji*clude Kiost"ea#L
Ji*clude K*e!L
Ji*clude Kcst"i*gL
usi*g *a#es0ace stdN
class $ala*ce 3
dou$le cu"_$alN
cha" *a#egRUhN
0u$lici
$ala*ce?dou$le *X cha" ƒs@ 3
cu"_$al c *N
st"c06?*a#eX s@N
4
$ala*ce?@ 34 €€ 0a"a#ete"less co*st"ucto"
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 29
Œ$ala*ce?@ 3
cout KK tCest"ucti*g tN
cout KK *a#e KK tl*tN
4
void set?dou$le *X cha" ƒs@ 3
cu"_$al c *N
st"c06?*a#eX s@N
4
void get_$al?dou$le f*X cha" ƒs@ 3
* c cu"_$alN
st"c06?sX *a#e@N
4
4N
i*t #ai*?@
3
$ala*ce ƒ0N
cha" sgRUhN
dou$le *N
i*t iN
t"6 3
0 c *e! $ala*ce g9hN €€ allocate e*ti"e a""a6
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* Failu"el*tN
"etu"* BN
4
€€ *ote use o2 dotX *ot a""o! o0e"ato"s
0gUh%set?B29RT%RTX tRal0h –ilso*t@N
0gBh%set?BYY%UUX tA% C% Co**e"st@N
0g2h%set?-BB%29X tI% M% Ove"d"a!*t@N
2o"?icUN iK9N i@ 3
0gih%get_$al?*X s@N
cout KK s KK tws $ala*ce isi t KK *N
cout KK tl*tN
4
delete gh 0N
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình sau:
2&6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Ral0h –ilso*ws $ala*ce isi B29RT%Z
A% C% Co**e"sws $ala*ce isi BYY
I% M% Ove"d"a!*ws $ala*ce isi -BB%29
Cest"ucti*g I% M% Ove"d"a!*
Cest"ucti*g A% C% Co**e"s
Cest"ucti*g Ral0h –ilso*
Moät íí do ñeá söû duïng daïng delete gh ñeá gíaûí phoùng
ñoáí töôïng ñoù íaø haøm huûy töû seõ thöïc híeän cho moãí ñoáí
töôïng.
1.1>5.#. RothroU
Trong C++ chuaán, ta coù theá coù toaùn töû *e! traû veà
*ull thay vì neùm ra moät ngoaïí íeä khí khoâng caáp phaùt ñöôïc
boä nhôù. Daïng toaùn töû *e! naøy raát coù ích khí bíeân dòch
chöông trình cuõ trong moâ hình môùí. Raát coù íôïí khí ta thay theá
haøm #alloc?@ baèng toaùn töû *e! (khí caäp nhaät maõ nguoàn
töø C sang C++). Khuoân daïng cuûa toaùn töû *e! nhö sau:
0_va" c *e!?*oth"o!@ t60eN
0_va" íaø bíeán con troû kíeáu t60e, toaùn töû *e! theo daïng
naøy seõ traû veà gíaù trò *ull neáu khoâng caáp phaùt ñöôïc boä
nhôù, khí ñoù ta coù theá chuyeán maõ cuõ sang daïng môùí maø
khoâng caàn phaûí quaûn íí ngoaïí íeä. Neá söû duïng tuøy choïn
*oth"o! ta phaûí cheøn tíeâu ñeà K*e!L. Ví duï:
€€ Ce#o*st"ate *oth"o! ve"sio* o2 *e!%
Ji*clude Kiost"ea#L
Ji*clude K*e!L
usi*g *a#es0ace stdN
i*t #ai*?@
3
i*t ƒ0X iN
0 c *e!?*oth"o!@ i*tg92hN €€ use *oth"o! o0tio*
i2?^0@ 3
cout KK tAllocatio* 2ailu"e%l*tN
Gh*ông 1. Maûng@ con troû@ tha1 chieáu 3a' toaùn t*û caá= =haù= bo"
nhôù .o"ng 2&1
"etu"* BN
4
2o"?icUN iK92N i@ 0gih c iN
2o"?icUN iK92N i@ cout KK 0gih KK t tN
delete gh 0N €€ 2"ee the #e#o"6
"etu"* UN
4
1.1>5.2. ]aïng ,aT< Meá< cuûa neU 1a$ ;e!ete
Coù moät daïng ñaëc bíeät cuûa toaùn töû *e!, goïí íaø daïng
saép xeáp duøng ñeá thöïc híeän moät caùch khaùc ñeá caáp phaùt
boä nhôù. Noù raát coù íôïí khí taûí boäí toaùn töû *e! trong moät
vaøí tröôøng ñaëc bíeät. Daïng toáng quaùt:
0_va" = *e! (locatio*) t60eN
locatio* íaø ñòa chæ traû veà bôûí *e!, khí söû duïng daïng
caáp phaùt boä nhôù naøy ta phaûí söû duïng toaùn töû delete
töông öùng.
Gh*ông 1&. Ka'1 taûi bo"i@ caáu t*û ,ao cheù= 3a' tha1 ,oá ngaQ1
.ònh 2&
C=DL@A 1%. H>UX I>TZ VBGZ1 S>RO IDT
\>B S=QWH P>U I=>X \BR @A>?X Ya@=
1.1/4. H>UX I>TZ VBGZ
Haøm taûí boäí íaø quaù trình söû duïng cuøng moät teân cho
haí hay nhíeàu haøm. Cô cheá hoaït ñoäng íaø moãí daïng haøm
cuøng teân phaûí khaùc nhau veà kíeáu tham soá hoaëc soá íöôïng
tham soá. Chæ coù thoâng qua söï khaùc nhau naøy trình bíeân
dòch bíeát haøm naøo seõ ñöôïc goïí trong caùc tình huoáng ñöa ra.
Ví duï chöông trình sau taûí boäí haøm #62u*c?@ baèng caùch söû
duïng kíeáu khaùc nhau cuûa tham soá:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #62u*c?i*t i@N €€ these di22e" i* t60es o2 0a"a#ete"s
dou$le #62u*c?dou$le i@N
i*t #ai*?@
3
cout KK #62u*c?BU@ KK t tN €€ calls #62u*c?i*t i@
cout KK #62u*c?V%Y@N €€ calls #62u*c?dou$le i@
"etu"* UN
4
dou$le #62u*c?dou$le i@
3
"etu"* iN
4
i*t #62u*c?i*t i@
3
"etu"* iN
4
Chöông trình sau taûí boäí haøm #62u*c?@ baèng caùch söû
duïng soá tham soá khaùc nhau:
Ji*clude Kiost"ea#L
2&& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
usi*g *a#es0ace stdN
i*t #62u*c?i*t i@N €€ these di22e" i* *u#$e" o2 0a"a#ete"s
i*t #62u*c?i*t iX i*t b@N
i*t #ai*?@
3
cout KK #62u*c?BU@ KK t tN €€ calls #62u*c?i*t i@
cout KK #62u*c?YX V@N €€ calls #62u*c?i*t iX i*t b@
"etu"* UN
4
i*t #62u*c?i*t i@
3
"etu"* iN
4
i*t #62u*c?i*t iX i*t b@
3
"etu"* iƒbN
4
Chuù yù haí haøm chæ khaùc nhau veà kíeáu döõ ííeäu traû
veà khoâng theá taûí boäí. Ví duï ñoaïn chöông trình sau íaø khoâng
hôïp íeä:
i*t #62u*c?i*t i@N €€ Š""o"i di22e"i*g "etu"* t60es
a"e
2loat #62u*c?i*t i@N €€ i*su22icie*t !he*
ove"loadi*g%
Tröôøng hôïp kíeáu khaí baùo cuûa haí haøm khaùc nhau,
nhöng thöïc teá noù gíoáng nhau. Ví duï nhö ñoaïn maõ sau:
void 2?i*t ƒ0@N
void 2?i*t 0gh@N €€ e""o"X ƒ0 is sa#e as 0gh
Löu yù raèng trình bíeân dòch híeáu ƒ0 gíoáng nhö 0gh, do ñoù
maëc daàu khaí baùo xuaát híeän khaùc nhau nhöng thöïc teá íaø
nhö nhau. Vì íeõ ñoù neân chöông trình treân gaëp íoãí.
1.1/#. T>TZ VBGZ =>UX S>RO IDT
Haøm caáu töû coù theá taûí boäí, thöïc teá tình huoáng naøy
söû duïng raát nhíeàu coù 3 íí do ñeá taûí boäí haøm caáu töû:
Gh*ông 1&. Ka'1 taûi bo"i@ caáu t*û ,ao cheù= 3a' tha1 ,oá ngaQ1
.ònh 2&4
meàm deûo; cho pheùp khôûí gaùn vaø khoâng khôûí gaùn moät
ñoáí töôïng khí taïo vaø ñònh nghóa caáu töû sao cheùp.
1.1>9.1. &aûi boäi ha$/ caáu t'û +e* ch'ông trInh
/eN/ ;eûo
Ta muoán taïo moät íôùp maø coù haí hay nhíeàu caùch taïo
neân ñoáí töôïng. Trong tröôøng hôïp naøy ta phaûí söû duïng caáu
töû taûí boäí. Noù taêng tính meàm deûo cuûa chöông trình bôûí vì
ngöôøí duøng töï do choïn caùch toát nhaát ñeá taïo ra moät ñoáí
töôïng. Ví duï xeùt íôùp date:
Ji*clude Kiost"ea#L
Ji*clude KcstdioL
usi*g *a#es0ace stdN
class date 3
i*t da6X #o*thX 6ea"N
0u$lici
date?cha" ƒd@N
date?i*t #X i*t dX i*t 6@N
void sho!_date?@N
4N
€€ I*itiali8e usi*g st"i*g%
dateiidate?cha" ƒd@
3
ssca*2?dX tedeƒcedeƒcedtX f#o*thX fda6X f6ea"@N
4
€€ I*itiali8e usi*g i*tege"s%
dateiidate?i*t #X i*t dX i*t 6@
3
da6 c dN
#o*th c #N
6ea" c 6N
4
void dateiisho!_date?@
3
cout KK #o*th KK t€t KK da6N
cout KK t€t KK 6ea" KK tl*tN
2&+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4
i*t #ai*?@
3
date o$B?B2X YX 2UUB@X o$2?tBU€22€2UUBt@N
o$B%sho!_date?@N
o$2%sho!_date?@N
"etu"* UN
4
Trong chöông trình treân, ta ñaõ khôûí taïo moät ñoáí töôïng
cuûa íôùp date baèng haí caùch: hoaëc söû duïng ba soá nguyeân
hoaëc söû duïng chuoãí Mdd€##€6666M. Lyù do thoâng duïng nhaát
ñeá söû duïng taûí boäí caáu töû íaø cho pheùp moät ñoáí töôïng
ñöôïc taïo baèng caùch söû duïng nhíeàu phöông phaùp khaùc nhau.
1.1>9.2. (ho <heù< khôûi gaùn 1a$ khoDng /oät +oái
t'ôïng
Moät íí do thoâng duïng nöõa ñeá taûí boäí caáu töû ñoù íaø
cho pheùp khôûí gaùn hoaëc khoâng moät ñoáí töôïng. Ví duï:
Ji*clude Kiost"ea#L
Ji*clude K*e!L
usi*g *a#es0ace stdN
class 0o!e"s 3
i*t 7N
0u$lici
€€ ove"load co*st"ucto" t!o !a6s
0o!e"s?@ 3 7 c UN 4 €€ *o i*itiali8e"
0o!e"s?i*t *@ 3 7 c *N 4 €€ i*itiali8e"
i*t get7?@ 3 "etu"* 7N 4
void set7?i*t i@ 3 7 c iN 4
4N
i*t #ai*?@
3
0o!e"s o2T!ogh c 3BX 2X YX RX BW4N €€ i*itiali8ed
0o!e"s o2Th"eegVhN €€ u*i*itiali8ed
0o!e"s ƒ0N
Gh*ông 1&. Ka'1 taûi bo"i@ caáu t*û ,ao cheù= 3a' tha1 ,oá ngaQ1
.ònh 2&7
i*t iN
€€ sho! 0o!e"s o2 t!o
cout KK tPo!e"s o2 t!oi tN
2o"?icUN iKVN i@ 3
cout KK o2T!ogih%get7?@ KK t tN
4
cout KK tl*l*tN
€€ set 0o!e"s o2 th"ee
o2Th"eegUh%set7?B@N
o2Th"eegBh%set7?9@N
o2Th"eeg2h%set7?Z@N
o2Th"eeg9h%set7?2T@N
o2Th"eegYh%set7?RB@N
€€ sho! 0o!e"s o2 th"ee
cout KK tPo!e"s o2 th"eei tN
2o"?icUN iKVN i@ 3
cout KK o2Th"eegih%get7?@ KK t tN
4
cout KK tl*l*tN
€€ d6*a#icall6 allocate a* a""a6
t"6 3
0 c *e! 0o!e"sgVhN €€ *o i*itiali8atio*
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* Failu"el*tN
"etu"* BN
4
€€ i*itiali8e d6*a#ic a""a6 !ith 0o!e"s o2 t!o
2o"?icUN iKVN i@ 3
0gih%set7?o2T!ogih%get7?@@N
4
€€ sho! 0o!e"s o2 t!o
cout KK tPo!e"s o2 t!oi tN
2o"?icUN iKVN i@ 3
cout KK 0gih%get7?@ KK t tN
4
cout KK tl*l*tN
delete gh 0N
"etu"* UN
2&- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4
Trong ví duï treân, caû haí caáu töû íaø caàn thíeát. Caáu töû
ngaàm ñònh ñöôïc söû duïng ñeá taïo maûng o2Th"ee khoâng coù
khôûí taïo vaø maûng caáp phaùt ñoäng. Caáu töû coù tham soá
ñöôïc goïí ñeá taïo ra maûng caùc ñoáí töôïng o2T!o.
1.11/. C>RO IDT \>B S=QWH
Moät trong nhöõng daïng quan troïng cuûa caáu töû taûí boäí
íaø caáu töû sao cheùp. Nònh nghóa moät caáu töû sao cheùp gíuùp
ta traùnh ñöôïc tình huoáng maø coù theá xuaát híeän khí moät ñoáí
töôïng ñöôïc söû duïng ñeá khôûí taïo ñoáí töôïng khaùc.
Khí moät ñoáí töôïng ñöôïc söû duïng ñeá khôûí taïo moät ñoáí
töôïng khaùc, C++ seõ sao cheùp töøng bit döõ ííeäu cuûa ñoáí
töôïng naøy ñeán ñoáí töôïng kía. Do ñoù coù moät baûn sao gíoáng
heät cuûa ñoáí töôïng duøng ñeá khôûí taïo ñöôïc taïo ra trong ñoáí
töôïng ñích. Maëc daàu ñíeàu naøy íaø thoõa ñaùn cho nhíeàu
tröôøng hôïp vaø chính xaùc nhöõng gì maø ta muoán xaûy ra. Tuy
nhíeân coù moät vaøí tình huoáng maø caùch sao cheùp töøng bit
khoâng thöïc híeän. Ví duï íôùp #6class caáp phaùt boä nhôù cho
moãí ñoáí töôïng khí noù ñöôïc taïo, gíaû söû A íaø moät ñoáí töôïng
cuûa íôùp ñoù. Níeàu naøy coù nghóa íaø A ñaõ ñöôïc caáp phaùt
boä nhôù. Gíaû söû A ñöôïc söû duïng ñeá khôûí gaùn B:
M6class B c AN
Neáu sao cheùp töøng bít, B seõ íaø moät baûn sao chính xaùc
cuûa A. Níeàu naøy nghóa íaø B söû duïng cuøng boä nhôù maø A
ñaõ söû duïng thay vì caáp phaùt ríeâng cho noù. Roõ raøng ñaây
íaø keát quaû khoâng mong muoán. Ví duï íôùp #6class bao goàm
moät huûy töû gíaûí phoùng vuøng nhôù, khí ñoù cuøng moät vuøng
nhôù seõ ñöôïc gíaûí phoùng haí íaàn khí A vaø B bò huûy boû. Vaán
Gh*ông 1&. Ka'1 taûi bo"i@ caáu t*û ,ao cheù= 3a' tha1 ,oá ngaQ1
.ònh 2&9
ñeà neâu treân seõ xuaát híeän trong haí tình huoáng: 1. Khí taïo
sao cheùp ñoáí töôïng ñeâ gôûí ñeán tham soá cuûa haøm; 2. Taïo ra
moät ñoáí töôïng taïm thôøí ñeá traû veà gíaù trò cho haøm. Neá
gíaûí quyeát vaán ñeà nhö ñaõ trình baøy ôû treân, C++ cho pheùp
ta taïo ra moät caáu töû sao cheùp, vaø trình bíeân dòch seõ söû
duïng ñeá khôûí gaùn moät ñoáí töôïng khaùc. Khí toàn taïí moät
caáu töû sao cheùp, sao cheùp töøng bit seõ bò boû qua. Cuù phaùp
cuûa caáu töû sao cheùp:
class*a#e ?co*st class*a#e fo@ 3
€€ $od6 o2 co*st"ucto"
4
Trong ñoù o íaø tham chíeáu cuûa ñoáí töôïng beân veá phaûí
cuûa thao taùc khôûí gaùn. Caáu töû sao cheùp coù theá coù nhíeàu
tham soá, nhöng baét buoäc tham soá ñaàu tíeân phaûí íaø moät
tham chíeáu cuûa ñoáí töôïng. Chuù yù, C++ ñònh nghóa haí tình
huoáng phaân bíeät maø gíaù trò cuûa ñoáí töôïng naøy chuyeán
qua ñoáí töôïng khaùc. Thöù nhaát íaø gaùn ñoáí töôïng. Thöù haí íaø
khôûí gaùn gíaù trò. vaø xuaát híeän trong 3 caùch:
- Khí moät ñoáí töôïng khôûí gaùn moät ñoáí töôïng khaùc, ví
duï nhö íuùc khaí baùo
- Khí sao cheùp moät ñoáí töôïng ñeá gôûí ñeán haøm
- Khí taïo ra moät ñoáí töôïng taïm thôøí (ví duï ñeá íaøm gíaù
trò traû veà cho moät haøm)
Ví duï, moät íôùp coù teân íaø #6class, 6 íaø moät ñoáí töôïng
cuûa #6class moãí caâu íeänh sau ñaây ñeàu thöïc híeän thao taùc
khôûí gaùn:
#6class 7 c 6N €€ 6 e70licitl6 i*itiali8i*g 7
2u*c?6@N €€ 6 0assed as a 0a"a#ete"
6 c 2u*c?@N €€ 6 "eceivi*g a te#0o"a"6X "etu"* o$bect
246 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Ví duï sau ñaây taïo ra moät caáu töû sao cheùp. Chöông trình
taïo ra moät maûng soá nguyeân traùnh ñöôïc tình huoáng bò traøn
bíeân maûng. Boä nhôù cho moãí maûng ñöôïc caáp phaùp bôûí
toaùn töû *e! vaø con troû ñeán vuøng nhôù naøy ñöôïc duy trì beân
trong moãí ñoáí töôïng:
€ƒ This 0"og"a# c"eates a tsa2et a""a6 class% Si*ce s0ace
2o" the a""a6 is allocated usi*g *e!X a co06 co*st"ucto"
is 0"ovided to allocate #e#o"6 !he* o*e a""a6 o$bect is
used to i*itiali8e a*othe"%
ƒ€
Ji*clude Kiost"ea#L
Ji*clude K*e!L
Ji*clude Kcstdli$L
usi*g *a#es0ace stdN
class a""a6 3
i*t ƒ0N
i*t si8eN
0u$lici
a""a6?i*t s8@ 3
t"6 3
0 c *e! i*tgs8hN
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* Failu"el*tN
e7it?Š‹IT_FAILaRŠ@N
4
si8e c s8N
4
Œa""a6?@ 3 delete gh 0N 4
€€ co06 co*st"ucto"
a""a6?co*st a""a6 fa@N
void 0ut?i*t iX i*t b@ 3
i2?iLcU ff iKsi8e@ 0gih c bN
4
i*t get?i*t i@ 3
"etu"* 0gihN
4
4N
Gh*ông 1&. Ka'1 taûi bo"i@ caáu t*û ,ao cheù= 3a' tha1 ,oá ngaQ1
.ònh 241
€€ Co06 Co*st"ucto"
a""a6iia""a6?co*st a""a6 fa@ 3
i*t iN
t"6 3
0 c *e! i*tga%si8ehN
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* Failu"el*tN
e7it?Š‹IT_FAILaRŠ@N
4
2o"?icUN iKa%si8eN i@ 0gih c a%0gihN
4
i*t #ai*?@
3
a""a6 *u#?BU@N
i*t iN
2o"?icUN iKBUN i@ *u#%0ut?iX i@N
2o"?icZN iLcUN i--@ cout KK *u#%get?i@N
cout KK tl*tN
€€ c"eate a*othe" a""a6 a*d i*itiali8e !ith *u#
a""a6 7?*u#@N €€ i*vo5es co06 co*st"ucto"
2o"?icUN iKBUN i@ cout KK 7%get?i@N
"etu"* UN
4
Chuù yù: *u# ñöôïc söû duïng ñeá khôûí gaùn 7 baèng caâu
íeänh:
a""a6 7?*u#@N €€ i*vo5es co06 co*st"ucto"
Caáu töû sao cheùp seõ ñöôïc goïí, boä nhôù cho maûng môùí
ñöôïc caáp phaùt vaø íöu tröõ trong 7%0 vaø noäí dung cuûa *u#
ñöôïc sao cheùp ñeán maûng cuûa 7. Trong tình huoáng naøy 7 vaø
*u# coù maûng chöùa cuøng gíaù trò, nhöng moãí maûng coù vò trí
khaùc nhau trong boä nhôù (*u#%0 vaø 7%0 khoâng troû ñeán cuøng
moät boä nhôù). Neáu khoâng coù caáu töû sao cheùp, ngaàm ñònh
seõ khôûí gaùn ñoáí töôïng 7 baèng caùch sao cheùp töøng bit moät
cuûa *u# vaøo 7 vaø keát quaû íaø 7%0 vaø *u#%0 cuøng chía seõ
242 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
moät boä nhôù. Löu yù íaø caáu töû sao cheùp chæ thöïc híeän khí
coù söï khôûí gaùn. Ví duï chöông trìng sau khoâng goïí caáu töû sao
cheùp:
a""a6 a?BU@N
€€ %%%
a""a6 $?BU@N
$ c aN €€ does *ot call co06 co*st"ucto"
Trong tình huoáng treân, $ c aN thöïc híeän toaùn töû gaùn.
Neáu c khoâng taûí boäí, seõ thöïc híeän thao taùc sao cheùp töøng
bit moät. Do ñoù trong moät vaøí tình huoáng ta caàn phaûí taûí
boäí toaùn töû c.
1.111. TKX Ya> S=l SOT> XBGI =>UX I>TZ VBGZ
Nhö ñaõ ñeà caäp trong chöông 5, ta coù theá nhaän ñòa chæ
cuûa moät haøm. Moät trong nhöõng íí do ñeá thöïc híeän ñíeàu
naøy íaø gaùn ñòa chæ cuûa moät haøm cho moät con troû vaø goïí
haøm thoâng qua con troû naøy. Neáu haøm khoâng taûí boäí, quaù
trình naøy thöïc híeän bình thöôøng. Tuy nhíeân neáu haøm taûí boäí
ta caàn theâm moät vaøí thao taùc nöõa. Neá híeáu vì sao ta xeùt
caâu íeänh gaùn ñòa chæ cuûa haøm #62u*c ñeán con troû 0:
0 c #62u*cN
Neáu haøm taûí boäí, trình bíeân dòch khoâng bíeát phíeân
baûn naøo cuûa haøm seõ ñöôïc gaùn cho 0. Caâu traû íôøí phuï
thuoäc vaøo caùch khaí baùo cuûa #62u*c?@. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #62u*c?i*t a@N
i*t #62u*c?i*t aX i*t $@N
i*t #ai*?@
3
i*t ?ƒ20@?i*t a@N €€ 0oi*te" to i*t 2?i*t@
20 c #62u*cN €€ 0oi*ts to #62u*c?i*t@
Gh*ông 1&. Ka'1 taûi bo"i@ caáu t*û ,ao cheù= 3a' tha1 ,oá ngaQ1
.ònh 24
cout KK 20?V@N
"etu"* UN
4
i*t #62u*c?i*t a@
3
"etu"* aN
4
i*t #62u*c?i*t aX i*t $@
3
"etu"* aƒ$N
4
OU ñaây coù haí phíeân baûn cuûa haøm #62u*c?@, caû haí
ñeàu traû veà kíeáu nguyeân nhöng phíeân baûn ñaàu chæ coù
moät tham soá vaø phíeân baûn coøn íaïí coù haí tham soá. Trong
chöông trình, 20 íaø con troû troû ñeán haøm maø traû veà moät soá
nguyeân vaø coù moät tham soá. Khí 20 nhaän ñòa chæ cuûa haøm
#62u*c?@, C++ seõ söû duïng thoâng tín naøy ñeá choïn phíeân
baûn #62u*c?i*t a@ cuûa haøm #62u*c?@. Khí 20 ñöôïc khaí baùo:
i*t ?ƒ20@?i*t aX i*t $@N
Luùc naøy 20 seõ nhaän ñòa chæ phíeân baûn #62u*c?i*t aX
i*t $@ cuûa haøm #62u*c?@. Toáng quaùt khí gaùn ñòa chæ cuûa
moät haøm taûí boäí ñeán con troû haøm. Phuï thuoäc vaøo caùch
khaí baùo con troû haøm maø trình bíeân dòch seõ choïn phíeân
baûn haøm töông öùng. Khaí baùo con troû haøm phaûí gíoáng duy
nhaát moät phíeân baûn cuûa caùc haøm taûí boäí.
1.112. TDU _=BW> BPQJFB>]
Khí môùí taïo ra C++, yeâu caàu phaûí khaí baùo töø khoùa
ove"load tröôùc caùc haøm taûí boäí. Níeàu naøy ñaõ íoãí thôøí vaø
khoâng ñöôïc söû duïng hoaëc hoã trôï. Thaät vaäy noù cuõng
khoâng coù saún trong C++ chuaán. Tuy nhíeân bôûí vì coù theá
xuaát híeän moät vaøí chöông trình C++ ñöôïc víeát ôû phíeân baûn
24& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
cuõ, do ñoù ta cuõng neân bíeát ove"load ñöôïc söû duïng nhö theá
naøo. Cuù phaùp:
ove"load 2u*c-*a#eN
2u*c-*a#e íaø teân haøm caàn taûí boäí, caâu íeänh naøy
phaûí ñöôïc ñaët tröôùc khaí baùo taûí boäí. Ví duï ta noùí cho trình
bíeân dòch phíeân baûn cuõ bíeát raèng mình seõ taûí boäí moät
haøm goïí íaø test?@:
ove"load testN
1.113. T=>X \BR =>UX @A>?X Ya@=
C++ cho pheùp gaùn moät gíaù trò ngaàm ñònh khí khoâng
coù tham soá töông öùng chæ ra trong íôøí goïí haøm. Ví duï khaí
baùo haøm #62u*c?@ nhaän moät tham soá íaø kíeáu dou$le vôùí
gíaù trò ngaàm ñònh íaø U%U
void #62u*c?dou$le d c U%U@
3
€€ %%%
4
Haøm #62u*c?@ coù theá goïí moät trong haí caùch, ví duï:
#62u*c?BZR%29Y@N €€ 0ass a* e70licit value
#62u*c?@N €€ let 2u*ctio* use de2ault
Lôøí goïí ñaàu tíeân gôûí gíaù trò BZR%29Y ñeán d, caùch goïí
thöù haí truyeàn gíaù trò U cho d.
Moät trong nhöõng íí do ñeá C++ cung caáp tham soá ngaàm
ñònh bôûí vì noù cung caáp nhíeàu caùch khaùc nhau ñeá ngöôøí
íaäp trình quaûn íí chöông trình toát hôn. Neá quaûn íí nhíeàu tình
huoáng khaùc nhau, moät haøm thöôøng coù nhíeàu tham soá hôn
yeâu caàu. Thaät vaäy, khí öùng duïng tham soá ngaàm ñònh, ta
chæ caàn chæ ra tham soá coù yù nghóa trong tình huoáng chính
xaùc, khoâng nhaát thíeát phaûí chæ heát nhöõng tham soá khoâng
Gh*ông 1&. Ka'1 taûi bo"i@ caáu t*û ,ao cheù= 3a' tha1 ,oá ngaQ1
.ònh 244
caàn thíeát khaùc. Moät ví duï theá híeän tình huoáng naøy íaø haøm
xoùa maøn hình. Thoâng thöôøng maøn hình coù 25 doøng, khí xoùa
maøn hình thöïc chaát ta xoùa 25 doøng naøy vaø ñöa con troû veà
ñaàu doøng. Tuy nhíeân seõ coù moät vaøí kíeáu maøn hình maø
coù soá doøng khaùc 25. Khí ñoù ta duøng tham soá ngaàm ñònh
cho haøm xoùa maøn hình íaø 25, trong tröôøng hôïp khaùc ta môùí
chæ ra soá doøng cuï theá.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void cl"sc"?i*t si8ec2V@N
i*t #ai*?@
3
"egiste" i*t iN
2o"?icUN iK9UN i @ cout KK i KK e*dlN
ci*%get?@N
cl"sc"?@N €€ clea"s 2V li*es
2o"?icUN iK9UN i @ cout KK i KK e*dlN
ci*%get?@N
cl"sc"?BU@N €€ clea"s BU li*es
"etu"* UN
4
void cl"sc"?i*t si8e@
3
2o"?N si8eN si8e--@ cout KK e*dlN
4
Moät ví duï khaùc cuûa tham soá ngaàm ñònh íaø söû duïng
nhö íaø moät côø ñeá thoâng baùo cho haøm söû duïng íaïí tham soá
tröôùc ñoù. Ví duï haøm i0uts?@ töï ñoäng thuït ñaàu doøng moät
chuoãí vaên baûn vôùí soá kí töï cho tröôùc.
void i0uts?cha" ƒst"X i*t i*de*t@
3
i2?i*de*t K U@ i*de*t c UN
2o"? N i*de*tN i*de*t--@ cout KK t tN
cout KK st" KK tl*tN
24+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4
Maëc daàu phíeân baûn haøm naøy khoâng coù gì saí nhöng,
nhöng ta coù theá cung caáp tham soá ngaàm ñònh cho tham bíeán
i*de*t ñeá thoâng baùo cho haøm i0uts?@ thuïc vaøo ñaàu doøng
vôùí tham soá i*de*t ñaõ goïí íaàn tröôùc. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
€ƒ Ce2ault i*de*t to -B% This value tells the 2u*ctio*
to "euse the 0"evious value% ƒ€
void i0uts?cha" ƒst"X i*t i*de*t c -B@N
i*t #ai*?@
3
i0uts?tHello the"etX BU@N
i0uts?tThis !ill $e i*de*ted BU s0aces $6 de2aultt@N
i0uts?tThis !ill $e i*de*ted V s0acestX V@N
i0uts?tThis is *ot i*de*tedtX U@N
"etu"* UN
4
void i0uts?cha" ƒst"X i*t i*de*t@
3
static i c UN €€ holds 0"evious i*de*t value
i2?i*de*t Lc U@
i c i*de*tN
else €€ "euse old i*de*t value
i*de*t c iN
2o"? N i*de*tN i*de*t--@ cout KK t tN
cout KK st" KK tl*tN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
Hello the"e
This !ill $e i*de*ted BU s0aces $6 de2ault
This !ill $e i*de*ted V s0aces
This is *ot i*de*ted
Khí taïo haøm coù tham soá ngaàm ñònh, ta íöu yù raèng gíaù
trò ngaàm ñònh phaûí ñöôïc chæ ra duy nhaát moät íaàn vaø ngay
Gh*ông 1&. Ka'1 taûi bo"i@ caáu t*û ,ao cheù= 3a' tha1 ,oá ngaQ1
.ònh 247
taïí thôøí ñíeám khaí baùo. Neáu ta coá chæ ra tham soá ngaàm
ñònh taïí vò trí ñònh nghóa haøm, chöông trình seõ baùo íoãí. Ta coù
theá chæ ra tham soá ngaàm ñònh khaùc nhau cho haøm taûí boäí.
Taát caû caùc tham soá íaáy gíaù trò ngaàm ñònh phaûí ñöôïc
khaí baùo beân phaûí nhaát trong danh saùch caùc tham soá. Ví duï
ñònh nghóa haøm i0uts?@ nhö theá naøy íaø khoâng hôïp íeä.
void i0uts?i*t i*de*t c -BX cha" ƒst"@N
Vì tham soá ngaàm ñònh víeát tröôùc tham soá thoâng
thöôøng.
Ta coù theá söû duïng tham soá ngaàm ñònh cho caáu töû. Ví
duï íôùp cu$e duy trì moät boä ba gíaù trò caùc soá nguyeân. Haøm
caáu töû cuûa noù thíeát íaäp caùc gíaù trò trong boä ba ngaàm
ñònh íaø U.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class cu$e 3
i*t 7X 6X 8N
0u$lici
cu$e?i*t icUX i*t bcUX i*t 5cU@ 3
7ciN
6cbN
8c5N
4
i*t volu#e?@ 3
"etu"* 7ƒ6ƒ8N
4
4N
i*t #ai*?@
3
cu$e a?2X9XY@X $N
cout KK a%volu#e?@ KK e*dlN
cout KK $%volu#e?@N
"etu"* UN
24- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4
Coù haí ñíeám thuaän íôïí khí söû duïng tham soá ngaàm ñònh
íaø: khoâng caàn phaûí ñònh nghóa moät caáu töû khoâng tham
soá. Thöù haí íaø ta khoâng caàn phaûí chæ caùc gíaù trò cuï theá
trong íuùc khaí baùo ñoáí töôïng.
1.113.1. &ha/ ,oá ngaN/ +ònh ,o 1ôùi taûi boäi
Trong moät vaøí tình huoáng, tham soá ngaàm ñònh coù theá
ñöôïc söû duïng nhö íaø daïng víeát taét cuûa haøm taûí boäí. Lôùp
cu$e nhö treân íaø moät ví duï. Tình huoáng khaùc, gíaû söû ta
muoán taïo ra haí phíeân baûng cuûa haøm st"cat?@ chuaán.
Phíeân baûn ñaàu tíeân hoaït ñoäng gíoáng nhö st"cat?@ vaø gheùp
toaøn boä noäí dung cuûa moät chuoãí vaøo cuoáí chuoãí khaùc.
Phíeân baûn thöù haí íaáy moät tham soá thö ba chæ ra soá kí töï
caàn gheùp. Ví duï ta ñònh nghóa haí haøm #6st"cat?@ nhö sau:
void #6st"cat?cha" ƒsBX cha" ƒs2X i*t le*@N
void #6st"cat?cha" ƒsBX cha" ƒs2@N
Phíeân baûn ñaàu seõ cheùp le* kí töï töø chuoãí s2 vaøo
cuoáí chuoãí sB. phíeân baûn haí cheùp toaøn boä kí töï cuûa s2
vaøo cuoáí sB. Roõ raøng ta khoâng caàn thíeát phaûí ñònh nghóa
haí phíeân baûn naøy, ta coù theá söû duïng tham soá ngaàm ñònh
trong tình huoáng treân.
€€ A custo#i8ed ve"sio* o2 st"cat?@%
Ji*clude Kiost"ea#L
Ji*clude Kcst"i*gL
usi*g *a#es0ace stdN
void #6st"cat?cha" ƒsBX cha" ƒs2X i*t le* c -B@N
i*t #ai*?@
3
cha" st"BgRUh c tThis is a testtN
cha" st"2gRUh c tUB29YVWTRZtN
#6st"cat?st"BX st"2X V@N €€ co*cate*ate V cha"s
Gh*ông 1&. Ka'1 taûi bo"i@ caáu t*û ,ao cheù= 3a' tha1 ,oá ngaQ1
.ònh 249
cout KK st"B KK wl*wN
st"c06?st"BX tThis is a testt@N €€ "eset st"B
#6st"cat?st"BX st"2@N €€ co*cate*ate e*ti"e st"i*g
cout KK st"B KK wl*wN
"etu"* UN
4
€€ A custo# ve"sio* o2 st"cat?@%
void #6st"cat?cha" ƒsBX cha" ƒs2X i*t le*@
3
€€ 2i*d e*d o2 sB
!hile?ƒsB@ sBN
i2?le* cc -B@ le* c st"le*?s2@N
!hile?ƒs2 ff le*@ 3
ƒsB c ƒs2N €€ co06 cha"s
sBN
s2N
le*--N
4
ƒsB c wlUwN €€ *ull te"#i*ate sB
4
1.11%. H>UX I>TZ VBGZ P>U \Dd @=>GH @=>b@A
Ta coù theá taïo ra tình huoáng maø trình bíeân dòch khoâng
bíeát choïn gíöõa haí hay nhíeàu haøm taûí boäí. Khí ñíeàu naøy
xaûy ra ta goïí íaø söï nhaäp nhaèng. Trình bíeân dòch coí söï nhaäp
nhaèng íaø íoãí vaø noù seõ khoâng bíeân dòch. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
2loat #62u*c?2loat i@N
dou$le #62u*c?dou$le i@N
i*t #ai*?@
3
coutKK#62u*c?BU%B@KKt tN€€u*a#$iguousXcalls
#62u*c?dou$le@
cout KK #62u*c?BU@N €€ a#$iguous
"etu"* UN
4
2+6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
2loat #62u*c?2loat i@
3
"etu"* iN
4
dou$le #62u*c?dou$le i@
3
"etu"* -iN
4
#62u*c?@ ñöôïc taûí boäí vì vaäy noù coù theá nhaän tham soá
hoaëc 2loat hoaëc dou$le. Khí goïí haøm #62u*c?BU%B@, khoâng
xuaát híeän söï nhaäp nhaèng bôûí vì haèng BU%B ñöôïc híeáu íaø
kíeáu dou$le, nhöng khí goïí haøm #62u*c?BU@ xuaát híeän söï
nhaäp nhaèng bôûí vì trình bíeân dòch khoâng bíeát chuyeán BU
sang 2loat hay dou$le.
Ví duï khaùc theá híeän söï nhaäp nhaèng:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
cha" #62u*c?u*sig*ed cha" ch@N
cha" #62u*c?cha" ch@N
i*t #ai*?@
3
cout KK #62u*c?wcw@N €€ this calls #62u*c?cha"@
cout KK #62u*c?RR@ KK t tN €€ a#$iguous
"etu"* UN
4
cha" #62u*c?u*sig*ed cha" ch@
3
"etu"* ch-BN
4
cha" #62u*c?cha" ch@
3
"etu"* chBN
4
Trong C++, cha" vaø u*sig*ed cha" ñaõ coù söï nhaäp
nhaèng. Khí goïí haøm #62u*c?@ vôùí soá nguyeân RR, trình bíeân
Gh*ông 1&. Ka'1 taûi bo"i@ caáu t*û ,ao cheù= 3a' tha1 ,oá ngaQ1
.ònh 2+1
dòch seõ khoâng bíeát goïí haøm naøo vì RR khoâng bíeát chuyeán
sang kíeáu cha" hay u*sig*ed cha".
Moät caùch khaùc ñeá sính ra söï nhaäp nhaèng ñoù íaø söû
duïng tham soá ngaàm ñònh trong haøm taûí boäí. Xeùt ví duï sau:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #62u*c?i*t i@N
i*t #62u*c?i*t iX i*t bcB@N
i*t #ai*?@
3
cout KK #62u*c?YX V@ KK t tN €€ u*a#$iguous
cout KK #62u*c?BU@N €€ a#$iguous
"etu"* UN
4
i*t #62u*c?i*t i@
3
"etu"* iN
4
i*t #62u*c?i*t iX i*t b@
3
"etu"* iƒbN
4
OU ñaây, doøng ñaàu tíeân goïí haøm #62u*c?@ vôùí haí tham
soá do ñoù khoâng xuaát híeän söï nhaäp nhaèng. Khí goïí haøm
#62u*c?@ vôùí moät tham soá, trình bíeân dòch seõ khoâng bíeát
goïí haøm naøo töông öùng.
Moät caùch khaùc ñeá sính ra nhaäp nhaèng ñoù íaø haøm taûí
boäí vôùí tham chíeáu, ví duï:
€€ This 0"og"a# co*tai*s a* e""o"%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void 2?i*t 7@N
void 2?i*t f7@N €€ e""o"
i*t #ai*?@
2+2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
3
i*t acBUN
2?a@N €€ e""o"X !hich 2?@|
"etu"* UN
4
void 2?i*t 7@
3
cout KK tI* 2?i*t@l*tN
4
void 2?i*t f7@
3
cout KK tI* 2?i*t f@l*tN
4
Nhö ñaõ moâ taû trong chöông trình, haøm naøy khoâng ñöôïc
taûí boäí bôûí vì noù chæ khaùc nhau ôû tham chíeáu cuûa tham
soá.
Gh*ông 14. )oaùn t*û taûi bo"i 2+
C=DL@A 1,. TB>W@ IDT I>TZ VBGZ
Trong C++, ta coù theá taûí boäí raát nhíeàu toaùn töû vì vaäy
noù coù theá thöïc híeän nhíeàu thao taùc ñaëc bíeät ííeân quan
ñeán íôùp. Ví duï íôùp stac5 coù theá taûí boäí toaùn töû taêng()
ñeá thay theá cho phöông thöùc 0ush?@ vaø toaùn töû gíaûm (--)
ñeá thay theá cho phöông thöùc 0o0?@. Khí moät toaùn töû taûí
boäí, noù khoâng íaøm maát ñí yù nghóa goác cuûa noù, thay vaøo
ñoù noù môû roäng phaïm ví öùng duïng cuûa caùc ñoáí töôïng.
Khaû naêng taûí boäí toaùn töû íaø ñaëc tröng raát höõu ích
cuûa C++. Noù cho pheùp tích hôïp ñaày ñuû caùc kíeáu íôùp môùí
vaøo moâí tröôøng íaäp trình. Sau khí taûí boäí toaùn töû, ta coù
theá söû duïng ñoáí töôïng trong bíeáu thöùc gíoáng nhö caùc döõ
ííeäu cô sôû trong C++.
Taûí boäí toaùn töû baèng caùch taïo ra moät haøm, moät
haøm toaùn töû ñònh nghóa hoaït ñoäng maø toaùn töû taûí boäí
seõ thöïc híeän. Haøm toaùn töû coù theá íaø thaønh víeân hoaëc
khoâng cuûa moät íôùp.
1.11,. T>dB XBGI =>UX IB>W@ IDT I=>U@= PZQC@
Cuù phaùp:
"etu"*-t60e class-*a#eiio0e"ato"J?a"gu#e*t-list@
3
€€ o0e"atio*s
4
Thoâng thöôøng haøm toaùn töû traû veà moät ñoáí töôïng
cuûa íôùp maø noù thao taùc treân ñoù, tuy nhíeân kíeáu traû veà
íaø kíeáu hôïp íeä baát kì, J íaø toaùn töû caàn taûí boäí, ví duï neáu
taûí boäí pheùp toaùn € ta víeát o0e"ato"€. Khí taûí boäí toaùn töû
moät ngoâí, a"gu#e*t-list ñeá troáng. Khí taûí boäí toaùn töû haí
2+& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
ngoâí, a"gu#e*t-list seõ nhaän moät tham soá. Ví duï sau taïo
moät íôùp coù teân íaø loc, íöu gíöõ gíaù trò kính ñoä vaø vó ñoä.
Noù taûí boäí toaùn töû coäng ().
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class loc 3
i*t lo*gitudeX latitudeN
0u$lici
loc?@ 34
loc?i*t lgX i*t lt@ 3
lo*gitude c lgN
latitude c ltN
4
void sho!?@ 3
cout KK lo*gitude KK t tN
cout KK latitude KK tl*tN
4
loc o0e"ato"?loc o02@N
4N
€€ Ove"load 2o" loc%
loc lociio0e"ato"?loc o02@
3
loc te#0N
te#0%lo*gitude c o02%lo*gitude lo*gitudeN
te#0%latitude c o02%latitude latitudeN
"etu"* te#0N
4
i*t #ai*?@
3
loc o$B?BUX 2U@X o$2? VX 9U@N
o$B%sho!?@N €€ dis0la6s BU 2U
o$2%sho!?@N €€ dis0la6s V 9U
o$B c o$B o$2N
o$B%sho!?@N €€ dis0la6s BV VU
"etu"* UN
4
Ta thaáy raèng o0e"ato"?@ chæ coù moät tham soá vaø
Gh*ông 14. )oaùn t*û taûi bo"i 2+4
toaùn haïng beân traùí pheùp coäng seõ gôûí ñeán haøm thoâng qua
con troû this. Toaùn haïng beân phaûí chính íaø tham soá o02.
Thoâng thöôøng haøm toaùn töû taûí boäí traû veà moät ñoáí töôïng
thuoäc íôùp ñoù, vì vaäy ta coù theá víeát caâu íeänh sau:
?o$Bo$2@%sho!?@N €€ dis0la6s outco#e o2 o$Bo$2
Trong tình huoáng naøy, o0Bo02 seõ taïo ra moät ñoáí töôïng
trung gían vaø noù seõ toàn taïí cho ñeán khí haøm sho!?@ keát
thuùc.
Ta coù theá töï do thöïc híeän moïí thao taùc trong haøm toaùn
töû, thoâng thöôøng ta choïn toaùn töû ñeá taûí boäí phuø hôïp vôùí
ngöõ caûnh. Ví duï tíeáp theo boá sung ba toaùn töû vaøo íôùp loc
ñoù íaø -, c, :
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class loc 3
i*t lo*gitudeX latitudeN
0u$lici
loc?@ 34 €€ *eeded to co*st"uct te#0o"a"ies
loc?i*t lgX i*t lt@ 3
lo*gitude c lgN
latitude c ltN
4
void sho!?@ 3
cout KK lo*gitude KK t tN
cout KK latitude KK tl*tN
4
loc o0e"ato"?loc o02@N
loc o0e"ato"-?loc o02@N
loc o0e"ato"c?loc o02@N
loc o0e"ato"?@N
4N
€€ Ove"load 2o" loc%
loc lociio0e"ato"?loc o02@
3
2++ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
loc te#0N
te#0%lo*gitude c o02%lo*gitude lo*gitudeN
te#0%latitude c o02%latitude latitudeN
"etu"* te#0N
4
€€ Ove"load - 2o" loc%
loc lociio0e"ato"-?loc o02@
3
loc te#0N
€€ *otice o"de" o2 o0e"a*ds
te#0%lo*gitude c lo*gitude - o02%lo*gitudeN
te#0%latitude c latitude - o02%latitudeN
"etu"* te#0N
4
€€ Ove"load asig*#e*t 2o" loc%
loc lociio0e"ato"c?loc o02@
3
lo*gitude c o02%lo*gitudeN
latitude c o02%latitudeN
"etu"* ƒthisN €€ i%e%X "etu"* o$bect that ge*e"ated
call
4
€€ Ove"load 0"e2i7 2o" loc%
loc lociio0e"ato"?@
3
lo*gitudeN
latitudeN
"etu"* ƒthisN
4
i*t #ai*?@
3
loc o$B?BUX 2U@X o$2? VX 9U@X o$9?ZUX ZU@N
o$B%sho!?@N
o$2%sho!?@N
o$BN
o$B%sho!?@N €€ dis0la6s BB 2B
o$2 c o$BN
o$B%sho!?@N €€ dis0la6s B2 22
Gh*ông 14. )oaùn t*û taûi bo"i 2+7
o$2%sho!?@N €€ dis0la6s B2 22
o$B c o$2 c o$9N €€ #ulti0le assig*#e*t
o$B%sho!?@N €€ dis0la6s ZU ZU
o$2%sho!?@N €€ dis0la6s ZU ZU
"etu"* UN
4
Ta chuù yù traät töï beân trong pheùp toaùn tröø, toaùn haïng
beân traùí seõ tröø cho toaùn haïng beân phaûí. Bôûí vì ñoáí töôïng
beân traùí seõ sính ra íôøí goïí haøm, do ñoù döõ ííeäu trong o02 seõ
íaø döõ ííeäu bò tröø vaø this íaø döõ ííeäu tröø.
Trong C++, neáu pheùp toaùn c khoâng taûí boäí, noù seõ töï
ñoäng taïo ra moät pheùp gaùn ngaàm ñònh cho taát caû caùc íôùp.
Pheùp gaùn ngaàm ñònh íaø thöïc híeän sao cheùp töøng thaønh
víeân theo töøng bit. Baèng caùch taûí boäí c, ta coù theá ñònh
nghóa roõ raøng nhöõng gì maø pheùp gaùn thöïc híeän. Trong ví
duï treân, caùc haøm o0e"ato" traû veà ƒthis íaø ñoáí töôïng phaùt
sính ra íôøí goïí. Ta coù theá thöïc híeän nhíeàu pheùp gaùn cuøng
moät íuùc, ví duï nhö sau:
o$B c o$2 c o$9N €€ #ulti0le assig*#e*t
Haøm o0e"ato"?@ khoâng nhaän tham soá, bôûí vì íaø
toaùn töû moät ngoâí.
1.112.1. &aïo /oät ;aïng tieNn toá 1a$ haäu toá cuûa
toaùn t'û ta-ng= giaû/
Trong ví duï treân chæ coù chæ coù daïng tíeàn toá cuûa
pheùp toaùn ñöôïc caøí ñaët, tuy nhíeân trong C++ cho pheùp ta
caøí ñaët haí daïng pheùp toaùn tíeàn toá vaø haäu toá cuûa haí
pheùp toaùn töï ñoäng taêng/gíaûm. Neá íaøm ñíeàu naøy ta phaûí
ñònh nghóa haí phíeân baûn cuûa haøm o0e"ato"?@. Moät daïng
ñaõ ñònh nghóa ôû ví duï treân, moät daïng nöõa ñònh nghóa nhö
sau:
2+- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
loc o0e"ato"?i*t 7@N
Neáu ñöùng tröôùc toaùn haïng, haøm o0e"ato"?@ seõ
ñöôïc goïí, neáu ñöùng sau toaùn haïng, haøm o0e"ato"?i*t
7@ ñöôïc goïí vaø 7 coù gíaù trò U.
Naây íaø daïng toáng quaùt cho haí pheùp toaùn taêng/gíaûm
ôû daïng tíeàn toá vaø haäu toá:
€€ P"e2i7 i*c"e#e*t
t60e o0e"ato"?@ 3
€€ $od6 o2 0"e2i7 o0e"ato"
4
€€ Post2i7 i*c"e#e*t
t60e o0e"ato"?i*t 7@ 3
€€ $od6 o2 0ost2i7 o0e"ato"
4
€€ P"e2i7 dec"e#e*t
t60e o0e"ato"„„?@ 3
€€ $od6 o2 0"e2i7 o0e"ato"
4
€€ Post2i7 dec"e#e*t
t60e o0e"ato"„„?i*t 7@ 3
€€ $od6 o2 0ost2i7 o0e"ato"
4
1.112.2. &aûi boäi treDn toaùn t'û 1ieát taTt
Ta coù theá taûí boäí moïí pheùp toaùn ngaén cuûa C++ ví duï
nhö c, -c, €c, . ví duï theá híeän taûí boäí cho pheùp toaùn c
loc lociio0e"ato"c?loc o02@
3
lo*gitude c o02%lo*gitude lo*gitudeN
latitude c o02%latitude latitudeN
"etu"* ƒthisN
4
Khí taûí boäí moät trong nhöõng toaùn töû ôû daïng naøy, nhôù
raèng chæ taûí boäí keát hôïp moät pheùp gaùn vôùí moät toaùn töû
Gh*ông 14. )oaùn t*û taûi bo"i 2+9
khaùc.
1.112.3. Haïn cheá cuûa toaùn t'û taûi boäi
Coù moät vaøí haïn cheá khí aùp duïng taûí boäí caùc pheùp
toaùn. Ta khoâng theá thay ñoáí quyeàn öu tíeân cuûa caùc pheùp
toaùn. Ta khoâng theá thay ñoáí soá toaùn haïng cuûa moät pheùp
toaùn (tuy nhíeân ta coù theá choïn hoaëc boû qua moät toaùn
haïng). Ngoaïí tröø moät vaøí tröôøng hôïp ñaët bíeät, ta khoâng
ñöôïc ñònh nghóa tham soá ngaàm ñònh cho caùc pheùp toaùn.
Cuoáí cuøng nhöõng pheùp toaùn % ii %ƒ | khoâng ñöôïc taûí boäí.
Ngoaïí tröø pheùp toaùn gaùn, caùc pheùp toaùn coøn íaïí coù
theá ñöôïc keá thöøa bôûí íôùp daãn xuaát. Tuy nhíeân íôùp daãn
xuaát hoaøn toaøn coù theá taûí boäí moïí toaùn töû (bao goàm caû
caùc toaùn töû ñaõ taûí boäí ôû íôùp cô sôû).
1.11-. TB>W@ IDT I>TZ VBGZ \DT ]Od@A =>UX I=>C@
I=ZQG@
Ta coù theá taûí boäí moät toaùn töû cho íôùp baèng caùch söû
duïng haøm khoâng phaûí íaø thaønh víeân, thöôøng íaø haøm thaân
thíeän cuûa íôùp. Do khoâng phaûí íaø thaønh víeân cuûa íôùp neân
noù khoâng coù con troû this. Vì vaäy moät haøm toaùn töû taûí
boäí thaân thíeän phaûí gôûí tham soá roõ raøng. Nghóa íaø neáu
moät haøm thaân thíeän taûí boäí moät toaùn töû haí ngoâí phaûí
nhaän haí tham soá vaø moät ngoâí phaûí coù moät tham soá. Khí
taûí boäí moät toaùn töû haí ngoâí söû duïng haøm thaân thíeän,
toaùn haïng beân traùí seõ gôûí ñeán tham soá ñaàu tíeân vaø toaùn
haïng beân phaûí gôûí ñeán tham soá thöù haí. Trong ví duï sau
haøm o0e"ato"?@ ñöôïc taïo döôùí daïng haøm thaân thíeän.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
276 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
class loc 3
i*t lo*gitudeX latitudeN
0u$lici
loc?@ 34 €€ *eeded to co*st"uct te#0o"a"ies
loc?i*t lgX i*t lt@ 3
lo*gitude c lgN
latitude c ltN
4
void sho!?@ 3
cout KK lo*gitude KK t tN
cout KK latitude KK tl*tN
4
2"ie*d loc o0e"ato"?loc o0BX loc o02@N€€*o! a 2"ie*d
loc o0e"ato"-?loc o02@N
loc o0e"ato"c?loc o02@N
loc o0e"ato"?@N
4N
€€ No!X is ove"loaded usi*g 2"ie*d 2u*ctio*%
loc o0e"ato"?loc o0BX loc o02@
3
loc te#0N
te#0%lo*gitude c o0B%lo*gitude o02%lo*gitudeN
te#0%latitude c o0B%latitude o02%latitudeN
"etu"* te#0N
4
€€ Ove"load - 2o" loc%
loc lociio0e"ato"-?loc o02@
3
loc te#0N
€€ *otice o"de" o2 o0e"a*ds
te#0%lo*gitude c lo*gitude - o02%lo*gitudeN
te#0%latitude c latitude - o02%latitudeN
"etu"* te#0N
4
€€ Ove"load assig*#e*t 2o" loc%
loc lociio0e"ato"c?loc o02@
3
lo*gitude c o02%lo*gitudeN
Gh*ông 14. )oaùn t*û taûi bo"i 271
latitude c o02%latitudeN
"etu"* ƒthisN€€i%eX "etu"* o$bect that ge*e"ated call
4
€€ Ove"load 2o" loc%
loc lociio0e"ato"?@
3
lo*gitudeN
latitudeN
"etu"* ƒthisN
4
i*t #ai*?@
3
loc o$B?BUX 2U@X o$2? VX 9U@N
o$B c o$B o$2N
o$B%sho!?@N
"etu"* UN
4
Coù moät vaøí haïn cheá khí söû duïng haøm toaùn töû thaân
thíeän. Thöù nhaát ta khoâng theá taûí boäí caùc pheùp toaùn c ?@
gh -L. Thöù haí khí taûí boäí caùc pheùp toaùn taêng gíaûm ta phaûí
söû duïng tham chíeáu.
1.113.1. Q'û ;uïng :rien; +e* taûi boäi \\ 1a$ ??
Neáu muoán söû duïng haøm thaân thíeän ñeá taûí boäí toaùn
töû taêng/gíaûm ta phaûí gôûí toaùn haïng íaø moät tham chíeáu
bôûí vì haøm thaân thíeän khoâng coù con troû this. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class loc 3
i*t lo*gitudeX latitudeN
0u$lici
loc?@ 34
loc?i*t lgX i*t lt@ 3
lo*gitude c lgN
latitude c ltN
4
272 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
void sho!?@ 3
cout KK lo*gitude KK t tN
cout KK latitude KK tl*tN
4
loc o0e"ato"c?loc o02@N
2"ie*d loc o0e"ato"?loc fo0@N
2"ie*d loc o0e"ato"--?loc fo0@N
4N
€€ Ove"load assig*#e*t 2o" loc%
loc lociio0e"ato"c?loc o02@
3
lo*gitude c o02%lo*gitudeN
latitude c o02%latitudeN
"etu"* ƒthisN €€ i%e%X "etu"* o$bect that ge*e"ated
call
4
€€ No! a 2"ie*dN use a "e2e"e*ce 0a"a#ete"%
loc o0e"ato"?loc fo0@
3
o0%lo*gitudeN
o0%latitudeN
"etu"* o0N
4
€€ Ma5e o0-- a 2"ie*dN use "e2e"e*ce%
loc o0e"ato"--?loc fo0@
3
o0%lo*gitude--N
o0%latitude--N
"etu"* o0N
4
i*t #ai*?@
3
loc o$B?BUX 2U@X o$2N
o$B%sho!?@N
o$BN
o$B%sho!?@N €€ dis0la6s BB 2B
o$2 c o$BN
o$2%sho!?@N €€ dis0la6s B2 22
Gh*ông 14. )oaùn t*û taûi bo"i 27
--o$2N
o$2%sho!?@N €€ dis0la6s BB 2B
"etu"* UN
4
Neáu muoán taûí boäí daïng haäu toá cuûa pheùp toaùn
taêng/gíaûm baèng caùch söû duïng haøm thaân thíeän, ta chæ ra
moät tham soá nguyeân thöù haí. Ví duï:
€€ 2"ie*dX 0ost2i7 ve"sio* o2
2"ie*d loc o0e"ato"?loc fo0X i*t 7@N
1.113.2. Ha$/ toaùn t'û thaDn thieän bo* ,ung tính
/eN/ ;eûo
Trong nhíeàu tröôøng hôïp ta coù theá söû duïng haøm toaùn
töû thaân thíeän hay haøm toaùn töû thaønh víeân ñeá taûí boäí
moät pheùp toaùn. Trong moät soá tröôøng hôïp, toát nhaát íaø
neân söû duïng haøm toaùn töû thaønh víeân. Tuy nhíeân coù moät
tình huoáng maø trong ñoù taûí boäí baèng caùch söû duïng haøm
toaùn töû thaân thíeän íaøm taêng tính meàm deûo cuûa pheùp
toaùn taûí boäí.
Ví duï xeùt íôùp CL ñònh nghóa moät haøm thaønh víeân
o0e"ato"?@ ñeá coäng ñoáí töôïng cuûa íôùp ñoù vôùí soá
nguyeân. Ví duï ñoáí töôïng coù teân íaø O$ thuoäc íôùp CL, khí ñoù
bíeáu thöùc sau íaø hôïp íeä:
O$ BUU €€ valid
Trong tình huoáng naøy O$ sính ra íôøí goïí haøm, nhöng ñíeàu
gì xaûy ra vôùí bíeáu thöùc:
BUU O$ €€ i*valid
Trong tình huoáng naøy soá nguyeân xuaát híeän beân traùí
vaø noù khoâng theá goïí haøm toaùn töû do ñoù trình bíeân dòch
khoâng thöïc híeän caâu íeänh naøy. Neá gíaûí quyeát tình huoáng
naøy ta söû duïng haøm toaùn töû thaân thíeän. Khí ñoù caû haí
27& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
toaùn haïng ñeàu ñöôïc gôûí roõ raøng ñeán haøm toaùn töû. Vì
vaäy o$becti*tege" vaø i*tege"o$bect, chæ ñôn gíaûn íaø taûí
boäí haøm naøy haí íaàn:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class loc 3
i*t lo*gitudeX latitudeN
0u$lici
loc?@ 34
loc?i*t lgX i*t lt@ 3
lo*gitude c lgN
latitude c ltN
4
void sho!?@ 3
cout KK lo*gitude KK t tN
cout KK latitude KK tl*tN
4
2"ie*d loc o0e"ato"?loc o0BX i*t o02@N
2"ie*d loc o0e"ato"?i*t o0BX loc o02@N
4N
€€ is ove"loaded 2o" loc i*t%
loc o0e"ato"?loc o0BX i*t o02@
3
loc te#0N
te#0%lo*gitude c o0B%lo*gitude o02N
te#0%latitude c o0B%latitude o02N
"etu"* te#0N
4
€€ is ove"loaded 2o" i*t loc%
loc o0e"ato"?i*t o0BX loc o02@
3
loc te#0N
te#0%lo*gitude c o0B o02%lo*gitudeN
te#0%latitude c o0B o02%latitudeN
"etu"* te#0N
4
i*t #ai*?@
Gh*ông 14. )oaùn t*û taûi bo"i 274
3
loc o$B?BUX 2U@X o$2? VX 9U@X o$9?TX BY@N
o$B%sho!?@N
o$2%sho!?@N
o$9%sho!?@N
o$B c o$2 BUN €€ $oth o2 these
o$9 c BU o$2N €€ a"e valid
o$B%sho!?@N
o$9%sho!?@N
"etu"* UN
4
1.11+. T>TZ VBGZ IJQC@ IB>W@ IDT @Qj P>U ]QFQIQ
Ta coù theá taûí boäí treân toaùn töû *e! vaø delete. Ta coù
theá íaøm ñíeàu naøy neáu muoán söû duïng moät vaøí phöông
phaùp caáp phaùp boä nhôù ñaëc bíeät. Ví duï ta muoán caáp phaùt
cho moät chöông trình maø söû duïng boä nhôù aûo treân ñóa khí
boä nhôù hea= ñaõ heát. Daïng chung ñeá taûí boäí toaùn töû *e!
vaø delete:
€€ Allocate a* o$bect%
void ƒo0e"ato" *e!?si8e_t si8e@
3
€ƒ Pe"2o"# allocatio*% Th"o! $ad_alloc o* 2ailu"e%
Co*st"ucto" called auto#aticall6% ƒ€
"etu"* 0oi*te"_to_#e#o"6N
4
€€ Celete a* o$bect%
void o0e"ato" delete?void ƒ0@
3
€ƒ F"ee #e#o"6 0oi*ted to $6 0%
Cest"ucto" called auto#aticall6% ƒ€
4
si8e_t íaø kíeáu ñònh nghóa khaû naêng íöu tröõ cuûa vuøng
nhôù ñöôïc caáp phaùt (si8e_t thöôøng íaø kíeáu soá nguyeân
khoâng daáu), si8e chöùa soá b?te caàn thíeát ñeá íöu tröõ caùc
27+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
ñoáí töôïng ñaõ ñöôïc caáp phaùt. Haøm taûí boäí *e! phaûí traû veà
con troû ñeán boä nhôù ñaõ caáp phaùt hoaëc neùm moät ngoaïí íeä
$ad_alloc neáu haøm caáp phaùt gaëp íoãí. Khí caáp phaùt moät
ñoáí töôïng baèng toaùn töû *e! (hoaëc haøm do ngöôøí duøng ñònh
nghóa hoaëc khoâng) caáu töû cuûa ñoáí töôïng seõ ñöôïc goïí töï
ñoäng.
Haøm delete nhaän con troû ñeán vuøng nhôù caàn ñöôïc
gíaûí phoùng, sau ñoù noù gíaûí phoùng boä nhôù ñaõ caáp phaùt
tröôùc ñoù cho heä thoáng. Khí moät ñoáí töôïng bò gíaûí phoùng,
haøm huûy töû seõ töï ñoäng thöïc híeän. Ví duï sau ñaây seõ taûí
boäí toaùn töû *e! vaø delete baèng caùch duøng haøm caáp phaùt
boä nhôù trong thö víeän chuaán nhö #alloc?@ vaø 2"ee?@.
Ji*clude Kiost"ea#L
Ji*clude Kcstdli$L
Ji*clude K*e!L
usi*g *a#es0ace stdN
class loc 3
i*t lo*gitudeX latitudeN
0u$lici
loc?@ 34
loc?i*t lgX i*t lt@ 3
lo*gitude c lgN
latitude c ltN
4
void sho!?@ 3
cout KK lo*gitude KK t tN
cout KK latitude KK tl*tN
4
void ƒo0e"ato" *e!?si8e_t si8e@N
void o0e"ato" delete?void ƒ0@N
4N
€€ *e! ove"loaded "elative to loc%
void ƒlociio0e"ato" *e!?si8e_t si8e@
3
Gh*ông 14. )oaùn t*û taûi bo"i 277
void ƒ0N
cout KK tI* ove"loaded *e!%l*tN
0 c #alloc?si8e@N
i2?^0@ 3
$ad_alloc $aN
th"o! $aN
4
"etu"* 0N
4
€€ delete ove"loaded "elative to loc%
void lociio0e"ato" delete?void ƒ0@
3
cout KK tI* ove"loaded delete%l*tN
2"ee?0@N
4
i*t #ai*?@
3
loc ƒ0BX ƒ02N
t"6 3
0B c *e! loc ?BUX 2U@N
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* e""o" 2o" 0B%l*tN
"etu"* BN
4
t"6 3
02 c *e! loc ?-BUX -2U@N
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* e""o" 2o" 02%l*tN
"etu"* BNN
4
0B-Lsho!?@N
02-Lsho!?@N
delete 0BN
delete 02N
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
I* ove"loaded *e!%
27- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
I* ove"loaded *e!%
BU 2U
-BU -2U
I* ove"loaded delete%
I* ove"loaded delete%
Ta coù theá taûí boäí toaùn töû *e! vaø delete toaøn cuïc
baèng caùch taûí boäí nhöõng toaùn töû naøy beân ngoaøí taát caû
caùc íôùp. Khí toaùn töû *e! vaø delete ñöôïc taûí boäí toaøn cuïc
toaùn töû ngaàm ñònh seõ bò boû qua vaø toaùn töû môùí seõ ñöôïc
söû duïng cho taát caû caùc yeâu caàu caáp phaùt. Toáng quaùt, khí
toaùn töû *e! vaø delete xuaát híeän ñaàu tíeân chöông trình dòch
seõ kíeám tra xem coù hay khoâng noù ñònh nghóa ríeâng cho íôùp
ñoù. Neáu coù, phíeân baûn naøy seõ ñöôïc söû duïng, neáu khoâng
C++ seõ söû duïng ñònh nghóa toaøn cuïc. Xeùt ví duï:
Ji*clude Kiost"ea#L
Ji*clude Kcstdli$L
Ji*clude K*e!L
usi*g *a#es0ace stdN
class loc 3
i*t lo*gitudeX latitudeN
0u$lici
loc?@ 34
loc?i*t lgX i*t lt@ 3
lo*gitude c lgN
latitude c ltN
4
void sho!?@ 3
cout KK lo*gitude KK t tN
cout KK latitude KK tl*tN
4
4N
€€ …lo$al *e!
void ƒo0e"ato" *e!?si8e_t si8e@
3
void ƒ0N
Gh*ông 14. )oaùn t*û taûi bo"i 279
0 c #alloc?si8e@N
i2?^0@ 3
$ad_alloc $aN
th"o! $aN
4
"etu"* 0N
4
€€ …lo$al delete
void o0e"ato" delete?void ƒ0@
3
2"ee?0@N
4
i*t #ai*?@
3
loc ƒ0BX ƒ02N
2loat ƒ2N
t"6 3
0B c *e! loc ?BUX 2U@N
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* e""o" 2o" 0B%l*tN
"etu"* BNN
4
t"6 3
02 c *e! loc ?-BUX -2U@N
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* e""o" 2o" 02%l*tN
"etu"* BNN
4
t"6 3
2 c *e! 2loatN €€ uses ove"loaded *e!X too
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* e""o" 2o" 2%l*tN
"etu"* BNN
4
ƒ2 c BU%BUFN
cout KK ƒ2 KK tl*tN
0B-Lsho!?@N
02-Lsho!?@N
2-6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
delete 0BN
delete 02N
delete 2N
"etu"* UN
4
1.115.1. &aûi boäi toaùn t'û neU 1a$ ;ete!e cho /aûng
Ta coù theá caáp phaùt boä nhôù cho maûng caùc ñoáí töôïng,
baèng caùch taûí boäí toaùn töû *e! vaø delete theo daïng sau:
€€ Allocate a* a""a6 o2 o$bects%
void ƒo0e"ato" *e!gh?si8e_t si8e@
3
€ƒ Pe"2o"# allocatio*% Th"o! $ad_alloc o* 2ailu"e%
Co*st"ucto" 2o" each ele#e*t called auto#aticall6% ƒ€
"etu"* 0oi*te"_to_#e#o"6N
4
€€ Celete a* a""a6 o2 o$bects%
void o0e"ato" deletegh?void ƒ0@
3
€ƒ F"ee #e#o"6 0oi*ted to $6 0%
Cest"ucto" 2o" each ele#e*t called auto#aticall6%
ƒ€
4
Khí caáp phaùt cho moät maûng, haøm caáu töû cho moãí ñoáí
töôïng trong maûng seõ töï ñoäng ñöôïc goïí. Khí gíaûí phoùng moät
maûng, haøm huûy töû cho moãí ñoáí töôïng seõ ñöôïc goïí. Ta
khoâng caàn cung caáp maõ roõ raøng cho haønh ñoäng naøy.
Chöông trình sau seõ cung caáp vaø gíaûí phoùng moät ñoáí töôïng
vaø moät maûng caùc ñoáí töôïng kíeáu loc.
Ji*clude Kiost"ea#L
Ji*clude Kcstdli$L
Ji*clude K*e!L
usi*g *a#es0ace stdN
class loc 3
i*t lo*gitudeX latitudeN
Gh*ông 14. )oaùn t*û taûi bo"i 2-1
0u$lici
loc?@ 3lo*gitude c latitude c UN4
loc?i*t lgX i*t lt@ 3
lo*gitude c lgN
latitude c ltN
4
void sho!?@ 3
cout KK lo*gitude KK t tN
cout KK latitude KK tl*tN
4
void ƒo0e"ato" *e!?si8e_t si8e@N
void o0e"ato" delete?void ƒ0@N
void ƒo0e"ato" *e!gh?si8e_t si8e@N
void o0e"ato" deletegh?void ƒ0@N
4N
€€ *e! ove"loaded "elative to loc%
void ƒlociio0e"ato" *e!?si8e_t si8e@
3
void ƒ0N
cout KK tI* ove"loaded *e!%l*tN
0 c #alloc?si8e@N
i2?^0@ 3
$ad_alloc $aN
th"o! $aN
4
"etu"* 0N
4
€€ delete ove"loaded "elative to loc%
void lociio0e"ato" delete?void ƒ0@
3
cout KK tI* ove"loaded delete%l*tN
2"ee?0@N
4
€€ *e! ove"loaded 2o" loc a""a6s%
void ƒlociio0e"ato" *e!gh?si8e_t si8e@
3
void ƒ0N
cout KK tasi*g ove"load *e!gh%l*tN
2-2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
0 c #alloc?si8e@N
i2?^0@ 3
$ad_alloc $aN
th"o! $aN
4
"etu"* 0N
4
€€ delete ove"loaded 2o" loc a""a6s%
void lociio0e"ato" deletegh?void ƒ0@
3
cout KK tF"eei*g a""a6 usi*g ove"loaded deleteghl*tN
2"ee?0@N
4
i*t #ai*?@
3
loc ƒ0BX ƒ02N
i*t iN
t"6 3
0B c *e! loc ?BUX 2U@N €€ allocate a* o$bect
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* e""o" 2o" 0B%l*tN
"etu"* BNN
4
t"6 3
02 c *e! loc gBUhN €€ allocate a* a""a6
4 catch ?$ad_alloc 7a@ 3
cout KK tAllocatio* e""o" 2o" 02%l*tN
"etu"* BNN
4
0B-Lsho!?@N
2o"?icUN iKBUN i@
02gih%sho!?@N
delete 0BN €€ 2"ee a* o$bect
delete gh 02N €€ 2"ee a* a""a6
"etu"* UN
4
1.115.2. &aûi boäi <hieDn baûn nothroU cuûa neU 1a$
;e!ete
Gh*ông 14. )oaùn t*û taûi bo"i 2-
Cuù phaùp:
€€ Noth"o! ve"sio* o2 *e!%
void ƒo0e"ato" *e!?si8e_t si8eX co*st *oth"o!_t f*@
3
€€ Pe"2o"# allocatio*%
i2?success@ "etu"* 0oi*te"_to_#e#o"6N
else "etu"* UN
4
€€ Noth"o! ve"sio* o2 *e! 2o" a""a6s%
void ƒo0e"ato" *e!gh?si8e_t si8eX co*st *oth"o!_t f*@
3
€€ Pe"2o"# allocatio*%
i2?success@ "etu"* 0oi*te"_to_#e#o"6N
else "etu"* UN
4
void o0e"ato" delete?void ƒ0X co*st *oth"o!_t f*@
3
€€ 2"ee #e#o"6
4
void o0e"ato" deletegh?void ƒ0X co*st *oth"o!_t f*@
3
€€ 2"ee #e#o"6
4
Kíeáu *oth"o!_t ñònh nghóa trong K*e!L%
1.114. T>TZ VBGZ XBGI P>UZ IB>W@ IDT Y>eS VZQGI
1.118.1. &aûi boäi treDn AB
Trong C++, gh ñöôïc coí nhö íaø toaùn töû haí ngoâí, do ñoù
daïng toáng quaùt cuûa haøm thaønh víeân o0e"ato"gh?@ nhö sau:
t60e class-*a#eiio0e"ato"gh?i*t i@
3
€€ % % %
4
Tham soá khoâng baét buoäc íaø kíeáu i*t, tuy nhíeân haøm
o0e"ato"gh?@ thöôøng phaûí cung caáp chæ soá, vì vaäy tham soá
2-& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
kíeáu i*t thöôøng ñöôïc söû duïng.
Cho ñoáí töôïng coù teân íaø O, bíeáu thöùc:
Og9h
Chuyeán sang goïí haøm taûí boäí toaùn töû íaø:
O%o0e"ato"gh?9@
Gíaù trò bíeáu díeãn chæ soá seõ ñöôïc gôûí ñeán haøm
o0e"ato"gh?@. Con troû this seõ troû ñeán O, ñaây íaø ñoáí töôïng
phaùt sính ra íôøí goïí haøm.
Trong chöông trình sau, at60e khaí baùo moät maûng ba soá
nguyeân. Haøm caáu töû cuûa noù khôûí taïo moãí thaønh víeân
cuûa maûng moät gíaù trò. Haøm taûí boäí toaùn töû o0e"ato"gh?@
seõ traû veà gíaù trò cuûa maûng vôùí chæ soá ñöôïc truyeàn trong
tham soá.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class at60e 3
i*t ag9hN
0u$lici
at60e?i*t iX i*t bX i*t 5@ 3
agUh c iN
agBh c bN
ag2h c 5N
4
i*t o0e"ato"gh?i*t i@ 3 "etu"* agihN 4
4N
i*t #ai*?@
3
at60e o$?BX 2X 9@N
cout KK o$gBhN €€ dis0la6s 2
"etu"* UN
4
Ta coù theá thíeát keá haøm o0e"ato"gh?@ sao cho noù coù
Gh*ông 14. )oaùn t*û taûi bo"i 2-4
theá söû duïng ñöôïc beân phaûí vaø beân traùí pheùp toaùn gaùn.
Neá íaøm ñíeàu naøy ta cho gíaù trò traû veà cuûa haøm
o0e"ato"gh?@ íaø moät tham chíeáu. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class at60e 3
i*t ag9hN
0u$lici
at60e?i*t iX i*t bX i*t 5@ 3
agUh c iN
agBh c bN
ag2h c 5N
4
i*t fo0e"ato"gh?i*t i@ 3 "etu"* agihN 4
4N
i*t #ai*?@
3
at60e o$?BX 2X 9@N
cout KK o$gBhN €€ dis0la6s 2
cout KK t tN
o$gBh c 2VN €€ gh o* le2t o2 c
cout KK o$gBhN €€ *o! dis0la6s 2V
"etu"* UN
4
Bôûí vì haøm o0e"ato"gh?@ traû veà moät tham chíeáu ñeán
moät phaàn töû cuûa maûng ñöôïc chæ soá bôûí i, do ñoù noù coù
theá ñöôïc söû duïng beân traùí pheùp gaùn.
Moät ñíeám thuaän íôïí ñeá taûí boäí toaùn töû gh íaø cho
pheùp ta caøí ñaët caùch truy caäp ñeán phaàn töû cuûa maûng an
toaøn hôn. Nhö ta ñaõ bíeát, trong C++ ta coù theá truy xuaát ñeán
nhöõng phaàn töû naèm ngoaøí bíeân khaí baùo maûng. Ví duï sau
boá sung chöùc naêng kíeám tra bíeân maûng.
€€ A sa2e a""a6 e7a#0le%
Ji*clude Kiost"ea#L
2-+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Ji*clude Kcstdli$L
usi*g *a#es0ace stdN
class at60e 3
i*t ag9hN
0u$lici
at60e?i*t iX i*t bX i*t 5@ 3
agUh c iN
agBh c bN
ag2h c 5N
4
i*t fo0e"ato"gh?i*t i@N
4N
€€ P"ovide "a*ge chec5i*g 2o" at60e%
i*t fat60eiio0e"ato"gh?i*t i@
3
i2?iKU ˆˆ iL 2@ 3
cout KK tBou*da"6 Š""o"l*tN
e7it?B@N
4
"etu"* agihN
4
i*t #ai*?@
3
at60e o$?BX 2X 9@N
cout KK o$gBhN €€ dis0la6s 2
cout KK t tN
o$gBh c 2VN €€ gh a00ea"s o* le2t
cout KK o$gBhN €€ dis0la6s 2V
o$g9h c YYN €€ge*e"ates "u*ti#e e""o"X 9 out-o2-"a*ge
"etu"* UN
4
Trong chöông trình treân khí caâu íeänh:
o$g9h c YYN
thöïc thí, íoãí bíeân maûng seõ xuaát híeän bôûí haøm
o0e"ato"gh?@ vaø chöông trình naøy seõ keát thuùc tröôùc khí noù
íaøm hoûng moät chöông trình naøo ñoù.
Gh*ông 14. )oaùn t*û taûi bo"i 2-7
1.118.2. &aûi boäi treDn ("
Khí taûí boäí toaùn töû goïí haøm ?@, thöïc teá ta khoâng taïo
ra caùch môùí ñeá goïí haøm. Nuùng hôn íaø ta taïo ra moät haøm
toaùn töû maø coù theá gôûí ñeán ñeán haøm soá tham soá baát kì.
Ví duï cho moät haøm toaùn töû taûí boäí khaí baùo nhö sau:
dou$le o0e"ato"?@?i*t aX 2loat 2X cha" ƒs@N
vaø moät ñoáí töôïng O thuoäc íôùp naøy. Khí ñoù caâu íeänh:
O?BUX 29%9YX thit@N
Chuyeán sang íôøí goïí haøm
O%o0e"ato"?@?BUX 29%9YX thit@N
Toáng quaùt khí taûí boäí toaùn töû ?@, ta ñònh nghóa caùc
tham soá gôûí ñeán haøm. Khí söû duïng toaùn töû ?@ trong chöông
trình, caùc tham soá hình thöùc chæ ra seõ ñöôïc sao cheùp vaøo
tham soá thöïc. Noáí töôïng maø phaùt sính ra íôøí goïí haøm (ví duï
O) ñöôïc troû bôûí con troû this.
Ví duï taûí boäí toaùn töû ?@ cho íôùp loc
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class loc 3
i*t lo*gitudeX latitudeN
0u$lici
loc?@ 34
loc?i*t lgX i*t lt@ 3
lo*gitude c lgN
latitude c ltN
4
void sho!?@ 3
cout KK lo*gitude KK t tN
cout KK latitude KK tl*tN
4
loc o0e"ato"?loc o02@N
loc o0e"ato"?@?i*t iX i*t b@N
2-- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4N
€€ Ove"load ? @ 2o" loc%
loc lociio0e"ato"?@?i*t iX i*t b@
3
lo*gitude c iN
latitude c bN
"etu"* ƒthisN
4
€€ Ove"load 2o" loc%
loc lociio0e"ato"?loc o02@
3
loc te#0N
te#0%lo*gitude c o02%lo*gitude lo*gitudeN
te#0%latitude c o02%latitude latitudeN
"etu"* te#0N
4
i*t #ai*?@
3
loc o$B?BUX 2U@X o$2?BX B@N
o$B%sho!?@N
o$B?TX R@N €€ ca* $e e7ecuted $6 itsel2
o$B%sho!?@N
o$B c o$2 o$B?BUX BU@N €€ca* $e used i* e70"essio*s
o$B%sho!?@N
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
BU 2U
T R
BB BB
Chuù yù raèng, khí taûí boäí toaùn töû?@, ta coù theá söû duïng
moïí kíeáu tham soá vaø traû veà moïí kíeáu döõ ííeäu.
1.118.3. &aûi boäi treDn ?@
Toaùn töû con troû hay coøn goïí íaø toaùn töû truy caäp
thaønh víeân ñöôïc coí nhö íaø toaùn töû moät ngoâí khí taûí boäí.
Gh*ông 14. )oaùn t*û taûi bo"i 2-9
Daïng toáng quaùt nhö sau:
o$bect-Lele#e*tN
OU ñaây o$bect íaø ñoáí töôïng phaùt sính ra íôøí goïí haøm
taûí boäí toaùn töû. Haøm o0e"ato"-L?@ phaûí traû veà moät con
troû ñoáí töôïng cuûa íôùp maø haøm o0e"ato"-L?@ ñang hoaït
ñoäng treân ñoù. ele#e*t íaø moät vaøí thaønh víeân coù theá truy
caäp ñöôïc beân trong ñoáí töôïng.
Chöông trình sau mính hoïa taûí boäí toaùn töû -L baèng caùch
theá híeän söï töông ñöông gíöõa haí caùch söû duïng o$%i vaø o$-
Li khí haøm o0e"ato"-L?@ traû veà con troû this.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class #6class 3
0u$lici
i*t iN
#6class ƒo0e"ato"-L?@ 3"etu"* thisN4
4N
i*t #ai*?@
3
#6class o$N
o$-Li c BUN €€ sa#e as o$%i
cout KK o$%i KK t t KK o$-LiN
"etu"* UN
4
Haøm o0e"ato"-L?@ phaûí íaø thaønh víeân cuûa íôùp maø
noù ñang íaøm víeäc.
1.118.#. &aûi boäi treDn toaùn t'û ;aáu <ha*)
Ta coù theá taûí boäí toaùn töû daáu phaáy (X). Daáu phaáy
íaø toaùn töû haí ngoâí vaø gíoáng nhö taát caû caùc toaùn töû taûí
boäí khaùc, ta coù theá taïo ra moät taûí boäí daáu phaáy thöïc thí
moïí hoaït ñoäng maø baïn muoán. Tuy nhíeân neáu ta muoán toaùn
296 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
töû daáu phaáy hoaït ñoäng gíoáng nhö daïng chuaán thì phíeân
baûn caøí ñaët phaûí boû qua taát caû caùc gíaù trò cuûa caùc
toaùn haïng ngoaïí tröø gíaù trò beân phaûí nhaát. Gíaù trò beân
phaûí nhaát seõ íaø gíaù trò traû veà cuûa toaùn töû daáu phaáy.
Naây íaø caùch thöùc daáu phaáy íaøm víeäc gíoáng nhö ngaàm
ñònh trong C++. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class loc 3
i*t lo*gitudeX latitudeN
0u$lici
loc?@ 34
loc?i*t lgX i*t lt@ 3
lo*gitude c lgN
latitude c ltN
4
void sho!?@ 3
cout KK lo*gitude KK t tN
cout KK latitude KK tl*tN
4
loc o0e"ato"?loc o02@N
loc o0e"ato"X?loc o02@N
4N
€€ ove"load co##a 2o" loc
loc lociio0e"ato"X?loc o02@
3
loc te#0N
te#0%lo*gitude c o02%lo*gitudeN
te#0%latitude c o02%latitudeN
cout KK o02%lo*gitude KK t t KK o02%latitude KK tl*tN
"etu"* te#0N
4
€€ Ove"load 2o" loc
loc lociio0e"ato"?loc o02@
3
loc te#0N
Gh*ông 14. )oaùn t*û taûi bo"i 291
te#0%lo*gitude c o02%lo*gitude lo*gitudeN
te#0%latitude c o02%latitude latitudeN
"etu"* te#0N
4
i*t #ai*?@
3
loc o$B?BUX 2U@X o$2? VX 9U@X o$9?BX B@N
o$B%sho!?@N
o$2%sho!?@N
o$9%sho!?@N
cout KK tl*tN
o$B c ?o$BX o$2o$2X o$9@N
o$B%sho!?@N €€ dis0la6s B BX the value o2 o$9
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
BU 2U
V 9U
B B
BU WU
B B
B B
Gh*ông 1+. Keá th*'a 29
C=DL@A 1-. 0QR I=DU>
1.11#. 6ZQ?O _=ZQM@ IJO^ S>GH FLWH SL \LT
Khí moät íôùp keá thöøa íôùp khaùc, caùc thaønh víeân cuûa
íôùp cô sôû seõ íaø thaønh víeân cuûa íôùp daãn xuaát. Lôùp keá
thöøa söû duïng khuoân daïng khaí baùo sau:
class de"ived-class-*a#e i access $ase-class-*a#e 3
€€ $od6 o2 class
4N
Traïng thaùí truy caäp vaøo thaønh víeân íôùp cô sôû beân
trong íôùp daãn xuaát ñöôïc xaùc ñònh bôûí access. Naëc taû acess
seõ íaø moät trong ba töø khoùa sau: 0u$lic, 0"ivate, 0"otected.
Neáu khoâng chæ ra access, gíaù trò ngaàm ñònh cuûa access íaø
0"ivate. Neáu íôùp daãn xuaát íaø moät caáu truùc, ngaàm ñònh
cuûa access íaø 0u$lic.
Khí ñaëc taû truy caäp cho moät íôùp cô sôû íaø 0u$lic, taát
caû caùc thaønh víeân 0u$lic cuûa íôùp cô sôû íaø thaønh víeân
0u$lic cuûa íôùp daãn xuaát vaø taát caû caùc thaønh víeân
0"otected cuûa íôùp cô sôû íaø thaønh víeân 0"otected cuûa íôùp
daãn xuaát. Trong taát caû caùc tröôøng hôïp, thaønh víeân 0"ivate
cuûa íôùp cô sôû vaãn duy trì tính chaát 0"ivate vaø caùc thaønh
víeân cuûa íôùp daãn xuaát khoâng theá truy caäp ñöôïc. Ví duï sau
ñoáí töôïng coù kíeáu de"ived coù theá truy caäp tröïc tíeáp vaøo
thaønh víeân 0u$lic cuûa íôùp $ase.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
i*t iX bN
0u$lici
void set?i*t aX i*t $@ 3 icaN bc$N 4
29& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
void sho!?@ 3 cout KK i KK t t KK b KK tl*tN 4
4N
class de"ived i 0u$lic $ase 3
i*t 5N
0u$lici
de"ived?i*t 7@ 3 5c7N 4
void sho!5?@ 3 cout KK 5 KK tl*tN 4
4N
i*t #ai*?@
3
de"ived o$?9@N
o$%set?BX 2@N €€ access #e#$e" o2 $ase
o$%sho!?@N €€ access #e#$e" o2 $ase
o$%sho!5?@N €€ uses #e#$e" o2 de"ived class
"etu"* UN
4
Khí íôùp cô sôû ñöôïc keá thöøa baèng caùch söû duïng
0"ivate, taát caùc thaønh víeân 0u$lic vaø 0"otected cuûa íôùp cô
sôû trôû thaønh thaønh víeân 0"ivate cuûa íôùp daãn xuaát. Níeàu
naøy coù nghóa íaø noù vaãn coù theá truy caäp bôûí thaønh víeân
cuûa íôùp daãn xuaát nhöng khoâng theá truy caäp bôûí nhöõng
phaàn trong chöông trình khoâng phaûí íaø thaønh víeân cuûa cuûa
íôùp cô sôû hoaëc cuûa íôùp daãn xuaát. Ví duï chöông trình sau seõ
khoâng bíeân dòch bôûí vì caû haí phöông thöùc set?@ vaø sho!?@
trôû thaønh 0"ivate cuûa íôùp de"ived:
€€ This 0"og"a# !o*wt co#0ile%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
i*t iX bN
0u$lici
void set?i*t aX i*t $@ 3 icaN bc$N 4
void sho!?@ 3 cout KK i KK t t KK b KK tl*tN4
4N
€€ Pu$lic ele#e*ts o2 $ase a"e 0"ivate i* de"ived%
Gh*ông 1+. Keá th*'a 294
class de"ived i 0"ivate $ase 3
i*t 5N
0u$lici
de"ived?i*t 7@ 3 5c7N 4
void sho!5?@ 3 cout KK 5 KK tl*tN 4
4N
i*t #ai*?@
3
de"ived o$?9@N
o$%set?BX 2@N €€ e""o"X ca*wt access set?@
o$%sho!?@N €€ e""o"X ca*wt access sho!?@
"etu"* UN
4
1.12/. T=>U@= PZQC@ HJBIQSIQ] P>U _QR I=DU>
HJBIQSIQ]
1.12>.1. &ha$nh 1ieDn <rotecte;
Töø khoùa 0"otected trong C++ cung caáp theâm tính meàm
deûo trong cô cheá keá thöøa. Khí moät thaønh víeân cuûa íôùp
ñöôïc khaí baùo íaø 0"otected, nhöõng thaønh víeân naøy seõ
khoâng ñöôïc truy caäp bôûí caùc thaønh phaàn khoâng phaûí íaø
thaønh víeân. Tuy nhíeân coù söï khaùc nhau raát cô baûn trong
víeäc keá thöøa.
Nhö ñaõ ñeà caäp ôû treân, thaønh víeân 0"ivate cuûa íôùp cô
sôû khoâng theá truy caäp bôûí phaàn khaùc cuûa chöông trình keá
caû íôùp daãn xuaát. Tuy nhíeân thaønh víeân 0"otected coù caùch
thöùc truy caäp khaùc. Neáu íôùp cô sôû ñöôïc keá thöøa íaø 0u$lic,
khí ñoù thaønh víeân 0"otected cuûa íôùp cô sôû trôû thaønh
thaønh víeân 0"otected cuûa íôùp daãn xuaát vaø do ñoù noù coù
theá truy caäp trong íôùp daãn xuaát. Baèng caùch söû duïng
0"otected, ta coù theá taïo ra thaønh víeân cuûa íôùp cô sôû íaø
0"ivate nhöng vaãn coù theá ñöôïc keá thöøa vaø truy caäp bôûí
29+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
moät íôùp daãn xuaát. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0"otectedi
i*t iX bN€€0"ivate to $aseX $ut accessi$le $6 de"ived
0u$lici
void set?i*t aX i*t $@ 3 icaN bc$N 4
void sho!?@ 3 cout KK i KK t t KK b KK tl*tN 4
4N
class de"ived i 0u$lic $ase 3
i*t 5N
0u$lici
€€ de"ived #a6 access $asews i a*d b
void set5?@ 3 5ciƒbN 4
void sho!5?@ 3 cout KK 5 KK tl*tN 4
4N
i*t #ai*?@
3
de"ived o$N
o$%set?2X 9@N €€ OOX 5*o!* to de"ived
o$%sho!?@N €€ OOX 5*o!* to de"ived
o$%set5?@N
o$%sho!5?@N
"etu"* UN
4
Trong ví duï treân, $ase ñöôïc keá thöøa bôûí de"ived baèng
ñaëc taû 0u$lic vaø bôûí vì i vaø b íaø ñöôïc khaí baùo 0"otected,
haøm set5?@ cuûa íôùp daãn xuaát coù theá truy caäp chuùng.
Neáu i vaø b ñöôïc khaí baùo íaø 0"ivate trong íôùp $ase, khí ñoù
de"ived khoâng theá truy caäp ñeán noù vaø chöông trình khoâng
bíeân dòch.
Khí moät íôùp daãn xuaát ñöôïc söû duïng nhö moät íôùp cô
sôû cho íôùp daãn xuaát khaùc, moïí thaønh víeân 0"otected cuûa
Gh*ông 1+. Keá th*'a 297
íôùp cô sôû ban ñaàu maø ñöôïc keá thöøa (chaúng haïn 0u$lic)
bôûí íôùp daãn xuaát ñaàu tíeân cuõng coù theá ñöôïc keá thöøa nhö
íaø 0"otected moät íaàn nöõa bôûí íôùp daãn xuaát thöù haí. Ví duï
chöông trình sau íaø hôïp íeä vaø de"ived2 coù theá truy caäp i vaø
b:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0"otectedi
i*t iX bN
0u$lici
void set?i*t aX i*t $@ 3 icaN bc$N 4
void sho!?@ 3 cout KK i KK t t KK b KK tl*tN 4
4N
€€ i a*d b i*he"ited as 0"otected%
class de"ivedB i 0u$lic $ase 3
i*t 5N
0u$lici
void set5?@ 3 5 c iƒbN 4 €€ legal
void sho!5?@ 3 cout KK 5 KK tl*tN 4
4N
€€ i a*d b i*he"ited i*di"ectl6 th"ough de"ivedB%
class de"ived2 i 0u$lic de"ivedB 3
i*t #N
0u$lici
void set#?@ 3 # c i-bN 4 €€ legal
void sho!#?@ 3 cout KK # KK tl*tN 4
4N
i*t #ai*?@
3
de"ivedB o$BN
de"ived2 o$2N
o$B%set?2X 9@N
o$B%sho!?@N
o$B%set5?@N
o$B%sho!5?@N
29- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
o$2%set?9X Y@N
o$2%sho!?@N
o$2%set5?@N
o$2%set#?@N
o$2%sho!5?@N
o$2%sho!#?@N
"etu"* UN
4
Tuy nhíeân neáu $ase ñöôïc keá thöøa íaø 0"ivate, khí ñoù
taát caû caùc thaønh víeân cuûa $ase seõ trôû thaønh thaønh víeân
0"ivate trong íôùp de"ivedB, ñíeàu naøy coù nghóa íaø noù khoâng
theá truy caäp bôûí de"ived2 (tuy nhíeân i vaø b vaãn coù theá truy
caäp bôûí de"ivedB). Tình huoáng naøy mính hoïa bôûí chöông trình
sau:
€€ This 0"og"a# !o*wt co#0ile%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0"otectedi
i*t iX bN
0u$lici
void set?i*t aX i*t $@ 3 icaN bc$N 4
void sho!?@ 3 cout KK i KK t t KK b KK tl*tN 4
4N
€€ No!X all ele#e*ts o2 $ase a"e 0"ivate i* de"ivedB%
class de"ivedB i 0"ivate $ase 3
i*t 5N
0u$lici
€€ this is legal $ecause i a*d b a"e 0"ivate to
de"ivedB
void set5?@ 3 5 c iƒbN 4 €€ OO
void sho!5?@ 3 cout KK 5 KK tl*tN 4
4N
€€ Access to iX bX set?@X a*d sho!?@ *ot i*he"ited%
class de"ived2 i 0u$lic de"ivedB 3
i*t #N
Gh*ông 1+. Keá th*'a 299
0u$lici
€€ illegal $ecause i a*d b a"e 0"ivate to de"ivedB
void set#?@ 3 # c i-bN 4 €€ Š""o"
void sho!#?@ 3 cout KK # KK tl*tN 4
4N
i*t #ai*?@
3
de"ivedB o$BN
de"ived2 o$2N
o$B%set?BX 2@N €€ e""o"X ca*wt use set?@
o$B%sho!?@N €€ e""o"X ca*wt use sho!?@
o$2%set?9X Y@N €€ e""o"X ca*wt use set?@
o$2%sho!?@N €€ e""o"X ca*wt use sho!?@
"etu"* UN
4
1.12>.2. Keá th'$a <rotecte; !ôù< cô ,ôû
Ta coù theá keá thöøa moät íôùp cô sôû baèng ñaëc taû
0"otected. Khí ñoù taát caû caùc thaønh víeân 0u$lic vaø
0"otected cuûa íôùp cô sôû trôû thaønh thaønh víeân 0"otected
cuûa íôùp daãn xuaát. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0"otectedi
i*t iX bN€€0"ivate to $aseX $ut accessi$le $6 de"ived
0u$lici
void setib?i*t aX i*t $@ 3 icaN bc$N 4
void sho!ib?@ 3 cout KK i KK t t KK b KK tl*tN 4
4N
€€ I*he"it $ase as 0"otected%
class de"ived i 0"otected $ase3
i*t 5N
0u$lici
€€ de"ived #a6 access $asews i a*d b a*d setib?@%
void set5?@ 3 setib?BUX B2@N 5 c iƒbN 4
€€ #a6 access sho!ib?@ he"e
66 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
void sho!all?@ 3 cout KK 5 KK t tN sho!ib?@N 4
4N
i*t #ai*?@
3
de"ived o$N
€€ o$%setib?2X 9@N €€ illegalX setib?@ is
€€ 0"otected #e#$e" o2 de"ived
o$%set5?@N €€ OOX 0u$lic #e#$e" o2 de"ived
o$%sho!all?@N €€ OOX 0u$lic #e#$e" o2 de"ived
€€ o$%sho!ib?@N €€ illegalX sho!ib?@ is 0"otected
€€ #e#$e" o2 de"ived
"etu"* UN
4
1.121. 0QR I=DU> @=ZQ?O FLWH SL \LT
Ta coù theá cho pheùp moät íôùp daãn xuaát keá thöøa nhíeàu
íôùp cô sôû, ví duï sau de"ived keá thöøa haí íôùp $aseB vaø $ase2%
€€ A* e7a#0le o2 #ulti0le $ase classes%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $aseB 3
0"otectedi
i*t 7N
0u$lici
void sho!7?@ 3 cout KK 7 KK tl*tN 4
4N
class $ase2 3
0"otectedi
i*t 6N
0u$lici
void sho!6?@ 3cout KK 6 KK tl*tN4
4N
€€ I*he"it #ulti0le $ase classes%
class de"ivedi 0u$lic $aseBX 0u$lic $ase2 3
0u$lici
void set?i*t iX i*t b@ 3 7ciN 6cbN 4
4N
Gh*ông 1+. Keá th*'a 61
i*t #ai*?@
3
de"ived o$N
o$%set?BUX 2U@N €€ 0"ovided $6 de"ived
o$%sho!7?@N €€ 2"o# $aseB
o$%sho!6?@N €€ 2"o# $ase2
"etu"* UN
4
1.122. C>RO IDT1 =OT^ IDT P>U _QR I=DU>
Coù haí caâu hoûí ñaët ra trong phaàn naøy: thöù nhaát khí
naøo thì caáu töû huûy töû cuûa íôùp cô sôû, íôùp daãn xuaát ñöôïc
goïí. Thöù haí coù bao nhíeâu tham soá ñöôïc gôûí ñeán haøm caáu
töû cuûa íôùp cô sôû.
1.122.1. Khi na$o ha$/ caáu t'û 1a$ huû) t'û +'ôïc
th'ïc thi
Ta coù theá cho pheùp íôùp cô sôû, íôùp daãn xuaát hoaëc caû
haí chöùa caáu töû hoaëc huûy töû. Ta caàn phaûí bíeát roõ thöù töï
thöïc thí cuûa nhöõng haøm naøy khí moät ñoáí töôïng cuûa íôùp
daãn xuaát ñöôïc taïo vaø bò huûy. Xeùt ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0u$lici
$ase?@ 3 cout KK tCo*st"ucti*g $asel*tN 4
Œ$ase?@ 3 cout KK tCest"ucti*g $asel*tN 4
4N
class de"ivedi 0u$lic $ase 3
0u$lici
de"ived?@ 3 cout KK tCo*st"ucti*g de"ivedl*tN 4
Œde"ived?@ 3 cout KK tCest"ucti*g de"ivedl*tN 4
4N
i*t #ai*?@
3
62 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
de"ived o$N
€€ do *othi*g $ut co*st"uct a*d dest"uct o$
"etu"* UN
4
Chöông trình treân chæ ñôn gíaûn íaø taïo vaø huûy boû ñoáí
töôïng o$ cuûa íôùp daãn xuaát. Khí thöïc thí, chöông trình treân seõ
xuaát híeän:
Co*st"ucti*g $ase
Co*st"ucti*g de"ived
Cest"ucti*g de"ived
Cest"ucti*g $ase
Nhö ta thaáy, ñaàu tíeân caáu töû cuûa íôùp cô sôû seõ ñöôïc
thöïc híeän tíeáp theo íaø caáu töû cuûa íôùp daãn xuaát, sau ñoù
huûy töû cuûa íôùp daãn xuaát seõ thöïc híeän vaø cuoáí cuøng
ñeán huûy töû cuûa íôùp cô sôû. Töø keát quaû treân ta coù theá
toáng quaùt hoùa nhö sau: khí ñoáí töôïng cuûa íôùp daãn xuaát
ñöôïc taïo, neáu íôùp cô sôû coù chöùa caáu töû noù seõ ñöôïc goïí
ñaàu tíeân sau ñoù íaø caáu töû cuûa íôùp daãn xuaát. Khí ñoáí
töôïng cuûa íôùp daãn xuaát bò huûy boû, huûy töû cuûa noù seõ
ñöôïc goïí tröôùc sau ñoù íaø huûy töû cuûa íôùp cô sôû neáu noù
toàn taïí.
Trong tröôøng hôïp ña keá thöøa (ñoù íaø moät íôùp daãn
xuaát íaø íôùp cô sôû cuûa íôùp khaùc) quy íuaät chung ñöôïc aùp
duïng nhö sau: caáu töû seõ ñöôïc thöïc híeän töø íôùp ban ñaàu,
huûy töû thöïc híeän theo traät töï ngöôïc íaïí. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0u$lici
$ase?@ 3 cout KK tCo*st"ucti*g $asel*tN 4
Œ$ase?@ 3 cout KK tCest"ucti*g $asel*tN 4
4N
Gh*ông 1+. Keá th*'a 6
class de"ivedB i 0u$lic $ase 3
0u$lici
de"ivedB?@ 3 cout KK tCo*st"ucti*g de"ivedBl*tN 4
Œde"ivedB?@ 3 cout KK tCest"ucti*g de"ivedBl*tN 4
4N
class de"ived2i 0u$lic de"ivedB 3
0u$lici
de"ived2?@ 3 cout KK tCo*st"ucti*g de"ived2l*tN 4
Œde"ived2?@ 3 cout KK tCest"ucti*g de"ived2l*tN 4
4N
i*t #ai*?@
3
de"ived2 o$N
€€ co*st"uct a*d dest"uct o$
"etu"* UN
4
Keát quaû híeän treân maøn hình nhö sau:
Co*st"ucti*g $ase
Co*st"ucti*g de"ivedB
Co*st"ucti*g de"ived2
Cest"ucti*g de"ived2
Cest"ucti*g de"ivedB
Cest"ucti*g $ase
Ouy íuaät toáng quaùt naøy cuõng aùp duïng trong tröôøng
hôïp keá thöøa nhíeàu íôùp. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $aseB 3
0u$lici
$aseB?@ 3 cout KK tCo*st"ucti*g $aseBl*tN 4
Œ$aseB?@ 3 cout KK tCest"ucti*g $aseBl*tN 4
4N
class $ase2 3
0u$lici
$ase2?@ 3 cout KK tCo*st"ucti*g $ase2l*tN 4
Œ$ase2?@ 3 cout KK tCest"ucti*g $ase2l*tN 4
6& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4N
class de"ivedi 0u$lic $aseBX 0u$lic $ase2 3
0u$lici
de"ived?@ 3 cout KK tCo*st"ucti*g de"ivedl*tN 4
Œde"ived?@ 3 cout KK tCest"ucti*g de"ivedl*tN 4
4N
i*t #ai*?@
3
de"ived o$N
€€ co*st"uct a*d dest"uct o$
"etu"* UN
4
Keát quaû híeän treân maøn hình nhö sau:
Co*st"ucti*g $aseB
Co*st"ucti*g $ase2
Co*st"ucti*g de"ived
Cest"ucti*g de"ived
Cest"ucti*g $ase2
Cest"ucti*g $aseB
Nhö ta thaáy, caáu töû ñöôïc goïí töø íôùp cô sôû ñeán íôùp
daãn xuaát vaø caùc íôùp cô sôû seõ theo traät töï töø traùí qua
phaûí. Huûy töû seõ ñöôïc goïí theo chíeàu ngöôïc íaïí.
1.122.2. %ôûi tha/ ,oá +eán caáu t'û cuûa !ôù< cô ,ôû
Trong tröôøng hôïp caáu töû cuûa íôùp daãn xuaát caàn moät
hay nhíeàu tham soá, ta coù theá truyeàn tham soá theo caùch
thoâng thöôøng. Tuy nhíeân ta gôûí bao nhíeâu tham soá ñeán caáu
töû cuûa íôùp cô sôû, ta coù theá söû duïng daïng khaí baùo môû
roäng caáu töû cuûa íôùp daãn xuaát:
de"ived-co*st"ucto"?a"g-list@ i $aseB?a"g-list@X
$ase2?a"g-list@X
€€ %%%
$aseN?a"g-list@
3
// $od6 o2 de"ived co*st"ucto"
Gh*ông 1+. Keá th*'a 64
4
Trong ñoù töø $aseB ñeán $aseN íaø teân cuûa íôùp cô sôû
ñöôïc keá thöøa bôûí íôùp daãn xuaát. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0"otectedi
i*t iN
0u$lici
$ase?i*t 7@ 3 ic7N cout KK tCo*st"ucti*g $asel*tN 4
Œ$ase?@ 3 cout KK tCest"ucti*g $asel*tN 4
4N
class de"ivedi 0u$lic $ase 3
i*t bN
0u$lici
€€ de"ived uses 7N 6 is 0assed alo*g to $ase%
de"ived?i*t 7X i*t 6@i $ase?6@3
bc7N cout KK tCo*st"ucti*g de"ivedl*tN
4
Œde"ived?@ 3 cout KK tCest"ucti*g de"ivedl*tN 4
void sho!?@ 3 cout KK i KK t t KK b KK tl*tN 4
4N
i*t #ai*?@
3
de"ived o$?9X Y@N
o$%sho!?@N €€ dis0la6s Y 9
"etu"* UN
4
Ví duï treân, caáu töû cuûa de"ived ñöôïc khaí baùo coù haí
tham soá hình thöùc 7 vaø 6. Tuy nhíeân haøm caáu töû de"ived?@
chæ söû duïng moät tham soá 7, 6 ñöôïc gôûí cho haøm caáu töû
$ase?@. Toáng quaùt, caáu töû cuûa íôùp daãn xuaát phaûí khaí
baùo caû tham soá maø noù yeâu caàu.
Ví duï sau theá híeän keá thöøa nhíeàu íôùp cô sôû:
6+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $aseB 3
0"otectedi
i*t iN
0u$lici
$aseB?i*t 7@ 3 ic7N cout KK tCo*st"ucti*g $aseBl*tN 4
Œ$aseB?@ 3 cout KK tCest"ucti*g $aseBl*tN 4
4N
class $ase2 3
0"otectedi
i*t 5N
0u$lici
$ase2?i*t 7@ 3 5c7N cout KK tCo*st"ucti*g $ase2l*tN 4
Œ$ase2?@ 3 cout KK tCest"ucti*g $aseBl*tN 4
4N
class de"ivedi 0u$lic $aseBX 0u$lic $ase2 3
i*t bN
0u$lici
de"ived?i*t 7X i*t 6X i*t 8@i $aseB?6@X $ase2?8@3
bc7N cout KK tCo*st"ucti*g de"ivedl*tN
4
Œde"ived?@ 3 cout KK tCest"ucti*g de"ivedl*tN 4
void sho!?@ 3 cout KK i KK t t KK b KK t t KK 5 KK
tl*tN 4
4N
i*t #ai*?@
3
de"ived o$?9X YX V@N
o$%sho!?@N €€ dis0la6s Y 9 V
"etu"* UN
4
Ta nhôù raèng tham soá cuûa caáu töû íôùp cô sôû ñöôïc gôûí
döïa vaøo tham soá cuûa caáu töû íôùp daãn xuaát. Do ñoù, thaäm
chí caáu töû íôùp daãn xuaát khoâng söû duïng tham soá ta vaãn
khaí baùo nhöõng tham maø caáu töû íôùp cô sôû yeâu caàu. Trong
tình huoáng naøy, tham soá gôûí ñeán íôùp daãn xuaát seõ gôûí
Gh*ông 1+. Keá th*'a 67
ñeán íôùp cô sôû. Ví duï trong chöông trình sau, caáu töû íôùp
de"ived khoâng coù tham soá nhöng $aseB vaø $ase2 thì coù:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $aseB 3
0"otectedi
i*t iN
0u$lici
$aseB?i*t 7@ 3 ic7N cout KK tCo*st"ucti*g $aseBl*tN 4
Œ$aseB?@ 3 cout KK tCest"ucti*g $aseBl*tN 4
4N
class $ase2 3
0"otectedi
i*t 5N
0u$lici
$ase2?i*t 7@ 3 5c7N cout KK tCo*st"ucti*g $ase2l*tN 4
Œ$ase2?@ 3 cout KK tCest"ucti*g $ase2l*tN 4
4N
class de"ivedi 0u$lic $aseBX 0u$lic $ase2 3
0u$lici
€ƒ Ce"ived co*st"ucto" uses *o 0a"a#ete"X
$ut still #ust $e decla"ed as ta5i*g the# to
0ass the# alo*g to $ase classes%
ƒ€
de"ived?i*t 7X i*t 6@i $aseB?7@X $ase2?6@3
cout KK tCo*st"ucti*g de"ivedl*tN
4
Œde"ived?@ 3 cout KK tCest"ucti*g de"ivedl*tN 4
void sho!?@ 3 cout KK i KK t t KK 5 KK tl*tN 4
4N
i*t #ai*?@
3
de"ived o$?9X Y@N
o$%sho!?@N €€ dis0la6s 9 Y
"etu"* UN
4
Haøm caáu töû íôùp daãn xuaát coù theá söû duïng moïí tham
6- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
soá maø noù khaí baùo ngay caû khí tham soá ñoù ñöôïc gôûí ñeán
íôùp cô sôû. Ví duï ñoaïn chöông trình sau íaø hoaøn toaøn hôïp íeä:
class de"ivedi 0u$lic $ase 3
i*t bN
0u$lici
€€ de"ived uses $oth 7 a*d 6 a*d the* 0asses the# to
$ase%
de"ived?i*t 7X i*t 6@i $ase?7X 6@3
b c 7ƒ6N cout KK tCo*st"ucti*g de"ivedl*tN
4
4N
Cuoáí cuøng, khí gôûí tham soá ñeán caáu töû cuûa íôùp cô
sôû, tham soá coù theá bao goàm moïí bíeáu thöùc hôïp íeä.
1.123. C=B H=QWH IJO^ S>GH
Khí moät íôùp cô sôû ñöôïc keá thöøa íaø 0"ivate, taát caû
caùc thaønh víeân 0u$lic vaø 0"otected cuûa íôùp cô sôû trôû
thaønh thaønh víeân 0"ivate cuûa íôùp daãn xuaát. Tuy nhíeân,
trong moät soá tình huoáng ta muoán khoâí phuïc moät hoaëc
nhíeàu thaønh víeân ñaõ keá thöøa veà caùch truy caäp ban ñaàu.
Ví duï ta nuoán cho pheùp moät thaønh víeân 0u$lic cuûa íôùp cô
sôû íaø thaønh víeân 0u$lic cuûa íôùp daãn xuaát trong tröôøng
hôïp keá thöøa 0"ivate. Trong C++, coù haí caùch ñeá íaøm íaøm
ñíeàu naøy. Thöù nhaát ta coù theá söû duïng töø khoùa usi*g.
Caùch thöù haí söû duïng khaí baùo truy caäp beân trong íôùp daãn
xuaát. Khaí baùo truy caäp híeän taïí ñang ñöôïc hoã trôï bôûí C++
chuaán nhöng noù khoâng ñöôïc taùn thaønh. Níeàu naøy coù nghóa
íaø noù khoâng ñöôïc söû duïng cho maõ môùí. Daïng toáng quaùt:
$ase-classii#e#$e";
ví duï:
class $ase 3
Gh*ông 1+. Keá th*'a 69
0u$lici
i*t bN €€ 0u$lic i* $ase
};
€€ I*he"it $ase as 0"ivate%
class de"ivedi 0"ivate $ase 3
0u$lici
€€ he"e is access decla"atio*
$aseiibN €€ #a5e b 0u$lic agai*
%
%
%
4N
Bôûí vì íôùp $ase ñöôïc keá thöøa íaø 0"ivate bôûí íôùp
de"ived, thaønh víeân 0u$lic b ñöôïc chuyeán thaønh thaønh víeân
0"ivate cuûa íôùp de"ived, tuy nhíeân khí víeát:
$aseiibN
nhö íaø khaí baùo truy caäp döôùí tíeâu ñeà 0u$lic cuûa
de"ived, b ñöôïc khoâí phuïc íaïí thaønh 0u$lic.
Ta coù theá söû duïng khaí baùo truy caäp ñeá khoâí phuïc
quyeàn truy caäp thaønh víeân 0u$lic hoaëc 0"otected. Tuy nhíeân
ta khoâng theá taêng hoaëc gíaûm traïng thaùí truy caäp thaønh
víeân. Ví duï moät thaønh víeân ñöôïc khaí baùo íaø 0"ivate trong
íôùp cô sôû ta khoâng theá taïo 0u$lic trong íôùp daãn xuaát (neáu
C++ cho pheùp ñíeàu naøy noù seõ huûy boû cô cheá bao goùí).
Chöông trình sau seõ mính hoïa khaí baùo truy caäp. Chuù yù
caùch khaí baùo truy caäp ñeá khoâí phuïc b, seti?@, geti?@ sang
traïng thaùí 0u$lic.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
i*t iN €€ 0"ivate to $ase
0u$lici
16 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
i*t bX 5N
void seti?i*t 7@ 3 i c 7N 4
i*t geti?@ 3 "etu"* iN 4
4N
€€ I*he"it $ase as 0"ivate%
class de"ivedi 0"ivate $ase 3
0u$lici
€ƒ The *e7t th"ee state#e*ts ove""ide
$asews i*he"ita*ce as 0"ivate a*d "esto"e bX
seti?@X a*d geti?@ to 0u$lic access% ƒ€
$aseiibN €€ #a5e b 0u$lic agai* - $ut *ot 5
$aseiisetiN €€ #a5e seti?@ 0u$lic
$aseiigetiN €€ #a5e geti?@ 0u$lic
€€ $aseiiiN €€ illegalX 6ou ca**ot elevate access
i*t aN €€ 0u$lic
4N
i*t #ai*?@
3
de"ived o$N
€€o$%i c BUN€€illegal $ecause i is 0"ivate i* de"ived
o$%b c 2UN€€legal $ecause b is #ade 0u$lic i* de"ived
€€o$%5 c 9UN€€illegal $ecause 5 is 0"ivate i* de"ived
o$%a c YUN €€ legal $ecause a is 0u$lic i* de"ived
o$%seti?BU@N
cout KK o$%geti?@ KK t t KK o$%b KK t t KK o$%aN
"etu"* UN
4
1.12%. LLWH SL \LT >TB
Khí keá thöøa nhíeàu íôùp cô sôû, xuaát híeän söï nhaäp
nhaèng. Ví duï:
€€ This 0"og"a# co*tai*s a* e""o" a*d !ill *ot co#0ile%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0u$lici
i*t iN
Gh*ông 1+. Keá th*'a 11
4N
€€ de"ivedB i*he"its $ase%
class de"ivedB i 0u$lic $ase 3
0u$lici
i*t bN
4N
€€ de"ived2 i*he"its $ase%
class de"ived2 i 0u$lic $ase 3
0u$lici
i*t 5N
4N
€ƒ de"ived9 i*he"its $oth de"ivedB a*d de"ived2%
This #ea*s that the"e a"e t!o co0ies o2 $ase
i* de"ived9^ ƒ€
class de"ived9 i 0u$lic de"ivedBX 0u$lic de"ived2 3
0u$lici
i*t su#N
4N
i*t #ai*?@
3
de"ived9 o$N
o$%i c BUN €€ this is a#$iguousX !hich i|||
o$%b c 2UN
o$%5 c 9UN
€€ i a#$iguous he"eX too
o$%su# c o$%i o$%b o$%5N
€€ also a#$iguousX !hich i|
cout KK o$%i KK t tN
cout KK o$%b KK t t KK o$%5 KK t tN
cout KK o$%su#N
"etu"* UN
4
Nhö ñaõ chuù thích trong chöông trình, caû haí íôùp de"ivedB
vaø de"ived2 keá thöøa íôùp $ase, de"ived9 keá thöøa haí íôùp
de"ivedB vaø de"ived2. Níeàu naøy coù nghóa íaø coù haí baûn sao
cuûa $ase trong moät ñoáí töôïng de"ived9. Do ñoù, trong bíeáu
thöùc o$%icBU vôùí i ñöôïc tham chíeáu bôûí íôùp de"ivedB hoaëc
12 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
bôûí íôùp de"ived2. Bôûí vì coù haí baûn sao cuûa $ase xuaát híeän
trong o$, do ñoù coù haí o$%i, vaø xuaát híeän nhaäp nhaèng. Coù
haí caùch ñeá khaéc phuïc vaán ñeà treân. Naàu tíeân aùp duïng
toaùn töû phaân gíaûí phaïm ví ñeá choïn moät gíaù trò i. Ví duï sau
theá híeän phöông phaùp treân:
€€ This 0"og"a# uses e70licit sco0e "esolutio* to select
i%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0u$lici
i*t iN
4N
€€ de"ivedB i*he"its $ase%
class de"ivedB i 0u$lic $ase 3
0u$lici
i*t bN
4N
€€ de"ived2 i*he"its $ase%
class de"ived2 i 0u$lic $ase 3
0u$lici
i*t 5N
4N
€ƒ de"ived9 i*he"its $oth de"ivedB a*d de"ived2%
This #ea*s that the"e a"e t!o co0ies o2 $ase
i* de"ived9^ ƒ€
class de"ived9 i 0u$lic de"ivedBX 0u$lic de"ived2 3
0u$lici
i*t su#N
4N
i*t #ai*?@
3
de"ived9 o$N
o$%de"ivedBiii c BUN €€ sco0e "esolvedX use
de"ivedBws i
o$%b c 2UN
o$%5 c 9UN
Gh*ông 1+. Keá th*'a 1
€€ sco0e "esolved
o$%su# c o$%de"ivedBiii o$%b o$%5N
€€ also "esolved he"e
cout KK o$%de"ivedBiii KK t tN
cout KK o$%b KK t t KK o$%5 KK t tN
cout KK o$%su#N
"etu"* UN
4
Tuy nhíeân caùch naøy chöa toáí öu vì íaøm taêng tính phöùc
taïp cuûa chöông trình. Caùch thöù haí ñeá khaéc phuïc tính nhaäp
nhaèng neân treân ñoù íaø söû duïng íôùp cô sôû aûo.
Khí haí hay nhíeàu ñoáí töôïng ñöôïc daãn xuaát töø moät íôùp
cô sôû chung, ta coù theá ngaên chaën nhíeàu baûn sao cuûa íôùp
cô sôû baèng caùch khaí baùo íôùp cô sôû íaø aûo (vi"tual) khí keá
thöøa. Ta chæ caàn theâm töø khoùa vi"tual tröôùc khaí baùo teân
íôùp khí keá thöøa. Ví duï sau íaø phíeân baûn khaùc cuûa chöông
trình treân, trong ñoù de"ived9 chæ chöùa moät phíeân baûn cuûa
$ase:
€€ This 0"og"a# uses vi"tual $ase classes%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0u$lici
*t iN
4N
€€ de"ivedB i*he"its $ase as vi"tual%
class de"ivedB i vi"tual 0u$lic $ase 3
0u$lici
*t bN
4N
€€ de"ived2 i*he"its $ase as vi"tual%
class de"ived2 i vi"tual 0u$lic $ase 3
0u$lici
*t 5N
1& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4N
€ƒ de"ived9 i*he"its $oth de"ivedB a*d de"ived2%
This ti#eX the"e is o*l6 o*e co06 o2 $ase class% ƒ€
class de"ived9 i 0u$lic de"ivedBX 0u$lic de"ived2 3
0u$lici
i*t su#N
4N
i*t #ai*?@
3
e"ived9 o$N
$%i c BUN €€ *o! u*a#$iguous
$%b c 2UN
$%5 c 9UN
€ u*a#$iguous
$%su# c o$%i o$%b o$%5N
€ u*a#$iguous
out KK o$%i KK t tN
out KK o$%b KK t t KK o$%5 KK t tN
out KK o$%su#N
"etu"* UN
4
Trong chöông trình treân, caû haí íôùp de"ivedB vaø de"ived2
ñeàu keá thöøa $ase baèng íôùp aûo, do ñoù ñoáí töôïng de"ived9
chæ coù moät baûn sao cuûa $ase vaø o$%icBU íaø hoaøn toaøn
hôïp íeä.
Chuù yù: ngay caû khí de"ivedB vaø de"ived2 ñaëc taû $ase
nhö íaø íôùp aûo, $ase vaãn xuaát híeän trong caùc kíeáu ñoáí
töôïng ñoù. Ví duï ñoaïn chöông trình sau íaø hoaøn toaøn hôïp íeä.
€€ de2i*e a class o2 t60e de"ivedB
de"ivedB #6classN
#6class%i c RRN
Chæ coù söï khaùc nhau gíöõa keá thöøa theo caùch thoâng
thöôøng vaø söû duïng íôùp aûo ñoù íaø neáu keá thöøa theo caùch
thoâng thöôøng thì baûn sao cuûa íôùp cô sôû coù theá xuaát híeän
Gh*ông 1+. Keá th*'a 14
nhíeàu hôn moät íaàn, neáu söû duïng keá thöøa íôùp aûo thì chæ
xuaát híeän duy nhaát moät baûng sao cuûa íôùp cô sôû.
Gh*ông 17. Ka'1 aûo 3a' .a hLnh 17
C=DL@A 1+. H>UX >TB P>U Y> =K@=
Cô cheá ña hình ñöôïc hoã trôï bôûí C++ taïí thôøí ñíeám bíeân
dòch (co1=iler ti1e) vaø thôøí ñíeám thöïc thí (run ti1e). Na hình
taïí thôøí ñíeám bíeân dòch chính íaø taûí boäí haøm vaø toaùn töû.
Na hình taïí thôøí ñíeám thöïc thí íaø söû duïng keá thöøa vaø haøm
aûo.
1.12,. H>UX >TB
Haøm aûo íaø haøm thaønh víeân cuûa íôùp ñöôïc khaí baùo
beân trong íôùp cô sôû vaø ñöôïc ñònh nghóa íaïí bôûí íôùp daãn
xuaát. Neá taïo moät haøm aûo, ta chæ tröôùc khaí baùo haøm
trong íôùp cô sôû töø khoùa vi"tual. Haøm aûo caøí ñaët theo
caùch "1o"t giao <ie"n@ .a =h*ông th*ùc". Haøm aûo beân trong
íôùp cô sôû ñònh nghóa khuoân daïng gíao díeän cuûa haøm. Caùc
thao taùc cuï theá cuûa haøm aûo seõ ñöôïc ñònh nghóa chính xaùc
taïí íôùp daãn xuaát.
Khí truy caäp haøm aûo gíoáng nhö haøm thaønh víeân cuûa
íôùp thoâng thöôøng. Nhö ñaõ ñeà caäp trong chöông 13, con troû
íôùp cô sôû coù theá söû duïng ñeá troû ñeán ñoáí töôïng cuûa íôùp
daãn xuaát. Khí con troû cô sôû troû ñeán ñoáí töôïng daãn xuaát
coù chöùa haøm aûo, C++ seõ xaùc ñònh phíeân baûn naøo cuûa
haøm ñöôïc goïí döïa vaøo ñoáí töôïng ñöôïc troû bôûí con troû ñoù.
Vaø thao taùc xaùc ñònh naøy ñöôïc thöïc híeän taïí thôøí ñíeám
thöïc thí. Xeùt ví duï sau:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0u$lici
vi"tual void v2u*c?@ 3
cout KK tThis is $asews v2u*c?@%l*tN
1- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4
4N
class de"ivedB i 0u$lic $ase 3
0u$lici
void v2u*c?@ 3
cout KK tThis is de"ivedBws v2u*c?@%l*tN
4
4N
class de"ived2 i 0u$lic $ase 3
0u$lici
void v2u*c?@ 3
cout KK tThis is de"ived2ws v2u*c?@%l*tN
4
4N
i*t #ai*?@
3
$ase ƒ0X $N
de"ivedB dBN
de"ived2 d2N
€€ 0oi*t to $ase
0 c f$N
0-Lv2u*c?@N €€ access $asews v2u*c?@
0 c fdBN €€ 0oi*t to de"ivedB
0-Lv2u*c?@N €€ access de"ivedBws v2u*c?@
0 c fd2N €€ 0oi*t to de"ived2
0-Lv2u*c?@N €€ access de"ived2ws v2u*c?@
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
This is $asews v2u*c?@%
This is de"ivedBws v2u*c?@%
This is de"ived2ws v2u*c?@%
Beân trong íôùp $ase haøm aûo v2u*c?@ ñöôïc khaí baùo. Chuù
yù töø khoùa vi"tual ñaët tröôùc khaí baùo haøm. Khí haøm
v2u*c?@ ñöôïc ñònh nghóa íaïí trong íôùp de"ivedB vaø de"ived2,
töø khoùa vi"tual khoâng caàn thíeát.
Gh*ông 17. Ka'1 aûo 3a' .a hLnh 19
Ta coù theá goïí haøm aûo baèng teân ñoáí töôïng vaø toaùn
töû chaám. Tuy nhíeân theo caùch goïí naøy ta khoâng nhaän ñöôïc
nhöõng ñíeám thuaän tíeän cuûa haøm aûo.
Môùí nhìn qua ta thaáy raèng ñònh nghóa íaïí haøm aûo gíoáng
vôùí taûí boäí, tuy nhíeân ñaây khoâng phaûí íaø tröôøng hôïp taûí
boäí bôûí vì coù moät vaøí ñíeám khaùc bíeät. Söï khaùc bíeät naøy
chính íaø kíeáu traû veà, soá íöôïng, kíeáu tham soá. Trong taûí boäí
haøm, chæ cho pheùp haøm truøng teân nhöng phaûí khaùc nhau
veà tham soá. Trong haøm aûo, taát caû caùc khaí baùo ñeàu phaûí
gíoáng nhau (töùc íaø caùc haøm aûo trong moãí íôùp ñeàu phaûí
gíoáng nhau veà soá íöôïng vaø kíeáu tham soá).
Nhöõng haïn cheá khí söû duïng haøm aûo íaø: haøm aûo
khoâng ñöôïc pheùp íaø thaønh víeân tónh cuûa moät íôùp; noù
khoâng ñöôïc íaøm haøm thaân thíeän; caáu töû khoâng ñöôïc caøí
ñaët íaø haøm aûo tuy nhíeân huûy töû thì ñöôïc pheùp.
1.122.1. %oïi ha$/ aûo thoDng 0ua tha/ chieáu !ôù< cô
,ôû
Ta coù theá goïí haøm aûo thoâng qua tham chíeáu íôùp cô
sôû. Tham chíeáu nhö íaø con troû aán. Thaät vaäy, tham chíeáu
íôùp cô sôû coù theá ñöôïc söû duïng tham chíeáu ñoáí töôïng íôùp
cô sôû vaø caùc ñoáí töôïng cuûa íôùp daãn xuaát. Khí haøm aûo
ñöôïc goïí qua tham chíeáu, phíeân baûn cuûa haøm ñöôïc xaùc
ñònh bôûí ñoáí töôïng ñöôïc tham chíeáu taïí thôøí ñíeám goïí haøm.
Tình huoáng naøy thöôøng gaëp khí tham chíeáu moät íôùp cô
sôû íaø tham soá cuûa haøm khaùc. Ví duï:
€ƒ He"eX a $ase class "e2e"e*ce is used to access
a vi"tual 2u*ctio*% ƒ€
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
26 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
class $ase 3
0u$lici
vi"tual void v2u*c?@ 3
cout KK tThis is $asews v2u*c?@%l*tN
4
4N
class de"ivedB i 0u$lic $ase 3
0u$lici
void v2u*c?@ 3
cout KK tThis is de"ivedBws v2u*c?@%l*tN
4
4N
class de"ived2 i 0u$lic $ase 3
0u$lici
void v2u*c?@ 3
cout KK tThis is de"ived2ws v2u*c?@%l*tN
4
4N
€€ ase a $ase class "e2e"e*ce 0a"a#ete"%
void 2?$ase f"@ 3
"%v2u*c?@N
4
i*t #ai*?@
3
$ase $N
de"ivedB dBN
de"ived2 d2N
2?$@N €€ 0ass a $ase o$bect to 2?@
2?dB@N €€ 0ass a de"ivedB o$bect to 2?@
2?d2@N €€ 0ass a de"ived2 o$bect to 2?@
"etu"* UN
4
Keát quaû híeán thò treân maøn hình gíoáng nhö ví duï tröôùc.
Trong ví duï naøy, haøm 2?@ ñònh nghóa moät tham chíeáu cuûa
íôùp $ase. Trong haøm #ai*?@ haøm 2?@ ñöôïc goïí söû duïng caùc
ñoáí töôïng $ase, de"ivedB, de"ived2. Beân trong haøm 2?@, phíeân
baûn cuûa haøm v2u*c?@ ñöôïc goïí ñöôïc xaùc ñònh döïa vaøo ñoáí
Gh*ông 17. Ka'1 aûo 3a' .a hLnh 21
töôïng maø ñöôïc tham chíeáu.
1.12-. 0QR I=DU> XBGI I=OBGS Ih@= >TB
Khí moät haøm aûo ñöôïc keá thöøa, caùc tính chaát aûo cuûa
haøm ñoù cuõng ñöôïc keá thöøa trong íôùp daãn xuaát. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0u$lici
vi"tual void v2u*c?@ 3
cout KK tThis is $asews v2u*c?@%l*tN
4
4N
class de"ivedB i 0u$lic $ase 3
0u$lici
void v2u*c?@ 3
cout KK tThis is de"ivedBws v2u*c?@%l*tN
4
4N
€ƒ de"ived2 i*he"its vi"tual 2u*ctio* v2u*c?@
2"o# de"ivedB% ƒ€
class de"ived2 i 0u$lic de"ivedB 3
0u$lici
€€ v2u*c?@ is still vi"tual
void v2u*c?@ 3
cout KK tThis is de"ived2ws v2u*c?@%l*tN
4
4N
i*t #ai*?@
3
$ase ƒ0X $N
de"ivedB dBN
de"ived2 d2N
€€ 0oi*t to $ase
0 c f$N
0-Lv2u*c?@N €€ access $asews v2u*c?@
€€ 0oi*t to de"ivedB
22 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
0 c fdBN
0-Lv2u*c?@N €€ access de"ivedBws v2u*c?@
€€ 0oi*t to de"ived2
0 c fd2N
0-Lv2u*c?@N €€ access de"ived2ws v2u*c?@
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
This is $asews v2u*c?@%
This is de"ivedBws v2u*c?@%
This is de"ived2ws v2u*c?@%
1.12+. C>WS =>UX >TB YDLdS H=>C@ S>RH
Khí haøm khaí baùo íaø aûo trong íôùp cô sôû, noù coù theá bò
ñònh nghóa íaïí trong íôùp daãn xuaát. Tuy nhíeân neáu trong íôùp
daãn xuaát khoâng ñònh nghóa íaïí haøm aûo naøy, thì haøm aûo
trong íôùp cô sôû seõ ñöôïc söû duïng. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0u$lici
vi"tual void v2u*c?@ 3
cout KK tThis is $asews v2u*c?@%l*tN
4
4N
class de"ivedB i 0u$lic $ase 3
0u$lici
void v2u*c?@ 3
cout KK tThis is de"ivedBws v2u*c?@%l*tN
4
4N
class de"ived2 i 0u$lic $ase 3
0u$lici
€€ v2u*c?@ *ot ove""idde* $6 de"ived2X $asews is used
4N
i*t #ai*?@
Gh*ông 17. Ka'1 aûo 3a' .a hLnh 2
3
$ase ƒ0X $N
de"ivedB dBN
de"ived2 d2N
€€ 0oi*t to $ase
0 c f$N
0-Lv2u*c?@N €€ access $asews v2u*c?@
€€ 0oi*t to de"ivedB
0 c fdBN
0-Lv2u*c?@N €€ access de"ivedBws v2u*c?@
€€ 0oi*t to de"ived2
0 c fd2N
0-Lv2u*c?@N €€ use $asews v2u*c?@
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
This is $asews v2u*c?@%
This is de"ivedBws v2u*c?@%
This is $asews v2u*c?@%
Vì íôùp de"ived2 khoâng ñònh nghóa haøm v2u*c?@ do ñoù khí
con troû ñeán d2 goïí haøm v2u*c?@ thì phíeân baûn v2u*c?@ cuûa
íôùp $ase seõ ñöôïc söû duïng.
Ouy íuaät chung ñeá goïí moät haøm aûo nhö sau: neáu taïí
íôùp daãn xuaát naøy khoâng ñònh nghóa haøm aûo, trình bíeân
dòch seõ kíeám trong íôùp maø noù môùí keá thöøa coù ñònh nghóa
kaïí haøm aûo hay khoâng? Neáu coù seõ thöïc thí haøm aûo naøy,
neáu khoâng tíeáp tuïc tìm ôû íôùp ñöôïc keá thöøa tröôùc ñoù. Ví
duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0u$lici
vi"tual void v2u*c?@ 3
cout KK tThis is $asews v2u*c?@%l*tN
2& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4
4N
class de"ivedB i 0u$lic $ase 3
0u$lici
void v2u*c?@ 3
cout KK tThis is de"ivedBws v2u*c?@%l*tN
4
4N
class de"ived2 i 0u$lic de"ivedB 3
0u$lici
€ƒ v2u*c?@ *ot ove""idde* $6 de"ived2%
I* this caseX si*ce de"ived2 is de"ived 2"o#
de"ivedBX de"ivedBws v2u*c?@ is used%
ƒ€
4N
i*t #ai*?@
3
$ase ƒ0X $N
de"ivedB dBN
de"ived2 d2N
€€ 0oi*t to $ase
0 c f$N
0-Lv2u*c?@N €€ access $asews v2u*c?@
€€ 0oi*t to de"ivedB
0 c fdBN
0-Lv2u*c?@N €€ access de"ivedBws v2u*c?@
€€ 0oi*t to de"ived2
0 c fd2N
0-Lv2u*c?@N €€ use de"ivedBws v2u*c?@
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
This is $asews v2u*c?@%
This is de"ivedBws v2u*c?@%
This is de"ivedBws v2u*c?@%
1.124. H>UX >TB I=O>?@ IOW^
Gh*ông 17. Ka'1 aûo 3a' .a hLnh 24
Haøm aûo thuaàn tuùy íaø haøm aûo khoâng coù ñònh nghóa
beân trong íôùp cô sôû. Cuù phaùp ñeá khaí baùo haøm aûo thuaàn
tuùy nhö sau:
vi"tual t60e 2u*c-*a#e?0a"a#ete"-list) c UN
Khí moät haøm aûo íaø thuaàn tuùy, moïí íôùp daãn xuaát
phaûí ñònh nghóa íaïí haøm naøy, neáu íôùp daãn xuaát khoâng
ñònh nghóa haøm aûo naøy, trình bíeân dòch seõ baùo íoãí. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class *u#$e" 3
0"otectedi
i*t valN
0u$lici
void setval?i*t i@ 3 val c iN 4
€€ sho!?@ is a 0u"e vi"tual 2u*ctio*
vi"tual void sho!?@ c UN
4N
class he7t60e i 0u$lic *u#$e" 3
0u$lici
void sho!?@ 3
cout KK he7 KK val KK tl*tN
4
4N
class dect60e i 0u$lic *u#$e" 3
0u$lici
void sho!?@ 3
cout KK val KK tl*tN
4
4N
class octt60e i 0u$lic *u#$e" 3
0u$lici
void sho!?@ 3
cout KK oct KK val KK tl*tN
4
4N
i*t #ai*?@
2+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
3
dect60e dN
he7t60e hN
octt60e oN
d%setval?2U@N
d%sho!?@N €€ dis0la6s 2U - deci#al
h%setval?2U@N
h%sho!?@N €€ dis0la6s BY - he7adeci#al
o%setval?2U@N
o%sho!?@N €€ dis0la6s 2Y - octal
"etu"* UN
4
Lôùp *u# chöùa moät soá nguyeân val, moät haøm setval?@
vaø moät haøm aûo sho!?@, caùc íôùp daãn xuaát he7t60e,
dect60e, octt60e keá thöøa íôùp *u# vaø ñònh nghóa íaïí haøm
sho!?@ ñeá ín gíaù trò val vôùí cô soá töông öùng. Roõ raøng trong
ví duï treân khoâng coù íí do gì ñeá ñònh nghóa haøm sho!?@ trong
íôùp *u#.
1.128.1. ôù< tr'$u t'ôïng
Moät íôùp coù chöùa ít nhaát moät haøm aûo thuaàn tuùy goïí
íaø íôùp tröøu töôïng. Bôûí vì moät íôùp tröøu töôïng coù chöùa moät
hay nhíeàu haøm maø khoâng coù ñònh nghóa beân trong, neân
khoâng coù ñoáí töôïng naøo cuûa íôùp naøy ñöôïc taïo ra. Thay
vaøo ñoù íôùp tröøu töôïng seõ taïo ra moät kíeáu khoâng ñaày ñuû
ñeá cho íôùp daãn xuaát.
Maëc daàu ta khoâng theá taïo ra moät ñoáí töôïng cuûa íôùp
tröøu töôïng, nhöng ta coù theá taïo ra con troû hoaëc tham chíeáu
cuûa íôùp tröøu töôïng. Níeàu naøy cho pheùp íôùp tröøu töôïng hoã
trôï cô cheá ña hình thôøí ñíeám thöïc thí.
1.12#. !DT ]Od@A =>UX >TB
Moät trong nhöõng vaán ñeà troïng taâm cuûa íaäp trình
Gh*ông 17. Ka'1 aûo 3a' .a hLnh 27
höôùng ñoáí töôïng ñoù íaø nguyeân íí "1o"t giao <ie"n@ .a =h*ông
th*ùc". Níeàu naøy coù nghóa íaø moät íôùp caùc haønh ñoäng
chung ñöôïc ñònh nghóa, vaø moãí ñònh nghóa trong íôùp daãn
xuaát seõ chæ ra haønh ñoäng roõ raøng. Moät trong nhöõng caùch
híeäu quaû vaø meàm deûo ñeá caøí ñaët phöông phaùp "1o"t giao
<ie"n@ .a =h*ông th*ùc" ñoù íaø söû duïng haøm aûo, íôùp tröøu
töôïng ña hình taïí thôøí ñíeám thöïc thí. Söû duïng nhöõng ñaëc tính
naøy, ta taïo ra íôùp phaân caáp dí chuyeán töø toáng quaùt ñeán
cuï theá (cô sôû ñeán daãn xuaát). Theo nguyeân íí naøy, ta ñònh
nghóa taát caû caùc ñaëc tính chung vaø gíao díeän trong íôùp cô
sôû. Ví duï:
€€ &i"tual 2u*ctio* 0"actical e7a#0le%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class co*ve"t 3
0"otectedi
dou$le valBN €€ i*itial value
dou$le val2N €€ co*ve"ted value
0u$lici
co*ve"t?dou$le i@ 3
valB c iN
4
dou$le getco*v?@ 3 "etu"* val2N 4
dou$le geti*it?@ 3 "etu"* valBN 4
vi"tual void co#0ute?@ c UN
4N
€€ Lite"s to gallo*s%
class l_to_g i 0u$lic co*ve"t 3
0u$lici
l_to_g?dou$le i@ i co*ve"t?i@ 3 4
void co#0ute?@ 3
val2 c valB € 9%TRVYN
4
4N
€€ Fah"e*heit to Celsius
2- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
class 2_to_c i 0u$lic co*ve"t 3
0u$lici
2_to_c?dou$le i@ i co*ve"t?i@ 3 4
void co#0ute?@ 3
val2 c ?valB-92@ € B%RN
4
4N
i*t #ai*?@
3
co*ve"t ƒ0N €€ 0oi*te" to $ase class
l_to_g lgo$?Y@N
2_to_c 2co$?TU@N
€€ use vi"tual 2u*ctio* #echa*is# to co*ve"t
0 c flgo$N
cout KK 0-Lgeti*it?@ KK t lite"s is tN
0-Lco#0ute?@N
cout KK 0-Lgetco*v?@ KK t gallo*sl*tN €€ l_to_g
0 c f2co$N
cout KK 0-Lgeti*it?@ KK t i* Fah"e*heit is tN
0-Lco#0ute?@N
cout KK 0-Lgetco*v?@ KK t Celsiusl*tN €€ 2_to_c
"etu"* UN
4
Chöông trình treân taïo ra haí íôùp daãn xuaát töø íôùp
co*ve"t goïí íaø: l_to_g vaø 2_to_c. Caùc íôùp naøy thöïc híeän
chuyeán ñoáí ñôn vò íít sang gallon vaø ñoä W sang ñoä G töông
öùng. Moãí íôùp seõ naïp choàng phöông thöùc co#0ute?@ chuyeán
ñoáí ñôn vò mong muoán. Tuy coù söï khaùc nhau veà caùch
chuyeán ñoáí ñôn vò nhöng ta vaãn taïo ra moät gíao díeän chung.
Moät trong nhöõng íôïí ích cuûa íôùp daãn xuaát vaø haøm aûo ñoù
íaø ta coù theá boá sung theâm tröôøng hôïp môùí moät caùch deã
daøng. Ví duï trong chöông trình treân, ñeá boá sung chuyeán ñoáí
töø ;eet sang meùt, ta boá sung caùc íeänh:
€€ Feet to #ete"s
class 2_to_# i 0u$lic co*ve"t 3
Gh*ông 17. Ka'1 aûo 3a' .a hLnh 29
0u$lici
2_to_#?dou$le i@ i co*ve"t?i@ 3 4
void co#0ute?@ 3
val2 c valB € 9%2RN
4
4N
Moät trong nhöõng caùch söû duïng quan troïng cuûa íôùp
tröøu töôïng vaø haøm aûo íaø trong thö víeän íôùp. Ta taïo ra moät
thö víeän caùc íôùp chung vaø coù theá môû roäng. Moïí chöông
trình seõ keá thöøa íôùp chung naøy vaø boá sung theâm nhöõng
tính chaát ríeâng trong tình huoáng cuï theá.
1.13/. LZQC@ _QRI \LWX P>U IJQf
Trong íaäp trình höôùng ñoáí töôïng coù haí khaùí níeäm:
Líeân keát sôùm (earl? bin<ing): íaø söï kíeän phaùt sính taïí
thôøí ñíeám bíeân dòch. Líeân keát sôùm xuaát híeän khí taát caû
caùc thoâng tín caàn ñeá goïí haøm ñöôïc bíeát taïí thôøí ñíeám
bíeân dòch. Noùí caùch khaùc, ííeân keát sôùm nghóa íaø moät ñoáí
töôïng vaø moät íôøí goïí haøm bò gíôùí haïn taïí thôøí ñíeám bíeân
dòch). Ví duï íôøí goïí haøm thoâng thöôøng (bao goàm caùc íôøí goïí
haøm trong thö víeän chuaán), goïí haøm taûí boäí vaø toaùn töû
taûí boäí. Níeám thuaän íôïí chính cuûa ííeân keát sôùm íaø híeäu
quaû bôûí vì caùc thoâng tín caàn thíeát ñeá goïí haøm ñöôïc xaùc
ñònh taïí thôøí ñíeám bíeân dòch. Kíeáu goïí haøm naøy thöïc híeän
raát nhanh.
Ngöôïc íaïí vôùí ííeân keát sôùm íaø ííeân keát treã (late
bin<ing). Noù íaø íôøí goïí haøm vaãn chöa ñöôïc phaân gíaûí roõ
raøng taïí thôøí ñíeám bíeân dòch. Haøm aûo íaø caùch ñeá thöïc
híeän ííeân keát treã. Nhö ta ñaõ bíeát, khí truy caäp vaøo íôùp
thoâng qua con troû hoaëc tham chíeáu, íôøí goïí haøm aûo thöïc söï
ñöôïc xaùc ñònh bôûí kíeáu cuûa ñoáí töôïng maø noù troû ñeán.
6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Bôûí vì trong raát nhíeàu tröôøng hôïp ta khoâng bíeát phaûí goïí
haøm naøo trong thôøí ñíeám bíeân dòch. Níeám thuaän íôïí chính
cuûa ííeân keát treã chính íaø söï meàm deûo. Khoâng gíoáng nhö
ííeân keát sôùm, ííeân keát treã cho pheùp ta taïo ra chöông trình
coù theá ñaùp öùng vôùí söï kíeän trong khí chöông trình thöïc thí
maø khoâng caàn phaûí taïo ra caùc "maõ ñeà phoøng".
Gh*ông 1-. $ôù= 1a\u #)e1=late% 1
C=DL@A 14. LLWH X>fO (TQXHF>IQ"
Lôùp maãu íaø moät trong nhöõng ñaëc tröng maïnh nhaát
trong ngoân ngöõ C++. Maëc daàu noù khoâng phaûí íaø moät
phaàn cuûa C++ chuaán nhöng noù ñaõ ñöôïc boá sung vaøo trong
nhöõng naêm gaàn ñaây vaø ñöôïc hoã trôï bôûí taát caû caùc trình
bíeân dòch C++. Söû duïng íôùp maãu, ta coù theá taïo ra haøm hay
íôùp chung. Trong haøm hay íôùp chung naøy, kíeáu döõ ííeäu seõ
ñöôïc chæ ra nhö moät tham soá. Thaät vaäy ta coù theá söû duïng
moät haøm hoaëc íôùp chung naøy vôùí nhíeàu kíeáu döõ ííeäu
khaùc nhau.
1.131. H>UX S=O@A
Haøm chung ñònh nghóa caùc hoaït ñoäng chung aùp duïng
cho nhíeàu kíeáu döõ ííeäu khaùc nhau. Kíeáu döõ ííeäu maø haøm
taùc ñoäng ñöôïc gôûí nhö íaø moät tham soá ñeán haøm. Nhö ta
ñaõ bíeát, raát nhíeàu thuaät toaùn aùp duïng treân nhíeàu kíeáu
döõ ííeäu khaùc nhau. Ví duï nhö thuaät toaùn 2uick,ort aùp duïng
treân caû soá nguyeân íaãn soá thöïc. Baèng caùch taïo haøm
chung, ta coù theá ñònh nghóa hoaït ñoäng cuûa haøm ñoù ñoäc
íaäp vôùí döõ ííeäu. Trình bíeân dòch seõ töï ñoäng sính ra maõ hôïp
íeä cho kíeáu döõ ííeäu töông öùng khí haøm thöïc thí. Veà cô baûn,
khí ta taïo ra moät haøm chung íaø ta taïo ra moät haøm töï taûí boäí
treân noù. Daïng khaí baùo cuûa moät haøm maãu nhö sau:
te#0late Kclass Tt60e> "et-t60e 2u*c-*a#e(0a"a#ete" list)
3
€€ $od6 o2 2u*ctio*
4
Tt60e íaø teân ñaïí díeän cho moät kíeáu döõ ííeäu ñöôïc söû
duïng bôûí haøm. Teân naøy coù theá ñöôïc söû duïng beân trong
ñònh nghóa haøm. Tuy nhíeân noù chæ íaø teân ñaïí díeän vaø trình
2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
bíeân dòch seõ töï ñoäng thay theá vôùí moät kíeáu döõ ííeäu thöïc
söï khí taïo ra phíeân baûn roõ raøng cuûa haøm. Maëc daàu ta coù
theá söû duïng töø khoùa class ñeá trong khaí baùo te#0late, tuy
nhíeân ta coù theá söû duïng töø khoùa t60e*a#e. Chöông trình sau
taïo moät haøm chung trao ñoáí gíaù trò cuûa haí bíeán. Ví duï:
€€ Fu*ctio* te#0late e7a#0le%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
€€ This is a 2u*ctio* te#0late%
te#0late Kclass ‹L void s!a0a"gs?‹ faX ‹ f$@
3
‹ te#0N
te#0 c aN
a c $N
$ c te#0N
4
i*t #ai*?@
3
i*t icBUX bc2UN
dou$le 7cBU%BX 6c29%9N
cha" acw7wX $cw8wN
cout KK tO"igi*al iX bi t KK i KK w w KK b KK wl*wN
cout KK tO"igi*al 7X 6i t KK 7 KK w w KK 6 KK wl*wN
cout KK tO"igi*al aX $i t KK a KK w w KK $ KK wl*wN
s!a0a"gs?iX b@N €€ s!a0 i*tege"s
s!a0a"gs?7X 6@N €€ s!a0 2loats
s!a0a"gs?aX $@N €€ s!a0 cha"s
cout KK tS!a00ed iX bi t KK i KK w w KK b KK wl*wN
cout KK tS!a00ed 7X 6i t KK 7 KK w w KK 6 KK wl*wN
cout KK tS!a00ed aX $i t KK a KK w w KK $ KK wl*wN
"etu"* UN
4
Caâu íeänh:
te#0late Kclass ‹L void s!a0a"gs?‹ faX ‹ f$@
baùo cho trình bíeân dòch bíeát haí vaán ñeà: moät íôùp maãu
Gh*ông 1-. $ôù= 1a\u #)e1=late%
ñöôïc taïo ra vaø baét ñaàu ñònh nghóa nhöõng ñaëc ñíeám chung.
‹ íaø moät kíeáu chung vaø íaø teân ñaïí díeän. Sau vò trí te#0late,
khaí baùo haøm s!a0a"gs?@ söû duïng kíeáu döõ ííeäu ‹. Trong
haøm #ai*?@, haøm s!a0a"gs?@ ñöôïc goïí söû duïng ba kíeáu döõ
ííeäu khaùc nhau: i*t, dou$le, cha". Bôûí vì haøm s!a0a"gs?@ íaø
haøm chung, trình bíeân dòch seõ töï ñoäng taïo ra ba phíeân baûn
cuûa haøm s!a0a"gs?@, moät cho soá nguyeân, moät cho soá thöïc
vaø moät cho kí töï.
1.131.1. Yoät ha$/ 1ôùi hai kie*u chung
Ta coù theá ñònh nghóa nhíeàu hôn moät kíeáu döõ ííeäu
chung trong caâu íeänh te#0late baèng caùch söû duïng daáu
phaáy. Ví duï chöông trình sau taïo ra moät haøm maãu coù haí
kíeáu chung.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
te#0late Kclass t60eBX class t60e2L
void #62u*c?t60eB 7X t60e2 6@
3
cout KK 7 KK w w KK 6 KK wl*wN
4
i*t #ai*?@
3
#62u*c?BUX tI li5e Ct@N
#62u*c?ZR%WX BZL@N
"etu"* UN
4
Trong ví duï treân, kíeáu ñaïí díeän t60eB vaø t60e2 ñöôïc thay
theá bôûí trình bíeân dòch vôùí haí kíeáu döõ ííeäu i*t vaø cha" ƒ,
dou$le vaø lo*g töông öùng, khí trình bíeân dòch taïo ra phíeân
baûn roõ raøng cuûa #62u*c?@ beân trong haøm #ai*?@.
1.131.2. &aûi boäi treDn ha$/ chung
& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Haøm chung cuõng coù theá ñöôïc taûí boäí neáu caàn. Neáu
ta taûí boäí haøm chung, haøm naøy seõ ñöôïc thöïc híeän trong tình
huoáng phuø hôïp. Ví duï:
€€ Ove""idi*g a te#0late 2u*ctio*%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
te#0late Kclass ‹L void s!a0a"gs?‹ faX ‹ f$@
3
‹ te#0N
te#0 c aN
a c $N
$ c te#0N
cout KK tI*side te#0late s!a0a"gs%l*tN
4
€€This ove""ides the ge*e"ic ve"sio* o2 s!a0a"gs?@ 2o" i*t
void s!a0a"gs?i*t faX i*t f$@
3
i*t te#0N
te#0 c aN
a c $N
$ c te#0N
cout KK tI*side s!a0a"gs i*t s0eciali8atio*%l*tN
4
i*t #ai*?@
3
i*t icBUX bc2UN
dou$le 7cBU%BX 6c29%9N
cha" acw7wX $cw8wN
cout KK tO"igi*al iX bi t KK i KK w w KK b KK wl*wN
cout KK tO"igi*al 7X 6i t KK 7 KK w w KK 6 KK wl*wN
cout KK tO"igi*al aX $i t KK a KK w w KK $ KK wl*wN
s!a0a"gs?iX b@N€€calls e70licitl6 ove"loaded s!a0a"gs
s!a0a"gs?7X 6@N €€ calls ge*e"ic s!a0a"gs?@
s!a0a"gs?aX $@N €€ calls ge*e"ic s!a0a"gs?@
cout KK tS!a00ed iX bi t KK i KK w w KK b KK wl*wN
cout KK tS!a00ed 7X 6i t KK 7 KK w w KK 6 KK wl*wN
cout KK tS!a00ed aX $i t KK a KK w w KK $ KK wl*wN
Gh*ông 1-. $ôù= 1a\u #)e1=late% 4
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
O"igi*al iX bi BU 2U
O"igi*al 7X 6i BU%B 29%9
O"igi*al aX $i 7 8
I*side s!a0a"gs i*t s0eciali8atio*%
I*side te#0late s!a0a"gs%
I*side te#0late s!a0a"gs%
S!a00ed iX bi 2U BU
S!a00ed 7X 6i 29%9 BU%B
S!a00ed aX $i 8 7
Nhö ñaõ chuù thích trong chöông trình, khí haøm
s!a0a"gs?iXb@ ñöôïc goïí noù seõ goïí phíeân baûn taûí boäí roõ
raøng cuûa s!a0a"gs?@.
Gaàn ñaây cuù phaùp theo phong caùch môùí ñöôïc ñöa vaøo
ñeá ñònh nghóa ñaëc taû roõ raøng. Ví duï cuù phaùp theo phong
caùch môùí nhö sau:
€€ ase *e!-st6le s0eciali8atio* s6*ta7%
te#0lateKL void s!a0a"gsKi*tL?i*t faX i*t f$@
3
i*t te#0N
te#0 c aN
a c $N
$ c te#0N
cout KK tI*side s!a0a"gs i*t s0eciali8atio*%l*tN
4
1.131.3. &aûi boäi treDn ha$/ /aPu
Ta cuõng coù theá taûí boäí haøm maãu baèng caùch taïo ra
moät phíeân baûn khaùc cuûa haøm maãu chæ khaùc nhau veà soá
tham soá. Ví duï:
€€ Ove"load a 2u*ctio* te#0late decla"atio*%
Ji*clude Kiost"ea#L
+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
usi*g *a#es0ace stdN
€€ Fi"st ve"sio* o2 2?@ te#0late%
te#0late Kclass ‹L void 2?‹ a@
3
cout KK tI*side 2?‹ a@l*tN
4
€€ Seco*d ve"sio* o2 2?@ te#0late%
te#0late Kclass ‹X class ’L void 2?‹ aX ’ $@
3
cout KK tI*side 2?‹ aX ’ $@l*tN
4
i*t #ai*?@
3
2?BU@N €€ calls 2?‹@
2?BUX 2U@N €€ calls 2?‹X ’@
"etu"* UN
4
Ví duï treân, haøm maãu cho 2?@ ñöôïc taûí boäí ñeá hoaït
ñoäng treân moät hoaëc haí tham soá.
1.131.#. Q'û ;uïng tha/ ,oá chua*n 1ôùi ha$/ /aPu
Ta coù theá troän tham soá chuaán vôùí tham soá kíeáu chung
trong haøm maãu. Tham soá khoâng phaûí chung naøy íaøm víeäc
gíoáng nhö moïí haøm khaùc. Ví duï:
€€ asi*g sta*da"d 0a"a#ete"s i* a te#0late 2u*ctio*%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
co*st i*t TAB–ICTH c RN
€€ Cis0la6 data at s0eci2ied ta$ 0ositio*%
te#0lateKclass ‹L void ta$Out?‹ dataX i*t ta$@
3
2o"?N ta$N ta$--@
2o"?i*t icUN iKTAB–ICTHN i@ cout KK w wN
cout KK data KK tl*tN
4
i*t #ai*?@
Gh*ông 1-. $ôù= 1a\u #)e1=late% 7
3
ta$Out?tThis is a testtX U@N
ta$Out?BUUX B@N
ta$Out?w‹wX 2@N
ta$Out?BU€9X 9@N
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
This is a test
BUU

9
1.131.2. Haïn cheá cuûa ha$/ chung
Haøm chung töông töï nhö haøm taûí boäí nhöng noù coù
nhíeàu haïn cheá hôn. Khí haøm ñöôïc taûí boäí, ta coù theá thöïc thí
nhöõng haønh ñoäng khaùc nhau trong thaân haøm. Nhöng haøm
chung phaûí thöïc híeän cuøng moät haønh ñoäng cho taát caû caùc
phíeân baûn, chæ khaùc nhau kíeáu döõ ííeäu. Xeùt haøm taûí boäí
trong haøm sau. Nhöõng haøm naøy khoâng ñöôïc thay theá bôûí
haøm chung bôûí vì noù khoâng thöïc híeän moät haønh ñoäng.
Ji*clude Kiost"ea#L
Ji*clude Kc#athL
usi*g *a#es0ace stdN
void #62u*c?i*t i@
3
cout KK tvalue isi t KK i KK tl*tN
4
void #62u*c?dou$le d@
3
dou$le i*t0a"tN
dou$le 2"ac0a"tN
2"ac0a"t c #od2?dX fi*t0a"t@N
cout KK tF"actio*al 0a"ti t KK 2"ac0a"tN
cout KK tl*tN
- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
cout KK tI*tege" 0a"ti t KK i*t0a"tN
4
i*t #ai*?@
3
#62u*c?B@N
#62u*c?B2%2@N
"etu"* UN
4
1.132. ÖÙ@A ]Od@A SOT> =>UX S=O@A
Haøm chung íaø ñaëc tính raát höõu ích trong C++. Ta coù
theá aùp duïng cho taát caû caùc tình huoáng. Baát cöù íuùc naøo ta
coù moät haøm ñònh thuaät toaùn toáng quaùt, ta coù theá taïo ra
moät haøm maãu ñeá noù coù theá söû duïng nhíeàu kíeáu döõ ííeäu
khaùc nhau.
1.132.1. QaT< Meá< chung
Sau ñaây íaø thuaät toaùn saép xeáp noáí boït, noù íaøm víeäc
treân moïí kíeáu döõ ííeäu khaùc nhau. Haøm goïí vôùí tham soá íaø
con troû troû ñeán phaàn töû ñaàu tíeân cuûa maûng vaø soá phaàn
töû ñöôïc saép xeáp.
€€ A …e*e"ic $u$$le so"t%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
te#0late Kclass ‹L void $u$$le?
‹ ƒite#sX €€ 0oi*te" to a""a6 to $e so"ted
i*t cou*t@ €€ *u#$e" o2 ite#s i* a""a6
3
"egiste" i*t aX $N
‹ tN
2o"?acBN aKcou*tN a@
2o"?$ccou*t-BN $LcaN $--@
i2?ite#sg$-Bh L ite#sg$h@ 3
€€ e7cha*ge ele#e*ts
t c ite#sg$-BhN
Gh*ông 1-. $ôù= 1a\u #)e1=late% 9
ite#sg$-Bh c ite#sg$hN
ite#sg$h c tN
4
4
i*t #ai*?@
3
i*t ia""a6gTh c 3TX VX YX 9X ZX RX W4N
dou$le da""a6gVh c 3Y%9X 2%VX -U%ZX BUU%2X 9%U4N
i*t iN
cout KK tHe"e is u*so"ted i*tege" a""a6i tN
2o"?icUN iKTN i@
cout KK ia""a6gih KK w wN
cout KK e*dlN
cout KK tHe"e is u*so"ted dou$le a""a6i tN
2o"?icUN iKVN i@
cout KK da""a6gih KK w wN
cout KK e*dlN
$u$$le?ia""a6X T@N
$u$$le?da""a6X V@N
cout KK tHe"e is so"ted i*tege" a""a6i tN
2o"?icUN iKTN i@
cout KK ia""a6gih KK w wN
cout KK e*dlN
cout KK tHe"e is so"ted dou$le a""a6i tN
2o"?icUN iKVN i@
cout KK da""a6gih KK w wN
cout KK e*dlN
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
He"e is u*so"ted i*tege" a""a6i T V Y 9 Z R W
He"e is u*so"ted dou$le a""a6i Y%9 2%V -U%Z BUU%2 9
He"e is so"ted i*tege" a""a6i 9 Y V W T R Z
He"e is so"ted dou$le a""a6i -U%Z 2%V 9 Y%9 BUU%2
1.132.2. ^uùt goïn /oät /aûng
Moät haøm khaùc coù theá mính hoïa cho haøm maãu goïí íaø
&6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
haøm co#0act?@. Haøm naøy ruùt goïn caùc phaàn töû trong maûng
baèng caùch xoùa caùc phaàn töû gíöõa maûng vaø dí chuyeán caùc
phaàn töû coøn íaïí vaøo vò trí ñaõ xoùa. Haøm hoaït ñoäng treân
taát caû caùc kíeáu döõ ííeäu khaùc nhau. Haøm nhaän tham soá íaø
con troû ñeán phaàn töû ñaàu tíeân cuûa maûng, soá phaàn töû
trong maûng, chæ soá baét ñaàu vaø keát thuùc cuûa caùc phaàn
töû caàn xoùa.
€€ A …e*e"ic a""a6 co#0actio* 2u*ctio*%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
te#0late Kclass ‹L void co#0act?
‹ ƒite#sX €€ 0oi*te" to a""a6 to $e co#0acted
i*t cou*tX €€ *u#$e" o2 ite#s i* a""a6
i*t sta"tX €€ sta"ti*g i*de7 o2 co#0acted "egio*
i*t e*d@ €€ e*di*g i*de7 o2 co#0acted "egio*
3
"egiste" i*t iN
2o"?ice*dBN iKcou*tN iX sta"t@
ite#sgsta"th c ite#sgihN
€ƒ Fo" the sa5e o2 illust"atio*X the "e#ai*de" o2
the a""a6 !ill $e 8e"oed% ƒ€
2o"? N sta"tKcou*tN sta"t@ ite#sgsta"th c ?‹@ UN
4
i*t #ai*?@
3
i*t *u#sgTh c 3UX BX 2X 9X YX VX W4N
cha" st"gBRh c t…e*e"ic Fu*ctio*stN
i*t iN
cout KK tHe"e is u*co#0acted i*tege" a""a6i tN
2o"?icUN iKTN i@
cout KK *u#sgih KK w wN
cout KK e*dlN
cout KK tHe"e is u*co#0acted st"i*gi tN
2o"?icUN iKBRN i@
cout KK st"gih KK w wN
cout KK e*dlN
Gh*ông 1-. $ôù= 1a\u #)e1=late% &1
co#0act?*u#sX TX 2X Y@N
co#0act?st"X BRX WX BU@N
cout KK tHe"e is co#0acted i*tege" a""a6i tN
2o"?icUN iKTN i@
cout KK *u#sgih KK w wN
cout KK e*dlN
cout KK tHe"e is co#0acted st"i*gi tN
2o"?icUN iKBRN i@
cout KK st"gih KK w wN
cout KK e*dlN
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
He"e is u*co#0acted i*tege" a""a6i U B 2 9 Y V W
He"e is u*co#0acted st"i*gi …e*e"ic Fu*ctio*s
He"e is co#0acted i*tege" a""a6i U B V W U U U
He"e is co#0acted st"i*gi …e*e"ictio*s
1.133. LLWH S=O@A
Ta coù theá ñònh nghóa íôùp chung. Khí ñònh nghóa íôùp
chung, ta chæ ñònh nghóa thuaät toaùn ñöôïc söû duïng bôûí íôùp
ñoù. Tuy nhíeân, kíeáu döõ ííeäu thöïc söï maø noù thao taùc seõ
ñöôïc chæ roõ nhö íaø moät tham soá khí ñoáí töôïng cuûa íôùp
ñöôïc taïo.
Lôùp chung raát höõu ích khí ta caàn toáng quaùt hoùa moät
vaøí vaán ñeà. Ví duï, cuøng moät thuaät toaùn treân haøng ñôïí, ta
coù theá söû duïng soá nguyeân, soá thöïc, .
Daïng khaí baùo toáng quaùt cuûa moät íôùp chung nhö sau:
te#0late Kclass Tt60eL class class-*a#e 3
%
%%
4
Tt60e íaø teân kíeáu ñaïí díeän vaø noù ñöôïc chæ roõ khí
&2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
xuaát híeän moät ñoáí töôïng. Neáu caàn thíeát, ta coù theá khaí
baùo nhíeàu hôn kíeáu döõ ííeäu chung baèng caùch söû duïng daáu
phaáy. Khí ñaõ coù moät íôùp chung, ta coù theá taïo ra moät ñoáí
töôïng baèng caâu íeänh sau:
class-*a#e Kt60eL o$N
t60e íaø teân kíeáu döõ ííeäu maø íôùp ñoù seõ taùc ñoäng
íeân ñoù. Haøm thaønh víeân cuûa íôùp chung töï ñoäng chuyeán
thaønh haøm chung, ta khoâng caàn phaûí duøng te#0late ñeá chæ
roõ. Trong ví duï sau, íôùp stac5 íaøm víeäc nhö íaø íôùp chung, noù
coù theá íöu tröõ moïí kíeáu döõ ííeäu.
€€ This 2u*ctio* de#o*st"ates a ge*e"ic stac5%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
co*st i*t SI“Š c BUN
€€ C"eate a ge*e"ic stac5 class
te#0late Kclass Stac5T60eL class stac5 3
Stac5T60e stc5gSI“ŠhN €€ holds the stac5
i*t tosN €€ i*de7 o2 to0-o2-stac5
0u$lici
stac5?@ 3 tos c UN 4 €€ i*itiali8e stac5
void 0ush?Stac5T60e o$@N €€ 0ush o$bect o* stac5
Stac5T60e 0o0?@N €€ 0o0 o$bect 2"o# stac5
4N
€€ Push a* o$bect%
te#0late Kclass Stac5T60eL void
stac5KStac5T60eLii0ush?Stac5T60e o$@
3
i2?tosccSI“Š@ 3
cout KK tStac5 is 2ull%l*tN
"etu"*N
4
stc5gtosh c o$N
tosN
4
€€ Po0 a* o$bect%
Gh*ông 1-. $ôù= 1a\u #)e1=late% &
te#0late Kclass Stac5T60eL Stac5T60e
stac5KStac5T60eLii0o0?@
3
i2?tosccU@ 3
cout KK tStac5 is e#0t6%l*tN
"etu"* UN €€ "etu"* *ull o* e#0t6 stac5
4
tos--N
"etu"* stc5gtoshN
4
i*t #ai*?@
3
€€ Ce#o*st"ate cha"acte" stac5s%
stac5Kcha"L sBX s2N €€ c"eate t!o cha"acte" stac5s
i*t iN
sB%0ush?waw@N
s2%0ush?w7w@N
sB%0ush?w$w@N
s2%0ush?w6w@N
sB%0ush?wcw@N
s2%0ush?w8w@N
2o"?icUNiK9Ni@ coutKKtPo0 sBi tKK sB%0o0?@KK tl*tN
2o"?icUNiK9Ni@ coutKKtPo0 s2i tKKs2%0o0?@KKtl*tN
€€ de#o*st"ate dou$le stac5s
stac5Kdou$leL dsBX ds2N €€ c"eate t!o dou$le stac5s
dsB%0ush?B%B@N
ds2%0ush?2%2@N
dsB%0ush?9%9@N
ds2%0ush?Y%Y@N
dsB%0ush?V%V@N
ds2%0ush?W%W@N
2o"?icUN iK9N i@
cout KK tPo0 dsBi t KK dsB%0o0?@ KK tl*tN
2o"?icUN iK9N i@
cout KK tPo0 ds2i t KK ds2%0o0?@ KK tl*tN
"etu"* UN
4
Ta thaáy khaí baùo íôùp chung töông töï nhö khaí baùo haøm
&& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
chung. Khaí baùo moät ñoáí töôïng cuûa íôùp naøy, trình bíeân dòch
seõ töï ñoäng sính ra taát caû caùc haøm vaø bíeán caàn thíeát.
Trong ví duï treân, khaí baùo haí kíeáu stac5 khaùc nhau, moãí
kíeáu stac5 coù haí ñoáí töôïng. Chuù yù caâu íeänh khaí baùo:
stac5Kcha"L sBX s2N €€ c"eate t!o cha"acte" stac5s
stac5Kdou$leL dsBX ds2N €€ c"eate t!o dou$le stac5s
Kíeáu döõ ííeäu mong muoán ta ñaët vaøo caëp daáu ngoaëc
nhoïn (KL). Ta coù theá taïo ra stac5 íöu tröõ kíeáu döõ ííeäu do ta
ñònh nghóa. Ví duï ta muoán söû duïng caáu truùc sau ñeá íöu vaøo
stac5:
st"uct add" 3
cha" *a#egYUhN
cha" st"eetgYUhN
cha" cit6g9UhN
cha" stateg9hN
cha" 8i0gB2hN
4N
Khí ñoù ta coù theá taïo ra moät stac5 duøng ñeá íöu kíeáu
add":
stac5Kadd"L o$bN
1.133.1. Yoät 1í ;uï 1ôùi hai kie*u ;'O !ieäu chung
Moät íôùp maãu coù theá coù nhíeàu hôn moät kíeáu döõ ííeäu
chung. Ví duï sau taïo ra moät íôùp coù haí kíeáu döõ ííeäu chung:
€ƒ This e7a#0le uses t!o ge*e"ic data t60es i* a
class de2i*itio*%
ƒ€
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
te#0late Kclass T60eBX class T60e2L class #6class
3
T60eB iN
T60e2 bN
Gh*ông 1-. $ôù= 1a\u #)e1=late% &4
0u$lici
#6class?T60eB aX T60e2 $@ 3 i c aN b c $N 4
void sho!?@ 3 cout KK i KK w w KK b KK wl*wN 4
4N
i*t #ai*?@
3
#6classKi*tX dou$leL o$B?BUX U%29@N
#6classKcha"Xcha" ƒL o$2?w‹wXtTe#0lates add 0o!e"%t@N
o$B%sho!?@N €€ sho! i*tX dou$le
o$2%sho!?@N €€ sho! cha"X cha" ƒ
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
BU U%29
‹ Te#0lates add 0o!e"%
1.133.2. _Fng ;uïng cuûa !ôù< /aPu` !ôù< /aûng chung
Nhö ñaõ bíeát trong chöông 15, ta coù theá taûí boäí toaùn töû
gh. Muïc ñích cuûa taûí boäí toaùn töû naøy ñeá ta coù theá kíeám
tra bíeân maûng.
Baèng caùch keát hôïp toaùn töû taûí boäí vôùí íôùp maãu, ta
coù theá taïo ra moät íôùp maûng an toaøn vaø coù kíeáu döõ ííeäu
baát kì. Ví duï:
€€ A ge*e"ic sa2e a""a6 e7a#0le%
Ji*clude Kiost"ea#L
Ji*clude Kcstdli$L
usi*g *a#es0ace stdN
co*st i*t SI“Š c BUN
te#0late Kclass AT60eL class at60e 3
AT60e agSI“ŠhN
0u$lici
at60e?@ 3
"egiste" i*t iN
2o"?icUN iKSI“ŠN i@ agih c iN
4
&+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
AT60e fo0e"ato"gh?i*t i@N
4N
€€ P"ovide "a*ge chec5i*g 2o" at60e%
te#0lateKclass AT60eL AT60e fat60eKAT60eLiio0e"ato"gh?i*t
i@
3
i2?iKU ˆˆ iL SI“Š-B@ 3
cout KK tl*I*de7 value o2 tN
cout KK i KK t is out-o2-$ou*ds%l*tN
e7it?B@N
4
"etu"* agihN
4
i*t #ai*?@
3
at60eKi*tL i*to$N €€ i*tege" a""a6
at60eKdou$leL dou$leo$N €€ dou$le a""a6
i*t iN
cout KK tI*tege" a""a6i tN
2o"?icUN iKSI“ŠN i@ i*to$gih c iN
2o"?icUN iKSI“ŠN i@ cout KK i*to$gih KK t tN
cout KK wl*wN
cout KK tCou$le a""a6i tN
2o"?icUN iKSI“ŠN i@ dou$leo$gih c ?dou$le@ i€9N
2o"?icUN iKSI“ŠN i@ cout KK dou$leo$gih KK t tN
cout KK wl*wN
i*to$gB2h c BUUN €€ ge*e"ates "u*ti#e e""o"
"etu"* UN
4
1.133.3. Q'û ;uïng tha/ ,oá khoDng +ònh kie*u 1ôùi
!ôù< chung
Trong ñaëc taû te#0late cuûa íôùp chung, ta coù theá chæ ra
tham soá khoâng kíeáu (nonAt?=e). Tình huoáng naøy thöïc chaát
gíoáng nhö tham soá haøm thoâng thöôøng bao goàm teân vaø
kíeáu. Ví duï sau íaø caùch toát hôn ñeá taïo ra moät íôùp maûng an
toaøn:
Gh*ông 1-. $ôù= 1a\u #)e1=late% &7
€€ Ce#o*st"ate *o*-t60e te#0late a"gu#e*ts%
Ji*clude Kiost"ea#L
Ji*clude Kcstdli$L
usi*g *a#es0ace stdN
€€ He"eX i*t si8e is a *o*-t60e a"gu#e*t%
te#0late Kclass AT60eX i*t si8eL class at60e 3
AT60e agsi8ehN €€ le*gth o2 a""a6 is 0assed i* si8e
0u$lici
at60e?@ 3
"egiste" i*t iN
2o"?icUN iKsi8eN i@ agih c iN
4
AT60e fo0e"ato"gh?i*t i@N
4N
€€ P"ovide "a*ge chec5i*g 2o" at60e%
te#0late Kclass AT60eX i*t si8eL
AT60e fat60eKAT60eX si8eLiio0e"ato"gh?i*t i@
3
i2?iKU ˆˆ iL si8e-B@ 3
cout KK tl*I*de7 value o2 tN
cout KK i KK t is out-o2-$ou*ds%l*tN
e7it?B@N
4
"etu"* agihN
4
i*t #ai*?@
3
at60eKi*tX BUL i*to$N €€ i*tege" a""a6 o2 si8e BU
at60eKdou$leX BVL dou$leo$N €€dou$le a""a6 o2 si8e BV
i*t iN
cout KK tI*tege" a""a6i tN
2o"?icUN iKBUN i@ i*to$gih c iN
2o"?icUN iKBUN i@ cout KK i*to$gih KK t tN
cout KK wl*wN
cout KK tCou$le a""a6i tN
2o"?icUN iKBVN i@ dou$leo$gih c ?dou$le@ i€9N
2o"?icUN iKBVN i@ cout KK dou$leo$gih KK t tN
cout KK wl*wN
&- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
i*to$gB2h c BUUN €€ ge*e"ates "u*ti#e e""o"
"etu"* UN
4
si8e ñöôïc khaí baùo kíeáu i*t, tham soá naøy ñöôïc söû duïng
ñeá moâ taû kích thöôùc cuûa maûng. Maëc daàu si8e ñöôïc moâ
taû nhö íaø bíeán, nhöng gíaù trò cuûa noù phaûí ñöôïc bíeát taïí
thôøí ñíeám bíeân dòch. Níeàu naøy cho pheùp noù ñöôïc söû duïng
ñeá thíeát íaäp kích thöôùc cuûa maûng. Tham soá khoâng kíeáu
chæ thao taùc treân soá nguyeân, con troû vaø tham chíeáu, moïí
kíeáu khaùc ví duï nhö 2loat thì khoâng ñöôïc pheùp. Nhöõng tham
soá gôûí ñeán tham soá hình thöùc khoâng kíeáu phaûí íaø haèng
soá nguyeân, con troû hoaëc tham chíeáu ñeán caùc haøm hoaëc
ñoáí töôïng toaøn cuïc. Ví duï beân trong haøm o0e"ato"gh?@ thì
caâu íeänh sau khoâng thöïc híeän:
si8e c BUN €€ Š""o"
1.133.#. Q'û ;uïng tha/ ,oá ngaN/ +ònh 1ôùi !ôù<
/aPu
Moät íôùp maãu cuõng coù theá coù tham soá ngaàm ñònh
keát hôïp vôùí kíeáu chung. Ví duï:
te#0late Kclass ‹ci*tL class #6class 3 €€%%%
OU ñaây, kíeáu i*t seõ ñöôïc söû duïng neáu nhö khoâng coù
kíeáu naøo chæ ra íuùc khaí baùo ñoáí töôïng. Tham soá khoâng
kíeáu cuõng coù theá coù gíaù trò ngaàm ñònh. Neá chæ gíaù trò
ngaàm ñònh cho tham soá khoâng kíeáu, ta khaí baùo gíoáng nhö
tham soá thoâng thöôøng. Ví duï sau íaø moät phíeân baûn khaùc
cuûa maûng an toaøn söû duïng tham soá ngaàm ñònh caû kíeáu
döõ ííeäu vaø kích thöôùc maûng:
€€ Ce#o*st"ate de2ault te#0late a"gu#e*ts%
Ji*clude Kiost"ea#L
Ji*clude Kcstdli$L
Gh*ông 1-. $ôù= 1a\u #)e1=late% &9
usi*g *a#es0ace stdN
€€ He"eX AT60e de2aults to i*t a*d si8e de2aults to BU%
te#0late Kclass AT60eci*tX i*t si8ecBUL class at60e 3
AT60e agsi8ehN €€ si8e o2 a""a6 is 0assed i* si8e
0u$lici
at60e?@ 3
"egiste" i*t iN
2o"?icUN iKsi8eN i@ agih c iN
4
AT60e fo0e"ato"gh?i*t i@N
4N
€€ P"ovide "a*ge chec5i*g 2o" at60e%
te#0late Kclass AT60eX i*t si8eL
AT60e fat60eKAT60eX si8eLiio0e"ato"gh?i*t i@
3
i2?iKU ˆˆ iL si8e-B@ 3
cout KK tl*I*de7 value o2 tN
cout KK i KK t is out-o2-$ou*ds%l*tN
e7it?B@N
4
"etu"* agihN
4
i*t #ai*?@
3
at60eKi*tX BUUL i*ta""a6N €€ i*tege" a""a6X si8e BUU
at60eKdou$leL dou$lea""a6N€€dou$le a""a6Xde2ault si8e
at60eKL de2a""a6N €€ de2ault to i*t a""a6 o2 si8e BU
i*t iN
cout KK ti*t a""a6i tN
2o"?icUN iKBUUN i@ i*ta""a6gih c iN
2o"?icUN iKBUUN i@ cout KK i*ta""a6gih KK t tN
cout KK wl*wN
cout KK tdou$le a""a6i tN
2o"?icUN iKBUN i@ dou$lea""a6gih c ?dou$le@ i€9N
2o"?icUN iKBUN i@ cout KK dou$lea""a6gih KK t tN
cout KK wl*wN
cout KK tde2a""a6 a""a6i tN
2o"?icUN iKBUN i@ de2a""a6gih c iN
46 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
2o"?icUN iKBUN i@ cout KK de2a""a6gih KK t tN
cout KK wl*wN
"etu"* UN
4
Caâu íeänh:
te#0late Kclass AT60eci*tX i*t si8ecBUL class at60e 3
Vôùí At60e ngaàm ñònh íaø kíeáu i*t vaø si8e ngaàm ñònh
íaø BU. Vaäy ñoáí töôïng at60e coù theá taïo ra moät trong 3 caùch:
Chæ roõ raøng kíeáu döõ ííeäu vaø kích thöôùc.
Chæ roõ kíeáu döõ ííeäu vaø cho kích thöôùc baèng 10.
Chæ ngaàm ñònh cho kíeáu íaø i*t vaø kích thöôùc baèng 10.
1.133.2. ôù< +aGc bieät roO ra$ng
Ta coù theá chæ ra moät íôùp roõ raøng cuûa íôùp chung. Ví
duï:
€€ Ce#o*st"ate class s0eciali8atio*%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
te#0late Kclass TL class #6class 3
T 7N
0u$lici
#6class?T a@ 3
cout KK tI*side ge*e"ic #6classl*tN
7 c aN
4
T get7?@ 3 "etu"* 7N 4
4N
€€ Š70licit s0eciali8atio* 2o" i*t%
te#0late KL class #6classKi*tL 3
i*t 7N
0u$lici
#6class?i*t a@ 3
cout KK tI*side #6classKi*tL s0eciali8atio*l*tN
7 c a ƒ aN
Gh*ông 1-. $ôù= 1a\u #)e1=late% 41
4
i*t get7?@ 3 "etu"* 7N 4
4N
i*t #ai*?@
3
#6classKdou$leL d?BU%B@N
cout KK tdou$lei t KK d%get7?@ KK tl*l*tN
#6classKi*tL i?V@N
cout KK ti*ti t KK i%get7?@ KK tl*tN
"etu"* UN
4
Keát quaû xuaát híeän nhö sau:
I*side ge*e"ic #6class
dou$lei BU%B
I*side #6classKi*tL s0eciali8atio*
i*ti 2V
Chuù yù caâu íeänh :
te#0late KL class #6classKi*tL 3
Baùo cho trình bíeân dòch bíeát moät ñaëc taû roõ raøng soá
nguyeân cuûa íôùp chung #6class%
1.13%. TDU _=BW> I^HQ@>XQ P>U Q[HBJI
Töø khoùa t60e*a#e vaø e70o"t ñöôïc boá sung vaøo C++
trong nhöõng naêm gaàn ñaây, caû haí coù vaí troø ñaëc bíeät trong
íaäp trình C++.
Töø khoùa t60e*a#e coù haí caùch söû duïng: ñaàu tíeân ñoù
íaø duøng ñeá thay theá töø khoùa class trong khaí baùo te#0late.
Ví duï:
te#0late Kt60e*a#e ‹L void s!a0a"gs?‹ faX ‹ f$@
3
‹ te#0N
te#0 c aN
a c $N
42 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
$ c te#0N
4
OU ñaây t60e*a#e chæ ra kíeáu chung ‹. Khoâng coù söï
khaùc nhau gíöõa caùch söû duïng class vaø t60e*a#e trong ngöõ
caûnh naøy.
Caùch söû duïng thöù haí baùo cho trình bíeân dòch bíeát
raèng teân ñöôïc söû duïng trong khaí baùo maãu íaø teân kíeáu.
Töø khoùa e70o"t ñöùng tröôùc moät khaí baùo te#0late, noù
cho pheùp nhöõng ;ile khaùc söû duïng maãu ñaõ khaí baùo ôû ;ile
naøy baèng caùch chæ caàn chæ ra khaí baùo cuûa noù maø
khoâng caàn ñònh nghóa íaïí.
1.13,. !DWS X>d@= SOT> FLWH X>fO
Lôùp maãu gíuùp ta ñaït ñöôïc muïc ñích khoù khaên nhaát
trong íaäp trình ñoù íaø: taïo ra moät maõ coù theá söû duïng íaïí.
Thoâng qua caùch söû duïng cuûa íôùp maãu, ta coù theá taïo ra
moät ;ra1eRork coù theá öùng duïng treân nhíeàu tình huoáng íaäp
trình khaùc nhau. Ví duï nhö íôùp stac5 coù theá íöu tröõ nhíeàu
kíeáu döõ ííeäu khaùc nhau.
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
4
C=DL@A 1#. QO>T@ F^W @AB>dZ FQG
Ouaûn íyù ngoaïí íeä cho pheùp ta quaûn íí íoãí taïí thôøí ñíeám
thöïc thí. Söû duïng quaûn íí ngoaïí íeä, chöông trình cuûa ta coù
theá töï ñoäng goïí chöông trình quaûn íí íoãí khí moät íoãí xuaát
híeän. Níeám thuaän tíeän chính cuûa quaûn íí ngoaïí íeä íaø töï
ñoäng ñöa ra maõ quaûn íí íoãí ñöôïc víeát baèng tay tröôùc ñoù.
1.13-. CL V>T@ PQ? NO>T@ F^W @AB>dZ FQG
Ouaûn íí ngoaïí íeä trong C++ ñöôïc xaây döïng treân ba töø
khoùa t"6, catch vaø th"o!. Toáng quaùt, caâu íeänh trong chöông
trình maø ta muoán theo doõí ngoaïí íeä ñöôïc chöùa trong khoáí
t"6. Neáu moät ngoaïí íeä (moät íoãí) xuaát híeän trong khoáí t"6,
noù seõ ñöôïc neùm (söû duïng th"o!). Ngoaïí íeä naøy seõ ñöôïc
baét vaø xöû íí.
Maõ muoán theo doõí cho ngoaïí íeä phaûí ñöôïc thöïc híeän
töø beân trong khoáí t"6. Caùc haøm thöïc híeän beân trong khoáí
t"6 cuõng coù theá neùm ngoaïí íeä. Ngoaïí íeä ñöôïc neùm bôûí
maõ theo doõí ñöôïc baét bôûí caâu íeänh catch theo sau ngay íaäp
töùc íeänh t"6. Daïng toáng quaùt cuûa íeänh t"6 vaø catch nhö
sau:
t"6 3
€€ t"6 $loc5
4
catch ?t60eB a"g@ 3
€€ catch $loc5
4
catch ?t60e2 a"g@ 3
€€ catch $loc5
4
catch ?t60e9 a"g@ 3
€€ catch $loc5
4& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4
%%
%
catch ?t60eN a"g@ 3
€€ catch $loc5
4
Khí ngoaïí íeä ñöôïc neùm, noù ñöôïc baét bôûí moät caâu
íeänh catch (xöû íí ngoaïí íeä). Coù theá coù nhíeàu hôn moät íeänh
catch keát hôïp vôùí íeänh t"6. Moãí íeänh catch ñöôïc söû duïng
ñeá xaùc ñònh kíeáu ngoaïí íeä. Noù íaø kíeáu döõ ííeäu ñöôïc chæ ra
bôûí íeänh catch maø khôùp vôùí ngoaïí íeä naøo, caâu íeänh catch
töông öùng ñöôïc thöïc thí (taát caû caùc íeänh catch khaùc seõ bò
boû qua). Khí moät ngoaïí íeä ñöôïc baét, a"g seõ nhaän gíaù trò
cuûa noù. Taát caùc kíeáu döõ ííeäu ñeàu coù theá baét ñöôïc keá
caû íôùp maø ta taïo ra. Neáu khoâng coù ngoaïí íeä naøo ñöôïc
neùm (töùc íaø khoâng coù íoãí naøo xuaát híeän beân trong íeänh
t"6), khoâng coù íeänh catch naøo ñöôïc thöïc thí. Daïng chung
cuûa caâu íeänh th"o! nhö sau:
th"o! e7ce0tio*N
th"o! seõ sính ra moät ngoaïí íeä ñöôïc chæ roõ bôûí
e7ce0tio*. Neáu ngoaïí íeä naøy ñöôïc baét, khí ñoù th"o! phaûí
ñöôïc thöïc thí hoaëc töø beân trong khoáí t"6 hoaëc töø haøm maø
ñöôïc goïí beân trong khoáí t"6 (tröïc tíeáp hoaëc gíaùn tíeáp).
Neáu ta neùm moät ngoaïí íeä maø khoâng thích hôïp vôùí
íeänh catch naøo, coù theá chöông trình seõ keát thuùc moät caùch
khoâng bình thöôøng. Neùm moät ngoaïí íeä khoâng quaûn íí ñöôïc,
chöông trình seõ goïí haøm te"#i*ate?@. Ngaàm ñònh, te"#i*ate?@
seõ goïí a$o"t?@ ñeá ngöøng chöông trình. Nhöng ta coù theá chæ
ra caùch keát thuùc chöông trình ríeâng cuûa mình.
Sau ñaây íaø moät ví duï ñôn gíaûn cho thaáy caùch thöùc
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
44
quaûn íí ngoaïí íeä cuûa C++:
€€ A si#0le e7ce0tio* ha*dli*g e7a#0le%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
cout KK tSta"tl*tN
t"6 3 €€ sta"t a t"6 $loc5
cout KK tI*side t"6 $loc5l*tN
th"o! BUUN €€ th"o! a* e""o"
cout KK tThis !ill *ot e7ecutetN
4
catch ?i*t i@ 3 €€ catch a* e""o"
cout KK tCaught a* e7ce0tio* -- value isi tN
cout KK i KK tl*tN
4
cout KK tŠ*dtN
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
Sta"t
I*side t"6 $loc5
Caught a* e7ce0tio* -- value isi BUU
Š*d
Ta thaáy coù moät khoáí t"6 chöùa ba caâu íeänh vaø moät
caâu íeänh catch?i*t i@ xöû íí ngoaïí íeä kíeáu nguyeân. Beân
trong khoáí t"6, chæ coù haí caâu íeänh ñaàu tíeân ñöôïc thöïc
híeän. Moät ngoaïí íeä seõ ñöôïc neùm, ñíeàu khíeán gôûí ñeán bíeáu
thöùc catch vaø khoáí t"6 keát thuùc. Thoâng thöôøng maõ beân
trong caâu íeänh catch seõ coá gaéng gíaûm taùc ñoäng cuûa íoãí
baèng caùch ñöa ra moät haønh ñoäng töông öùng. Neáu íoãí coù
theá söûa ñöôïc, chöông trình seõ tíeáp tuïc thöïc thí vôùí caùc caâu
íeänh sau catch. Tuy nhíeân, moät íoãí maø khoâng khaéc phuïc
ñöôïc, khoáí catch seõ keát thuùc chöông trình vôùí íôøí goïí haøm
4+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
a"$o"t?@ hoaëc e7it?@.
Nhö ñaõ ñeà caäp, kíeáu ngoaïí íeä phaûí khôùp vôùí kíeáu chæ
ra trong caâu íeänh catch. Ví duï, chöông trình tröôùc, neáu ta thay
ñoáí kíeáu trong caâu íeänh catch íaø dou$le, ngoaïí íeä seõ khoâng
ñöôïc baét vaø chöông trình keát thuùc khoâng bình thöôøng. Ví duï:
€€ This e7a#0le !ill *ot !o"5%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
cout KK tSta"tl*tN
t"6 3 €€ sta"t a t"6 $loc5
cout KK tI*side t"6 $loc5l*tN
th"o! BUUN €€ th"o! a* e""o"
cout KK tThis !ill *ot e7ecutetN
4
catch ?dou$le i@ 3 €€ !o*wt !o"5 2o" a* i*t e7ce0tio*
cout KK tCaught a* e7ce0tio* -- value isi tN
cout KK i KK tl*tN
4
cout KK tŠ*dtN
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
Sta"t
I*side t"6 $loc5
A$*o"#al 0"og"a# te"#i*atio*
Moät ngoaïí íeä coù theá ñöôïc neùm töø beân ngoaøí khoáí
t"6 míeãn sao noù ñöôïc neùm bôûí moät haøm maø ñöôïc goïí beân
trong khoáí t"6. Ví duï chöông trình sau íaø hôïp íeä:
€ƒ Th"o!i*g a* e7ce0tio* 2"o# a 2u*ctio* outside the
t"6 $loc5%
ƒ€
Ji*clude Kiost"ea#L
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
47
usi*g *a#es0ace stdN
void ‹test?i*t test@
3
cout KK tI*side ‹testX test isi t KK test KK tl*tN
i2?test@ th"o! testN
4
i*t #ai*?@
3
cout KK tSta"tl*tN
t"6 3 €€ sta"t a t"6 $loc5
cout KK tI*side t"6 $loc5l*tN
‹test?U@N
‹test?B@N
‹test?2@N
4
catch ?i*t i@ 3 €€ catch a* e""o"
cout KK tCaught a* e7ce0tio* -- value isi tN
cout KK i KK tl*tN
4
cout KK tŠ*dtN
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
Sta"t
I*side t"6 $loc5
I*side ‹testX test isi U
I*side ‹testX test isi B
Caught a* e7ce0tio* -- value isi B
Š*d
Khoáí t"6 coù theá ñöôïc ñaët trong moät haøm. Trong tröôøng
hôïp naøy, moãí íaàn vaøo haøm, quaûn íí ngoaïí íeä ííeân quan ñeán
haøm ñoù seõ ñöôïc thíeát íaäp íaïí (re,et). Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
€€ Locali8e a t"6€catch to a 2u*ctio*%
void ‹ha*dle"?i*t test@
4- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
3
t"63
i2?test@ th"o! testN
4
catch?i*t i@ 3
cout KK tCaught Š7ce0tio* Ji t KK i KK wl*wN
4
4
i*t #ai*?@
3
cout KK tSta"tl*tN
‹ha*dle"?B@N
‹ha*dle"?2@N
‹ha*dle"?U@N
‹ha*dle"?9@N
cout KK tŠ*dtN
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
Sta"t
Caught Š7ce0tio* Ji B
Caught Š7ce0tio* Ji 2
Caught Š7ce0tio* Ji 9
Š*d
Nhö ta thaáy, coù ba ngoaïí íeä ñöôïc neùm, sau moãí ngoaïí
íeä haøm keát thuùc. Khí haøm ñöôïc goïí íaïí íaàn nöõa, quaûn íí
ngoaïí íeä seõ ñöôïc re,et.
Nhôù raèng, maõ keát hôïp vôùí catch seõ ñöôïc thöïc thí chæ
khí noù baét ñöôïc moät ngoaïí íeä, trong caùc tröôøng hôïp coøn íaïí
noù boû qua. Ví duï sau khoâng coù ngoaïí íeä naøo ñöôïc neùm vì
vaäy khoâng coù caâu íeänh catch naøo thöïc thí.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
49
cout KK tSta"tl*tN
t"6 3 €€ sta"t a t"6 $loc5
cout KK tI*side t"6 $loc5l*tN
cout KK tStill i*side t"6 $loc5l*tN
4
catch ?i*t i@ 3 €€ catch a* e""o"
cout KK tCaught a* e7ce0tio* -- value isi tN
cout KK i KK tl*tN
4
cout KK tŠ*dtN
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
Sta"t
I*side t"6 $loc5
Still i*side t"6 $loc5
Š*d
1.133.1. RaT/ baTt /oät kie*u !ôù<
Moät ngoaïí íeä coù kíeáu baát keá caû kíeáu íôùp maø ta taïo
ra. Thöïc teá thì raát nhíeàu ngoaïí íeä coù kíeáu íôùp do ngöôøí
duøng taïo ra hôn íaø kíeáu döõ ííeäu xaây döïng saún. Tuy nhíeân íí
do chung nhaát maø ta muoán ñònh nghóa moät kíeáu íôùp cho
ngoaïí íeä duøng ñeá moâ taû íoãí xuaát híeän. Thoâng tín naøy
ñöôïc söû duïng ñeá bôûí moät trình quaûn íí ngoaïí íeä gíuùp xöû íí
íoãí. Ví duï:
€€ Catchi*g class t60e e7ce0tio*s%
Ji*clude Kiost"ea#L
Ji*clude Kcst"i*gL
usi*g *a#es0ace stdN
class M6Š7ce0tio* 3
0u$lici
cha" st"_!hatgRUhN
i*t !hatN
M6Š7ce0tio*?@ 3 ƒst"_!hat c UN !hat c UN 4
+6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
M6Š7ce0tio*?cha" ƒsX i*t e@ 3
st"c06?st"_!hatX s@N
!hat c eN
4
4N
i*t #ai*?@
3
i*t iN
t"6 3
cout KK tŠ*te" a 0ositive *u#$e"i tN
ci* LL iN
i2?iKU@
th"o! M6Š7ce0tio*?tNot PositivetX i@N
4
catch ?M6Š7ce0tio* e@ 3 €€ catch a* e""o"
cout KK e%st"_!hat KK ti tN
cout KK e%!hat KK tl*tN
4
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
Š*te" a 0ositive *u#$e"i -Y
Not Positivei -Y
Chöông trình treân nhaéc ngöôøí duøng nhaäp moät soá
nguyeân döông. Neáu nhaäp moät soá aâm, moät ñoáí töôïng
M6Š7ce0tio* seõ ñöôïc taïo ra ñeá moâ taû íoãí. Thaät vaäy,
M6Š7ce0tio* ñoùng goùí thoâng baùo íoãí, thoâng tín naøy sau ñoù
ñöôïc söû duïng bôûí trình quaûn íí ngoaïí íeä.
1.133.2. Q'û ;uïng nhieNu !eänh catch
Ta coù theá coù nhíeàu íeänh catch keát hôïp vôùí moät íeänh
t"6. Thöïc teá ñaây íaø moät tình huoáng thöôøng hay söû duïng.
Tuy nhíeân moãí íeänh catch phaûí baét kíeáu ngoaïí íeä khaùc
nhau. Ví duï sau seõ baét caû soá nguyeân vaø chuoãí.
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
+1
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
€€ Ci22e"e*t t60es o2 e7ce0tio*s ca* $e caught%
void ‹ha*dle"?i*t test@
3
t"63
i2?test@ th"o! testN
else th"o! t&alue is 8e"otN
4
catch?i*t i@ 3
cout KK tCaught Š7ce0tio* Ji t KK i KK wl*wN
4
catch?co*st cha" ƒst"@ 3
cout KK tCaught a st"i*gi tN
cout KK st" KK wl*wN
4
4
i*t #ai*?@
3
cout KK tSta"tl*tN
‹ha*dle"?B@N
‹ha*dle"?2@N
‹ha*dle"?U@N
‹ha*dle"?9@N
cout KK tŠ*dtN
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
Sta"t
Caught Š7ce0tio* Ji B
Caught Š7ce0tio* Ji 2
Caught a st"i*gi &alue is 8e"o
Caught Š7ce0tio* Ji 9
Š*d
Toáng quaùt, íeänh catch seõ ñöôïc kíeám tra theo thöù töï
xuaát híeän trong chöông trình. Chæ moät caâu íeänh naøo khôùp
môùí ñöôïc thöïc híeän. Taát caû caùc khoáí catch khaùc seõ bò boû
+2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
qua.
1.13+. QO>T@ F^W @AB>dZ FQG FLWH ]>f@ [O>RI
Haõy caán thaän traät töï cuûa caùc íeänh catch khí baét moät
ngoaïí íeä bao goàm caû íôùp daãn xuaát vaø íôùp cô sôû bôûí vì
íeänh catch cho íôùp cô sôû seõ khôùp vôùí moïí íôùp daãn xuaát.
Thaät vaäy, neáu muoán baét ngoaïí íeä cuûa íôùp daãn xuaát vaø
íôùp cô sôû, ta ñaët íôùp daãn xuaát ñaàu tíeân trong trình töï. Neáu
khoâng íaøm ñíeàu naøy, íôùp cô sôû seõ baét taát caû íôùp daãn
xuaát. Ví duï:
€€ Catchi*g de"ived classes%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class B 3
4N
class Ci 0u$lic B 3
4N
i*t #ai*?@
3
C de"ivedN
t"6 3
th"o! de"ivedN
4
catch?B $@ 3
cout KK tCaught a $ase class%l*tN
4
catch?C d@ 3
cout KK tThis !o*wt e7ecute%l*tN
4
"etu"* UN
4
Ví duï treân, de"ived íaø moät ñoáí töôïng coù íôùp B íaø íôùp
cô sôû noù seõ ñöôïc baét bôûí catch ñaàu tíeân vaø catch thöù haí
seõ khoâng bao gíôø thöïc híeän.
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
+
1.134. TOU^ VZQR@ NO>T@ F^W @AB>dZ FQG
1.138.1. BaTt taát caû caùc ngoaïi !eä
Trong moät soá tình huoáng, ta muoán chöông trình baét taát
caû caùc ngoaïí íeä thay vì baét töøng ngoaïí íeä ríeâng bíeät. Neá
thöïc híeän ñíeàu naøy ta söû duïng daïng sau:
catch?%%%@ 3
€€ 0"ocess all e7ce0tio*s
4
Daáu ba chaám seõ khôùp moïí kíeáu ñoáí töôïng. Ví duï:
€€ This e7a#0le catches all e7ce0tio*s%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void ‹ha*dle"?i*t test@
3
t"63
i2?testccU@ th"o! testN €€ th"o! i*t
i2?testccB@ th"o! wawN €€ th"o! cha"
i2?testcc2@ th"o! B29%29N €€ th"o! dou$le
4
catch?%%%@ 3 €€ catch all e7ce0tio*s
cout KK tCaught O*e^l*tN
4
4
i*t #ai*?@
3
cout KK tSta"tl*tN
‹ha*dle"?U@N
‹ha*dle"?B@N
‹ha*dle"?2@N
cout KK tŠ*dtN
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
Sta"t
+& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Caught O*e^
Caught O*e^
Caught O*e^
Š*d
Ví duï treân, coù ba íeänh th"o! nhöng chæ coù moät íeänh
catch.
Moät caùch söû duïng toát nhaát cuûa íeänh catch?`@ íaø baét
taát caû caùc tröôøng hôïp coøn íaïí sau khí ñaõ chæ ra caùc tröôøng
hôïp ríeâng bíeät. Ví duï:
€€ This e7a#0le uses catch?%%%@ as a de2ault%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void ‹ha*dle"?i*t test@
3
t"63
i2?testccU@ th"o! testN €€ th"o! i*t
i2?testccB@ th"o! wawN €€ th"o! cha"
i2?testcc2@ th"o! B29%29N €€ th"o! dou$le
4
catch?i*t i@ 3 €€ catch a* i*t e7ce0tio*
cout KK tCaught a* i*tege"l*tN
4
catch?%%%@ 3 €€ catch all othe" e7ce0tio*s
cout KK tCaught O*e^l*tN
4
4
i*t #ai*?@
3
cout KK tSta"tl*tN
‹ha*dle"?U@N
‹ha*dle"?B@N
‹ha*dle"?2@N
cout KK tŠ*dtN
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
+4
Sta"t
Caught a* i*tege"
Caught O*e^
Caught O*e^
Š*d
1.138.2. Haïn cheá cuûa ngoaïi !eä
Ta coù theá haïn cheá kíeáu ngoaïí íeä maø haøm coù theá
neùm ra ngoaøí. Trong thöïc teá, ta coù theá chaën moät haøm
neùm moät ngoaïí íeä baát kì. Neá thöïc híeän ñíeàu naøy ta theâm
caâu íeänh th"o! vaøo ñònh nghóa haøm. Daïng toáng quaùt nhö
sau:
"et-t60e 2u*c-*a#e(a"g-list) th"o!?t60e-list@
3
€€ %%%
4
t60e-list íaø kíeáu döõ ííeäu coù theá ñöôïc neùm bôûí haøm.
Neáu chöông trình neùm kíeáu döõ ííeäu khaùc, chöông trình seõ
keát thuùc. Neáu ta khoâng muoán haøm neùm baát kì kíeáu döõ
ííeäu naøo, t60e-list seõ ñeá troáng. Ví duï:
€€ Rest"icti*g 2u*ctio* th"o! t60es%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
€€ This 2u*ctio* ca* o*l6 th"o! i*tsX cha"sX a*d dou$les%
void ‹ha*dle"?i*t test@ th"o!?i*tX cha"X dou$le@
3
i2?testccU@ th"o! testN €€ th"o! i*t
i2?testccB@ th"o! wawN €€ th"o! cha"
i2?testcc2@ th"o! B29%29N €€ th"o! dou$le
4
i*t #ai*?@
3
cout KK tsta"tl*tN
t"63
++ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
€€ alsoX t"6 0assi*g B a*d 2 to ‹ha*dle"?@
‹ha*dle"?U@N
4
catch?i*t i@ 3
cout KK tCaught a* i*tege"l*tN
4
catch?cha" c@ 3
cout KK tCaught cha"l*tN
4
catch?dou$le d@ 3
cout KK tCaught dou$lel*tN
4
cout KK te*dtN
"etu"* UN
4
Trong chöông trình treân, haøm ‹ha*dle"?@ chæ coù theá
neùm kíeáu kí töï, soá nguyeân, dou$le. Neáu ta neùm moät kíeáu
ngoaïí íeä khaùc, chöông trình seõ keát thuùc (baèng caùch goïí
haøm u*e70ected?@). Neá thaáy roõ ví duï naøy, gíaû söû ta boû i*t
trong danh saùch vaø bíeân dòch íaïí chöông trình.
Löu yù, moät haøm coù theá haïn cheá kíeáu döõ ííeäu ñöôïc
neùm ngöôïc trôû íaïí khoáí t"6. Khoáí t"6 beân trong moät haøm
coù theá neùm moïí kíeáu baát kì míeãn íaø noù ñöôïc baét trong
haøm. Haïn cheá naøy chæ coù taùc duïng khí noù neùm ngoaïí íeä
beân ngoaøí haøm. Ví duï:
€€ This 2u*ctio* ca* th"o! NO e7ce0tio*s^
void ‹ha*dle"?i*t test@ th"o!?@
3
€ƒ The 2ollo!i*g state#e*ts *o lo*ge" !o"5% I*steadX
the6 !ill cause a* a$*o"#al 0"og"a# te"#i*atio*% ƒ€
i2?testccU@ th"o! testN
i2?testccB@ th"o! wawN
i2?testcc2@ th"o! B29%29N
4
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
+7
1.138.3. Reù/ !aïi /oät ngoaïi !eä
Neáu ta muoán neùm íaïí moät ngoaïí íeä trong chöông trình
quaûn íí ngoaïí íeä, ta coù theá íaø ñíeàu naøy baèng caùch goïí
haøm th"o! maø khoâng coù ngoaïí íeä naøo theo sau. Moät ngoaïí
íeä chæ coù theá ñöôïc neùm íaïí trong khoáí catch (hoaëc töø caùc
haøm ñöôïc goïí beân trong khoáí catch). Ví duï:
€€ Š7a#0le o2 t"eth"o!i*gt a* e7ce0tio*%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void ‹ha*dle"?@
3
t"6 3
th"o! thellotN €€ th"o! a cha" ƒ
4
catch?co*st cha" ƒ@ 3 €€ catch a cha" ƒ
cout KK tCaught cha" ƒ i*side ‹ha*dle"l*tN
th"o! N €€ "eth"o! cha" ƒ out o2 2u*ctio*
4
4
i*t #ai*?@
3
cout KK tSta"tl*tN
t"63
‹ha*dle"?@N
4
catch?co*st cha" ƒ@ 3
cout KK tCaught cha" ƒ i*side #ai*l*tN
4
cout KK tŠ*dtN
"etu"* UN
4
Keát quaû híeän treân maøn hình nhö sau:
Sta"t
Caught cha" ƒ i*side ‹ha*dle"
Caught cha" ƒ i*side #ai*
+- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Š*d
1.13#. TKX =ZQMO IQJXZ@>IQ(" P>U O@Q[HQSIQ]("
Nhö ñaõ ñeà caäp, te"#i*ate?@ vaø u*e70ected?@ ñöôïc goïí
khí xuaát híeän moät íoãí trong quaù trình xöû íí ngoaïí íeä. Nhöõng
haøm naøy coù saún trong thö víeän chuaán vaø ñaët trong thö
víeän Ke7ce0tio*L.
void te"#i*ate?@N
void u*e70ected?@N
Haøm te"#i*ate?@ ñöôïc goïí baát cöù khí naøo trình quaûn íí
ngoaïí íeä khoâng tìm thaáy moät caâu íeänh catch khôùp vôùí moät
ngoaïí íeä. Noù cuõng ñöôïc goïí neáu chöông trình cuûa ta neùm íaïí
moät ngoaïí íeä khí khoâng coù moät ngoaïí íeä naøo ñöôïc neùm
tröôùc ñoù.
Haøm u*e70ected?@ ñöôïc goïí khí haøm neùm moät ngoaïí íeä
maø khoâng coù trong danh saùch ñöôïc neùm.
1.139.1. &hieát !aä< 0uaûn !)ù ter/inate 1a$
uneM<ecte;
Haøm te"#i*ate?@ vaø haøm u*e70ected?@ ñôn gíaûn goïí
moät haøm khaùc ñeá keát thuùc chöông trình. Ngaàm ñònh thì
haøm te"#i*ate?@ goïí haøm a$o"t?@ vaø u*e70ected?@ seõ goïí
haøm te"#i*ate?@. Ngaàm ñònh haí haøm naøy keát thuùc chöông
trình neáu gaëp íoãí. Tuy nhíeân ta coù theá thay ñoáí haøm ñöôïc
goïí bôûí te"#i*ate?@ vaø u*e70ected?@. Neá íaøm víeäc naøy ta
söû duïng haøm set_te"#i*ate?@.
te"#i*ate_ha*dle" set_te"#i*ate?te"#i*ate_ha*dle"
*e!ha*dle"@ th"o!?@N
*e!ha*dle" íaø con troû ñeán quaûn íí te"#i*ate?@ môùí.
Haøm traû veà con troû ñeán quaûn íí te"#i*ate?@ tröôùc ñoù.
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
+9
*e!ha*dle" phaûí coù kíeáu te"#i*ate_ha*dle" vaø ñöôïc ñònh
nghóa nhö sau:
t60ede2 void ?ƒte"#i*ate_ha*dle"@?@N
Töông töï vôùí haøm u*e70ected?@%
u*e70ected_ha*dle" set_u*e70ected?u*e70ected_ha*dle"
*e!ha*dle"@ th"o!?@N
Caû haí haøm set_u*e70ected?@ vaø set_te"#i*ate?@ ñaët
trong tíeâu ñeà Ke7ce0tio*L. Ví duï:
€€ Set a *e! te"#i*ate ha*dle"%
Ji*clude Kiost"ea#L
Ji*clude Kcstdli$L
Ji*clude Ke7ce0tio*L
usi*g *a#es0ace stdN
void #6_Tha*dle"?@ 3
cout KK tI*side *e! te"#i*ate ha*dle"l*tN
a$o"t?@N
4
i*t #ai*?@
3
€€ set a *e! te"#i*ate ha*dle"
set_te"#i*ate?#6_Tha*dle"@N
t"6 3
cout KK tI*side t"6 $loc5l*tN
th"o! BUUN €€ th"o! a* e""o"
4
catch ?dou$le i@ 3 €€ !o*wt catch a* i*t e7ce0tio*
€€ %%%
4
"etu"* UN
4
Keát quaû híeän treân maøn hình nhö sau:
I*side t"6 $loc5
I*side *e! te"#i*ate ha*dle"
a$*o"#al 0"og"a# te"#i*atio*
76 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
1.1%/. H>UX O@S>OA=IoQ[HQSIZB@("
$ool u*caught_e7ce0tio*? @N
Haøm traû veà t"ue neáu moät ngoaïí íeä ñöôïc neùm nhöng
vaãn chöa baét. Neáu ngoaïí íeä ñaõ ñöôïc baét haøm traû veà
2alse.
1.1%1. ÖÙ@A ]Od@A SOT> NO>T@ F^W @AB>dZ FQG
Ouaûn íí ngoaïí íeä ñöôïc thíeát keá ñeá cung caáp moät
phöông tíeän maø chöông trình coù theá söû duïng ñeá quaûn íí caùc
söï kíeän baát thöôøng. Níeàu naøy coù nghóa íaø quaûn íí íoãí phaûí
íaøm víeäc gì ñoù khí moät íoãí xuaát híeän. Xeùt ví duï sau, nhaäp
vaøo haí soá vaø chía soá ñaàu cho soá thöù haí. Noù söû duïng
quaûn íí ngoaïí íeä neáu xuaát híeän íoãí chía cho U.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void divide?dou$le aX dou$le $@N
i*t #ai*?@
3
dou$le iX bN
do 3
cout KK tŠ*te" *u#e"ato" ?U to sto0@i tN
ci* LL iN
cout KK tŠ*te" de*o#i*ato"i tN
ci* LL bN
divide?iX b@N
4 !hile?i ^c U@N
"etu"* UN
4
void divide?dou$le aX dou$le $@
3
t"6 3
i2?^$@ th"o! $N €€ chec5 2o" divide-$6-8e"o
cout KK tResulti t KK a€$ KK e*dlN
4
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
71
catch ?dou$le $@ 3
cout KK tCa*wt divide $6 8e"o%l*tN
4
4
Chöông trình treân seõ khoâng theá tíeáp tuïc neáu ngöôøí
duøng nhaäp vaøo moät soá thöù haí baèng khoâng. Chöông trình
seõ nhaéc íaïí ngöôøí duøng nhaäp vaøo haí soá vaø ta coù theá
tíeáp tuïc chöông trình.
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
7
C=DL@A 2/. HQG I=BR@A P>UB5J> IJB@A
C99
C++ hoã trôï haí heä thoáng vaøo ra: moät keá thöøa töø C
vaø moät heä thoáng vaøo ra höôùng ñoáí töôïng ñöôïc ñònh nghóa
bôûí C++ (ñöôïc goïí ñôn gíaûn íaø heä thoáng vaøo ra C++). Heä
thoáng vaøo ra döïa vaøo C ñaõ ñöôïc gíôùí thíeäu trong phaàn
moät. Trong phaàn naøy chæ gíôùí thíeäu heä thoáng vaøo ra C++.
1.1%2. !B \>W@= H=ZQC@ V>T@ SOE P>U =ZQG@ Y>dZ
Híeän nay coù haí phíeân baûn cuûa thö víeän vaøo/ra höôùng
ñoáí töôïng: moät phíeân baûn cuõ hôn döïa vaøo ñaët taû goác
cuûa C++ vaø phíeân baûn môùí hôn döïa vaøo C++ chuaán. Thö
víeän cuõ ñöôïc hoã trôï bôûí ;ile tíeâu ñeà Kiost"ea#%hL. thö víeän
môùí ñöôïc hoã trôï bôûí Kiost"ea#L. Haí thö víeän naøy xuaát híeän
gíoáng nhau bôûí thö víeän môùí caäp nhaät vaø caûí tíeán thö víeän
cuõ.
Coù haí söï khaùc nhau cô baûn gíöõa thö víeän môùí vaø cuõ.
Thöù nhaát thö víeän môùí boá sung moät vaøí moät vaøí ñaëc tröng
vaø ñònh nghóa moät vaøí kíeáu döõ ííeäu môùí. Thöù haí, thö víeän
cuõ coù teân íaø toaøn cuïc thö víeän môùí coù teân trong khoâng
gían std.
1.1%3. C>WS FOB?@A IJB@A C99
Gíoáng nhö heä thoáng vaøo ra trong C chuaán, heä thoáng
vaøo ra trong C++ chuaán hoaït ñoäng thoâng qua íuoàng. Nhö ta
ñaõ bíeát, íuoàng nhö íaø thíeát bò logic hoaëc tíeâu thuï hoaëc taïo
ra thoâng tín. Moät íuoàng ííeân keát vôùí moät thíeát bò vaät íí bôûí
heä thoáng vaøo ra. Taát caû caùc íuoàng ñeàu coù caùch hoaït
7& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
ñoäng gíoáng nhau maëc daàu coù theá ñöôïc keát noáí vôùí thöïc
theá khaùc. Níeàu naøy coù theá gíaûí thích vì sao cuøng moät haøm
vaøo ra nhöng coù theá ghí döõ ííeäu treân ;ile, treân maùy ín, treân
maøn hình.
1.1%%. LLWH S>WS FOB?@A
C++ hoã trôï vaøo/ra trong thö víeän Kiost"ea#L, trong ;ile
tíeâu naøy taäp caùc íôùp coù phaân caáp hoã trôï thao taùc vaøo
ra. Caùc íôùp vaøo ra ñöôïc baét ñaàu bôûí heä thoáng caùc íôùp
maãu. Trong C++ taïo ra haí ñaëc taû cuûa íôùp maãu naøy. Moät
hoã trôï cho kí töï -Abit, moät hoã trôï cho kí töï roäng. Trong caùc
phaàn sau chæ söû duïng íôùp kí töï -Abit. Thao taùc treân kí töï
roäng cuõng töông töï.
Heä thoáng vaøo ra trong C++ haí íôùp maãu coù ííeân quan
vôùí nhau. Lôùp ñaàu tíeân daãn xuaát töø íôùp vaøo/ra caáp thaáp
ñöôïc goïí íaø $asic_st"ea#$u2. Lôùp naøy hoã trôï caùc thao taùc
vaøo/ra cô baûn ôû caáp thaáp. Noù cung caáp caùc hoã trôï cô
baûn cho toaøn boä heä thoáng vaøo/ra trong C++. Tröø tröôøng
hôïp ta ñang íaäp trình naâng cao, ta khoâng caàn söû duïng tröïc
tíeáp íôùp $asic_st"ea#$u2. Lôùp tíeáp theo maø ta seõ thöôøng
xuyeân íaøm víeäc ñöôïc daãn xuaát töø íôùp $asic_ios. Naây íaø
íôùp vaøo/ra caáp cao cung caáp ñònh daïng, kíeám tra íoãí vaø
thoâng tín traïng thaùí ííeân quan ñeán íuoàng vaøo ra. Lôùp
$asic_ios ñöôïc söû duïng nhö íaø íôùp cô sôû cho moät vaøí íôùp
daãn xuaát nhö $asic_ist"ea#, $asic_ost"ea# vaø
$asic_iost"ea#. Nhöõng íôùp naøy duøng ñeá taïo ra caùc íuoàng
vaøo, ra, vaøo/ra töông öùng. Danh saùch sau cho bíeát caùc íôùp
íaøm víeäc treân kí töï -Abit vaø kí töï roäng.
Template Class
Characterase!
Class
"#!e-Characterase!
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
74
Class
$asic_st"ea#$u2 st"ea#$u2 !st"ea#$u2
$asic_ios ios !ios
$asic_ist"ea# ist"ea# !ist"ea#
$asic_ost"ea# ost"ea# !ost"ea#
$asic_iost"ea# iost"ea# !iost"ea#
$asic_2st"ea# 2st"ea# !2st"ea#
$asic_i2st"ea# i2st"ea# !i2st"ea#
$asic_o2st"ea# o2st"ea# !o2st"ea#
Lôùp ios chöùa raát nhíeàu bíeán vaø haøm thaønh víeân
ñíeàu khíeán hoaëc theo doõí caùc hoaït ñoäng cô baûn cuûa íuoàng.
1.1##.1. uoNng +ònh nghKa tr'ôùc
Khí moät chöông trình C++ baét ñaàu thöïc thí, coù boán
íuoàng töï ñoäng môû, ñoù íaø:
$tream %ean#ng &e'a(lt &e)#ce
ci* Sta*da"d i*0ut Oe6$oa"d
cout Sta*da"d out0ut Sc"ee*
ce"" Sta*da"d e""o" out0ut Sc"ee*
clog Bu22e"ed ve"sio* o2 ce"" Sc"ee*
Caùc íuoàng ci*, cout, ce"" töông öùng vôùí caùc íuoàng
stdi*, stdout vaø stde"" trong C. Ngaàm ñònh caùc íuoàng chuaán
ñöôïc söû duïng keát noáí vôùí cheá ñoä con,ole. Tuy nhíeân trong
moâí tröôøng hoã trôï vaøo ra gíaùn tíeáp (ví duï nhö DOS, OS/2,
Uníx vaø Wíndows), íuoàng chuaán íaø gíaùn tíeáp vôùí caùc thíeát
bò khaùc hoaëc ;ile.
C++ chuaán cuõng ñònh nghóa theâm boán íuoàng: !i*, !out,
!e"" vaø !log. Naây íaø nhöõng phíeân baûn kí töï roäng cuûa
íuoàng chuaán. Kí töï roäng coù kíeáu íaø !cha"_t vaø thoâng
thöôøng coù ñoä roäng íaø 1+Abit.
7+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
1.1%,. V>UB J> SBW _=OBC@ ]>d@A
Heä thoáng vaøo/ra cuûa C++ cho pheùp ta ñònh daïng caùc
thao taùc vaøo, ra. Ví duï ta coù theá ñaët ñoä roäng cuûa tröôøng,
chæ ra cô soá hoaëc xaùc ñònh coù bao nhíeâu soá sau daáu thaäp
phaân. Coù haí caùch khaùc nhau ñeá ñònh daïng döõ ííeäu. Naàu
tíeân coù theá truy caäp tröïc tíeáp vaøo caùc thaønh víeân cuûa
íôùp ios hoaëc íaø thíeát íaäp caùc côø traïng thaùí hoaëc söû duïng
caùc haøm thaønh víeân. Thöù haí ta coù theá söû duïng haøm ñaëc
bíeät goïí íaø haøm 1ani=ulator maø coù theá cheøn vaøo trong
bíeáu thöùc vaøo ra.
1.1#2.1. Cònh ;aïng baWng caùch ,'û ;uïng tha$nh
1ieDn cuûa !ôù< io,
Moãí íuoàng ñeàu keát hôïp vôùí taäp caùc côø ñònh daïng
ñíeàu khíeán ñònh daïng híeán thò thoâng tín. Lôùp ios khaí baùo
maët naï bít goïí íaø 2#t2lags vaø caùc gíaù trò töông öùng ñöôïc
ñònh nghóa (caùc gíaù trò naøy ñònh nghóa trong ios_$ase).
adbust2ield $ase2ield $oolal0ha dec
2i7ed 2loat2ield he7 i*te"*al
le2t oct "ight scie*ti2ic
sho!$ase sho!0oi*t sho!0os s5i0!s
u*it$u2 u00e"case
Caùc gíaù trò naøy duøng ñeá thíeát íaäp hoaëc xoùa caùc
ñònh daïng côø. Neáu ta ñang söû duïng moät trình bíeân dòch cuõ
hôn, coù theá noù khoâng ñònh nghóa kíeáu naøy. Trong tröôøng
hôïp naøy noù ñöôïc maõ hoùa trong moät soá nguyeân daøí.
Khí côø s5i0!s ñöôïc thíeát íaäp, caùc kí töï troáng ôû ñaàu
(s0aces, ta$s, *e!li*e) seõ boû qua khí nhaäp vaøo moät íuoàng.
Khí côø s5i0!s bò xoùa, caùc khoaûng troáng seõ khoâng boû qua.
Khí côø le2t ñöôïc thíeát íaäp, caùc gíaù trò xuaát ra maøn
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
77
hình seõ ñöôïc canh íeà traùí, "ight ñöôïc thíeát íaäp canh íeà phaûí.
Khí i*te"*al thíeát íaäp, caùc gíaù trò soá seõ ñöôïc ñoän theâm
caùc khoaûng troáng ñeá íaáp ñaày tröôøng. Neáu khoâng coù côø
naøo thíeát íaäp, ñaàu ra seõ ñöôïc canh íeà beân phaûí.
Ngaàm ñònh ñaàu ra daïng soá seõ íaø soá heä BU. Tuy nhíeân,
ta coù theá thay ñoáí cô soá. Thíeát íaäp côø oct, híeän soá ôû heä
R, thíeát íaäp côø he7 híeän soá ôû heä BW. Neá trôû íaïí cô soá BU ta
thíeát íaäp côø dec.
Thíeát íaäp côø sho!$ase, híeán thò cô soá ra maøn hình. Ví
duï neáu chuyeán soá daïng heä BW, gíaù trò BF seõ híeän ra maøn
hình íaø U7BF.
Ngaàm ñònh, neáu soá thöïc daáu phaáy ñoäng híeán thò, e
seõ íaø chöõ thöôøng, khí soá heä BW híeán thò, 7 íaø chöõ thöôøng.
Khí thíeát íaäp côø u00e"case, nhöõng kí töï naøy seõ híeán thò íaø
chöõ hoa.
Thíeát íaäp côø sho!0os, híeän daáu tröôùc gíaù trò nguyeân.
Thíeát íaäp sho!0oi*t, daáu thaäp phaân vaø caùc soá khoâng seõ
ñöôïc híeán thò.
Thíeát íaäp côø scie*ti2ic, soá thöïc daáu phaáy ñoäng híeán
thò theo daïng khoa hoïc. Khí thíeát íaäp côø 2i7ed, soá thöïc daáu
phaáy ñoäng seõ híeán thò theo caùch thoâng thöôøng. Khí caû haí
khoâng ñöôïc thíeát íaäp, trình bíeân dòch seõ töï ñoäng choïn moät
caùch híeán thò thích hôïp.
Khí u*it$u2 ñöôïc thíeát íaäp, vuøng ñeäm seõ ñöôïc íaøm
saïch sau moãí thao taùc cheøn. Khí $oolal0ha ñöôïc thíeát íaäp,
kíeáu $oolea*s coù theá ñöôïc nhaäp vaøo hoaëc xuaát ra bôûí haí
töø khoùa t"ue vaø 2alse.
7- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
1.1#2.2. &hieát !aä< cô$ +ònh ;aïng
Neá thíeát íaäp côø ñònh daïng, ta duøng haøm set2?@, ñaây
íaø haøm thaønh víeân cuûa íôùp ios. Daïng toáng quaùt nhö sau:
2#t2lags set2?2#t2lags 2lags@N
Haøm naøy traû veà thíeát íaäp tröôùc ñoù cuûa côø ñònh
daïng vaø baätt thíeát íaäp môùí. Ví duï muoán thíeát íaäp côø
sho!0os, ta coù theá söû duïng caâu íeänh sau:
st"ea#%set2?iosiisho!0os@N
OU ñaây, st"ea# íaø íuoàng maø ta muoán taùc ñoäng. Chuù
yù caùch söû duïng cuûa iosiisho!0os, sho!0os íaø moät haèng
ííeät keâ ñöôïc ñònh nghóa trong íôùp ios do ñoù noù phaûí ñöôïc
chæ bôûí iosii ôû tröôùc.
Chöông trình sau híeán thò gíaù trò BUU, vôùí côø sho!0os,
sho!0oi*t ñöôïc thíeát íaäp:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
cout%set2?iosiisho!0oi*t@N
cout%set2?iosiisho!0os@N
cout KK BUU%UN €€ dis0la6s BUU%U
"etu"* UN
4
Löu yù íaø haøm set2?@ íaø thaønh víeân cuûa íôùp ios, do
ñoù ta khoâng theá söû duïng haøm naøy ñoäc íaäp maø phaûí keát
hôïp vôùí íuoàng maø ta muoán taùc ñoäng.
Ví duï treân ta phaûí duøng haí íaàn haøm set2?@ thíeát íaäp
haí côø ñònh daïng. Coù caùch khaùc ñeá ruùt goïn vaán ñeà naøy
ñoù íaø söû duïng toaùn töû OR. Ví duï ñoaïn chöông trình treân sau
khí ruùt goïn:
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
79
€€ ’ou ca* OR togethe" t!o o" #o"e 2lagsX
cout%set2?iosiisho!0oi*t ˆ iosiisho!0os@N
1.1#2.3. Xoùa cô$ +ònh ;aïng
Haøm ngöôïc cuûa set2?@ íaø u*set2?@. Naây íaø haøm
thaønh víeân cuûa íôùp ios ñöôïc söû duïng ñeá xoùa moät hoaëc
nhíeàu côø. Daïng toáng quaùt nhö sau:
void u*set2?2#t2lags 2lags@N
Côø ñöôïc chæ ra bôûí 2lags seõ bò xoùa (nhöõng côø coøn íaïí
seõ khoâng bò taùc ñoäng). Haøm traû veà caùc thíeát íaäp tröôùc
ñoù. Chöông trình sau mính hoïa caùch söû duïng haøm u*set2?@,
ñaàu tíeân noù thíeát íaäp côø scie*ti2ic vaø côø u00e"case sau
ñoù ín ra gíaù trò BUU%B2. Trong tröôøng hôïp naøy Š ñöôïc söû duïng
trong kí híeäu bíeáu díeãn khoa hoïc cuûa soá thöïc daáu phaáy
ñoäng. Tíeáp theo, chöông trình seõ xoùa côø u00e"case vaø ín íaïí
gíaù trò BUU%B2 ôû daïng khoa hoïc, khí ñoù kí híeäu e seõ híeán thò.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
cout%set2?iosiiu00e"case ˆ iosiiscie*ti2ic@N
cout KK BUU%B2N €€ dis0la6s B%UUB2ŠU2
cout%u*set2?iosiiu00e"case@N €€ clea" u00e"case
cout KK t l*t KK BUU%B2N €€ dis0la6s B%UUB2eU2
"etu"* UN
4
1.1#2.#. Yoät ;aïng taûi boäi cuûa ,et:("
Daïng toáng quaùt cuûa haøm taûí boäí set2?@ íaø:
2#t2lags set2?2#t2lags 2lagsBX 2#t2lags 2lags2@N
Trong phíeân baûn naøy, chæ coù côø 2lags2 íaø coù taùc
ñoäng. Naàu tíeân xoùa vaø sau ñoù thíeát íaäp tuøy theo côø
2lagsB. Chuù yù raèng ngay caû khí 2lagsB chöùa côø khaùc chæ
-6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
côø ñöôïc ñaët taû trong 2lags2 seõ coù taùc ñoäng. Haøm traû veà
thíeát íaäp tröôùc ñoù. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*? @
3
cout%set2?iosiisho!0oi*t ˆ iosiisho!0osX iosiisho!0oi*t@N
cout KK BUU%UN €€ dis0la6s BUU%UX *ot BUU%U
"etu"* UN
4
Ví duï treân sho!0oi*t ñöôïc thíeát íaäp chöù khoâng phaûí
sho!0os. Tuy nhíeân caùch söû duïng chung nhaát cuûa daïng haí
tham soá cuûa haøm set2?@ íaø khí thíeát íaäp cô soá, canh íeà vaø
ñònh daïng côø.
Tham chíeáu ñeán tröôøng oct, dec vaø he7 keát hôïp trong
tröôøng $ase2ield, töông töï le2t, "ight, i*te"*al ñöôïc keát hôïp
trong tröôøng adbust2ield, scie*ti2ic, 2i7ed ñöôïc keát hôïp
trong tröôøng 2loat2ield. Caùc côø ñaët trong nhoùm naøy seõ buø
tröø íaãn nhau, ta caàn phaûí taét moät côø neáu thíeát íaäp côø
khaùc. Ví duï, chöông trình sau thíeát íaäp híeán thò íaø soá heä BW,
vaø taét caùc côø khaùc. Neá íaøm ñíeàu naøy ta söû duïng daïng
haí tham soá.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
cout%set2?iosiihe7X iosii$ase2ield@N
cout KK BUUN €€ this dis0la6s WY
"etu"* UN
4
Chöông trình treân, ñaàu tíeân xoùa côø $ase2ield vaø sau
ñoù thíeát íaäp côø he7. Nhôù raèng chæ coù nhöõng ñaët taû trong
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
-1
2lags2 coù theá ñöôïc taùc ñoäng bôûí côø chæ trong 2lagsB. Ví duï
sau seõ khoâng thöïc híeän ñöôïc.
€€ This 0"og"a# !ill *ot !o"5%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
€€ e""o"X sho!0os *ot set
cout%set2?iosiisho!0osX iosiihe7@N
cout KK BUU KK wl*wN €€ dis0la6s BUUX *ot BUU
€€this is co""ect
cout%set2?iosiisho!0osX iosiisho!0os@N
cout KK BUUN €€ *o! dis0la6s BUU
"etu"* UN
4
1.1#2.2. RghieDn c'ùu cô$ +ònh ;aïng
Nhöõng íuùc ta muoán bíeát thoâng tín híeän taïí cuûa côø
nhöng khoâng caàn thay ñoáí noù, íôùp ios cung caáp cho ta moät
haøm 2lags?@. Haøm naøy traû veà thíeát íaäp híeän haønh cuûa
caùc côø. Daïng toáng quaùt nhö sau:
2#t2lags 2lags?@N
Chöông trình sau söû duïng 2lags?@ ñeá híeán thò thíeát íaäp
cuûa caùc côø ííeân quan ñeán cout.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void sho!2lags?@ N
i*t #ai*?@
3
€€ sho! de2ault co*ditio* o2 2o"#at 2lags
sho!2lags?@N
cout%set2?iosii"ight ˆ iosiisho!0oi*t ˆ iosii2i7ed@N
sho!2lags?@N
"etu"* UN
4
-2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
€€ This 2u*ctio* dis0la6s the status o2 the 2o"#at 2lags%
void sho!2lags?@
3
iosii2#t2lags 2N
lo*g iN
2 c ?lo*g@ cout%2lags?@N €€ get 2lag setti*gs
€€ chec5 each 2lag
2o"?icU7YUUUN iN i c i LL B@
i2?i f 2@ cout KK tB tN
else cout KK tU tN
cout KK t l*tN
4
Keát quaû híeán thò nhö sau:
U U U U U B U U U U U U U U B
U B U U U B U B U U B U U U B
1.1#2.3. &hieát !aä< taát caû caùc cô$
Haøm 2lags?@ coù moät caùch söû duïng thöù haí ñoù íaø cho
pheùp thíeát íaäp taát caû caùc côø keát hôïp vôùí moät íuoàng.
Daïng toáng quaùt nhö sau:
2#t2lags 2lags?2#t2lags 2@N
Khí ta söû duïng phíeân baûn naøy, caùc bit maãu tìm thaáy
trong 2 ñöôïc söû duïng ñeá thíeát íaäp ñònh daïng côø keát hôïp
vôùí íuoàng. Vaø taát caû caùc côø ñònh daïng naøy seõ ñöôïc taùc
ñoäng. Haøm traû veà thíeát íaäp tröôùc ñoù.
Ví duï sau mính hoïa phíeân baûn naøy cuûa haøm 2lags?@.
Naàu tíeân, xaây döïng maët naï côø baäc caùc côø sho!0os,
sho!$ase, oct vaø "ight. Taát caû caùc côø khaùc seõ taét. Sau ñoù
söû duïng haøm 2lags?@ thíeát íaäp côø ñònh daïng keát hôïp vôùí
íuoàng cout.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void sho!2lags?@N
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
-
i*t #ai*?@
3
€€ sho! de2ault co*ditio* o2 2o"#at 2lags
sho!2lags?@N
€€ sho!0osX sho!$aseX octX "ight a"e o*X othe"s o22
lo*g 2 c iosiisho!0os ˆ iosiisho!$ase ˆ iosiioct ˆ
iosii"ightN
cout%2lags?2@N €€ set all 2lags
sho!2lags?@N
"etu"* UN
4
void sho!2lags?@
3
iosii2#t2lags 2N
lo*g iN
2 c ?lo*g@ cout%2lags?@N €€ get 2lag setti*gs
€€ chec5 each 2lag
2o"?icU7YUUUN iN i c i LL B@
i2?i f 2@ cout KK tB tN
else cout KK tU tN
cout KK t l*tN
4
1.1#2.5. Q'û ;uïng Ui;th("= <reci,ion("= :i!!("
Neá ñònh daïng côø, trong íôùp ios boá sung theâm ba haøm
thaønh víeân ñeá thíeát íaäp caùc thoâng soá: ñoä roäng cuûa
tröôøng, ñoä chính xaùc vaø íaáp ñaày caùc kí töï.
Ngaàm ñònh, khí moät gíaù trò ñöôïc xuaát ra, noù xuaát híeän
vôùí ñoä roäng baèng chính soá kí töï bíeáu díeãn noù. Tuy nhíeân ta
coù theá chæ ra ñoä roäng toáí thíeáu baèng caùch söû duïng haøm
!idth?@. Daïng toáng quaùt nhö sau:
st"ea#si8e !idth?st"ea#si8e !@N
OU ñaây, ! trôû thaønh ñoä roäng cuûa tröôøng vaø haøm traû
veà ñoä roäng tröôùc ñoù. Trong moät soá tröôøng hôïp, ñoä roäng
phaûí thíeát íaäp tröôùc moãí íaàn xuaát keát quaû, neáu khoâng
-& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
ñoä roäng ngaàm ñònh seõ ñöôïc söû duïng. Kíeáu st"ea#si8e ñöôïc
ñònh nghóa nhö íaø moät soá nguyeân.
Sau khí ta thíeát íaäp ñoä roäng cöïc tíeáu, khí gíaù trò híeán
thò nhoû hôn ñoä roäng ñaõ chæ ra, keát quaû híeán thò seõ töï
ñoäng ñoän theâm caùc kí töï ñeá íaáp ñaày (ngaàm ñònh íaø kí töï
troáng). Neáu ñoä roäng cuûa döõ ííeäu íôùn hôn ñoä roäng ñaõ
thíeát íaäp, keát quaû seõ traøn qua. Khoâng coù gíaù trò íaøm
troøn.
Khí xuaát moät keát quaû íaø gíaù trò soá thöïc daáu phaáy
ñoäng, ta coù theá xaùc ñònh soá chöõ soá sau daáu thaäp phaân
ñöôïc híeán thò baèng caùch söû duïng haøm 0"ecisio*?@. Daïng
toáng quaùt nhö sau:
st"ea#si8e 0"ecisio*?st"ea#si8e 0@N
OU ñaây, ñoä chính xaùc ñöôïc thíeát íaäp bôûí 0, vaø haøm
traû veà ñoä chính xaùc tröôùc ñoù. Noä chính xaùc ngaàm ñònh íaø
W. trong moät soá tröôøng hôïp, ñoä chính xaùc phaûí ñöôïc thíeát
íaäp tröôùc moãí íaàn xuaát keát quaû. Neáu khoâng, ñoä chính
xaùc ngaàm ñònh seõ ñöôïc söû duïng.
Ngaàm ñònh, khí moät tröôøng caàn íaáp ñaày, noù seõ cheøn
caùc kí töï troáng. Neáu muoán chæ ra moät kí töï ñeá íaáp ñaày, ta
duøng haøm 2ill?@. Daïng toáng quaùt nhö sau:
cha" 2ill?cha" ch@N
Sau khí goïí haøm 2ill?@, ch trôû thaønh kí töï íaáp ñaày,
haøm seõ traû veà kí töï cuõ. Ví duï sau seõ theá híeän caùc haøm
treân.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
-4
cout%0"ecisio*?Y@ N
cout%!idth?BU@N
cout KK BU%B29YV KK tl*tN €€ dis0la6s BU%B2
cout%2ill?wƒw@N
cout%!idth?BU@N
cout KK BU%B29YV KK tl*tN €€ dis0la6s ƒƒƒƒƒBU%B2
€€ 2ield !idth a00lies to st"i*gsX too
cout%!idth?BU@N
cout KK tHi^t KK tl*tN €€ dis0la6s ƒƒƒƒƒƒƒHi^
cout%!idth?BU@N
cout%set2?iosiile2t@N €€ le2t busti26
cout KK BU%B29YVN €€ dis0la6s BU%B2ƒƒƒƒƒ
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
BU%B2
ƒƒƒƒƒBU%B2
ƒƒƒƒƒƒƒHi^
BU%B2ƒƒƒƒƒ
Coù caùc daïng taûí boäí cuûa caùc haøm treân, nhöng chæ
nhaän maø khoâng thay ñoáí caùc thíeát íaäp. Daïng toáng quaùt
nhö sau:
cha" 2ill? @N
st"ea#si8e !idth? @N
st"ea#si8e 0"ecisio*? @N
1.1#2.8. Q'û ;uïng /ani<u!ator +e* +ònh ;aïng
1a$o.ra(+ang ,'ûa"
Caùch thöù haí ñeá thíeát íaäp ñònh daïng cho caùc íuoàng ñoù
íaø söû duïng caùc haøm ñaëc bíeät ñöôïc goïí íaø 1ani=ulator. Noù
coù theá cheøn vaøo trong moät bíeáu thöùc vaøo ra. Taát caû caùc
haøm naøy ñöôïc ííeät keâ trong baûn sau:
Ma*i0ulato" Pu"0ose I*0ut€Out0ut
$oolal0ha Tu"*s o* **lapha 2lag% I*0ut€Out0ut
-+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
dec Tu"*s o* !ec 2lag% I*0ut€Out0ut
e*dl
Out0ut a *e!li*e cha"acte"
a*d 2lush the st"ea#%
Out0ut
e*ds Out0ut a *ull% Out0ut
2i7ed Tu"*s o* '#+e! 2lag% Out0ut
2lush Flush a st"ea#% Out0ut
he7 Tu"*s o* he+ 2lag% I*0ut€Out0ut
i*te"*al Tu"*s o* #nternal 2lag% Out0ut
le2t Tu"*s o* le't 2lag% Out0ut
*o$ooal0ha Tu"*s o22 **lalpha 2lag% I*0ut€Out0ut
*osho!$ase Tu"*s o22 sh*,ase 2lag% Out0ut
*osho!0oi*t Tu"*s o22 sh*,p*#nt 2lag% Out0ut
*osho!0os Tu"*s o22 sh*,p*s 2lag% Out0ut
*os5i0!s Tu"*s o22 s5i0!s 2lag% I*0ut
*ou*it$u2 Tu"*s o22 u*it$u2 2lag% Out0ut
*ou00e"case Tu"*s o22 u00e"case 2lag Out0ut
oct Tu"*s o* oct 2lag% I*0ut€Out0ut
"esetios2lags
?2#t2lags f @
Tu"* o22 the 2lags s0eci2ied
i* f.
I*0ut€Out0ut
"ight Tu"*s o* "ight 2lag% Out0ut
scie*ti2ic Tu"*s o* scie*ti2ic 2lag Out0ut
set$ase?i*t
base@
Set the *u#$e" $ase to base
I*0ut€Out0ut
Set2ill
?i*t ch@
Set the 2ill cha"acte" to ch Out0ut
Setios2lags
?2#t2lags 2@
Tu"* o* the 2lags s0eci2ied
i* f.
I*0ut€out0ut
set0"ecisio*
?i*t p@
Set the *u#$e" o2 digits o2
0"ecisio*%
Out0ut
set!?i*t w@ Set the 2ield !idth to w. Out0ut
sho!$ase Tu"*s o* sho!$ase 2lag% Out0ut
sho!0oi*t Tu"*s o* sho!0oi*t 2lag% Out0ut
sho!0os Tu"*s o* sho!0os 2lag% Out0ut
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
-7
s5i0!s Tu"*s o* s5i0!s 2lag% I*0ut
u*it$u2 Tu"*s o* u*it$u2 2lag% Out0ut
u00e"case Tu"*s o* u00e"case 2lag% Out0ut
!s S5i0 leadi*g !hite s0ace% I*0ut
Bảng 20-1. H•# #a*i0ulato"
Neá truy caäp vaøo nhöõng haøm treân coù tham soá (ví duï
nhö set!?@) ta phaûí cheøn ;ile tíeâu ñeà Kio#a*i0L. Ví duï:
Ji*clude Kiost"ea#L
Ji*clude Kio#a*i0L
usi*g *a#es0ace stdN
i*t #ai*?@
3
cout KK he7 KK BUU KK e*dlN
cout KK set2ill?w|w@ KK set!?BU@ KK 29Y9%UN
"etu"* UN
4
Híeán thò:
WY
||||||29Y9
Neáu söû duïng nhöõng haøm khoâng coù tham soá, ta khoâng
theâm daáu ngoaëc ñôn trong haøm. Nguyeân nhaân íaø do ñòa
chæ cuûa haøm gôûí ñeán toaùn töû KK. Chöông trình treân coù theá
víeát íaïí döôùí daïng haøm thaønh víeân cuûa ios.
Ji*clude Kiost"ea#L
Ji*clude Kio#a*i0L
usi*g *a#es0ace stdN
i*t #ai*?@
3
cout%set2?iosiihe7X iosii$ase2ield@N
cout KK BUU KK tl*tN €€ BUU i* he7
cout%2ill?w|w@N
cout%!idth?BU@N
cout KK 29Y9%UN
-- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
"etu"* UN
4
Níeám thuaän tíeän chính cuûa haøm 1ani=ulator so vôùí
haøm thaønh thaønh víeân cuûa íôùp ios íaø víeát maõ ngaén goïn
hôn.
Ta coù theá söû duïng haøm setios2lags?@ ñeá thíeát íaäp
tröïc tíeáp caùc ñònh daïng cuûa côø ííeân quan ñeán íuoàng. Ví duï
chöông trình sau söû duïng haøm setios2lags?@ ñeá thíeát íaäp côø
sho!0os, sho!$ase.
Ji*clude Kiost"ea#L
Ji*clude Kio#a*i0L
usi*g *a#es0ace stdN
i*t #ai*?@
3
cout KK setios2lags?iosiisho!0os@N
cout KK setios2lags?iosiisho!$ase@N
cout KK B29 KK t t KK he7 KK B29N
"etu"* UN
4
Haøm setios2lags?@ hoaït ñoäng töông töï nhö haøm set2?@
cuûa íôùp ios.
Haøm $oolal0ha?@ cho pheùp vaøo/ra haí gíaù trò t"ue, 2alse
thay vì söû duïng soá.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
$ool $N
$ c t"ueN
cout KK $ KK t t KK $oolal0ha KK $ KK e*dlN
cout KK tŠ*te" a Boolea* valuei tN
ci* LL $oolal0ha LL $N
cout KK tHe"e is !hat 6ou e*te"edi t KK $N
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
-9
"etu"* UN
4
Keát quaû híeán thò nhö sau:
B t"ue
Š*te" a Boolea* valuei 2alse
He"e is !hat 6ou e*te"edi 2alse
1.1%-. T>TZ VBGZ pp P>U qq
Ta coù taûí boäí toaùn töû KK, LL ñeá vaøo ra döõ ííeäu do
ngöôøí duøng taïo ra. Trong C++, toaùn töû xuaát döõ ííeäu coøn
ñöôïc goïí íaø toaùn töû cheøn bôûí vì noù cheøn kí töï vaøo íuoàng.
Töông töï toaùn töû vaøo döõ ííeäu LL coøn ñöôïc goïí íaø toaùn töû
trích choïn bôûí vì noù trích kí töï ra töø íuoàng. Haøm taûí boäí haí
toaùn töû naøy coøn ñöôïc goïí íaø cheøn vaø trích choïn.
1.1#3.1. &'ï taïo ra ha$/ che$n
Taát caû caùc haøm cheøn ñeàu coù daïng nhö sau:
ost"ea# fo0e"ato"KK?ost"ea# fst"ea#X class_t60e o$b@
3
// $od6 o2 i*se"te"
"etu"* st"ea#N
4
Chuù yù, haøm traû veà tham chíeáu ñeán íuoàng coù kíeáu
ost"ea# (ost"ea# íaø íôùp daãn xuaát töø íôùp ios). Tham soá ñaàu
tíeân cuûa haøm tham chíeáu ñeán íuoàng ra. Tham soá thöù haí íaø
ñoáí töôïng (hoaëc tham chíeáu cuûa ñoáí töôïng) caàn cheøn. Caùc
thoâng tín caàn cheøn phaûí thöïc híeän tröôùc khí traû veà gíaù trò
cho haøm. Haøm naøy ñöôïc söû duïng trong caùc bíeáu thöùc vaøo
ra. Ví duï, ta taïo ra moät ñoáí töôïng coù teân íaø 0ho*e$oo5 nhö
sau:
class 0ho*e$oo5 3
0u$lici
96 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
cha" *a#egRUhN
i*t a"eacodeN
i*t 0"e2i7N
i*t *u#N
0ho*e$oo5?cha" ƒ*X i*t aX i*t 0X i*t *#@
3
st"c06?*a#eX *@N
a"eacode c aN
0"e2i7 c 0N
*u# c *#N
4
4N
Lôùp naøy seõ íöu tröõ thoâng tín veà teân ngöôøí vaø soá
ñíeän thoaïí. Sau ñaây íaø moät caùch ñeá taïo ra haøm cheøn cho
ñoáí töôïng cuûa íôùp 0ho*e$oo5.
€€ Cis0la6 *a#e a*d 0ho*e *u#$e"
ost"ea# fo0e"ato"KK?ost"ea# fst"ea#X 0ho*e$oo5 o@
3
st"ea# KK o%*a#e KK t tN
st"ea# KK t?t KK o%a"eacode KK t@ tN
st"ea# KK o%0"e2i7 KK t-t KK o%*u# KK tl*tN
"etu"* st"ea#N €€ #ust "etu"* st"ea#
4
Tíeáp theo íaø moät chöông trình mính hoïa caùch ñònh nghóa,
söû duïng haøm cheøn.
Ji*clude Kiost"ea#L
Ji*clude Kcst"i*gL
usi*g *a#es0ace stdN
class 0ho*e$oo5 3
0u$lici
cha" *a#egRUhN
i*t a"eacodeN
i*t 0"e2i7N
i*t *u#N
0ho*e$oo5?cha" ƒ*X i*t aX i*t 0X i*t *#@
3
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
91
st"c06?*a#eX *@N
a"eacode c aN
0"e2i7 c 0N
*u# c *#N
4
4N
€€ Cis0la6 *a#e a*d 0ho*e *u#$e"%
ost"ea# fo0e"ato"KK?ost"ea# fst"ea#X 0ho*e$oo5 o@
3
st"ea# KK o%*a#e KK t tN
st"ea# KK t?t KK o%a"eacode KK t@ tN
st"ea# KK o%0"e2i7 KK t-t KK o%*u# KK tl*tN
"etu"* st"ea#N €€ #ust "etu"* st"ea#
4
i*t #ai*?@
3
0ho*e$oo5 a?tTedtX BBBX VVVX B29Y@N
0ho*e$oo5 $?tAlicetX 9B2X VVVX VTWR@N
0ho*e$oo5 c?tTo#tX 2B2X VVVX ZZZB@N
cout KK a KK $ KK cN
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
Ted ?BBB@ VVV-B29Y
Alice ?9B2@ VVV-VTWR
To# ?2B2@ VVV-ZZZB
Nhôù raèng, khí moät haøm toaùn töû cuûa kíeáu döõ ííeäu
baát kì íaø thaønh víeân cuûa moät íôùp, toaùn haïn beân traùí
(ñöôïc gôûí aán thoâng qua con troû this) íaø ñoáí töôïng sính ra
íôøí goïí haøm. Neáu haøm toaùn töû taûí boäí íaø thaønh víeân cuûa
moät íôùp, thì toaùn haïng beân phaûí íaø thaønh víeân cuûa íôùp
ñoù. Tuy nhíeân, khí taûí boäí toaùn töû cheøn, toaùn haïng beân
traùí íaø moät íuoàng vaø toaùn haïng beân phaûí íaø moät ñoáí
töôïng cuûa íôùp. Do ñoù haøm cheøn khoâng phaûí íaø thaønh
víeân cuûa íôùp. Caùc bíeán *a#e, a"eacode, 0"e2i7 vaø *u# íaø
92 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
=ublic trong chöông trình treân vaø noù coù theá ñöôïc truy caäp
bôûí haøm cheøn.
Thöïc teá, haøm cheøn khoâng phaûí íaø thaønh víeân cuûa
moät íôùp maø noù ñöôïc ñònh nghóa. Bôûí vì haøm cheøn khoâng
phaûí íaø thaønh víeân, íaøm caùch naøo ñeá truy xuaát caùc thaønh
víeân =ri3ate cuûa íôùp ñoù? Nhö ñaõ ñeà caäp, ta seõ taïo taát caû
caùc thaønh víeân cuûa íôùp íaø =ublic. Tuy nhíeân, ñíeàu naøy xung
ñoät vôùí nguyeân íí bao goùí cuûa íaäp trình höôùng ñoáí töôïng.
Coù moät caùch ñeá khaéc phuïc nhöõng vaán ñeà treân ñoù íaø:
söû duïng haøm thaân thíeän. Níeàu naøy traùnh ñöôïc tham soá
ñaàu tíeân cuûa haøm cheøn íaø íuoàng vaø vaãn chaáp nhaän truy
caäp caùc thaønh víeân =ri3ate cuûa íôùp maø noù taûí boäí. Ví duï:
Ji*clude Kiost"ea#L
Ji*clude Kcst"i*gL
usi*g *a#es0ace stdN
class 0ho*e$oo5 3
€€ *o! 0"ivate
cha" *a#egRUhN
i*t a"eacodeN
i*t 0"e2i7N
i*t *u#N
0u$lici
0ho*e$oo5?cha" ƒ*X i*t aX i*t 0X i*t *#@
3
st"c06?*a#eX *@N
a"eacode c aN
0"e2i7 c 0N
*u# c *#N
4
2"ie*d ost"ea# fo0e"ato"KK?ost"ea# fst"ea#X 0ho*e$oo5 o@N
4N
€€ Cis0la6 *a#e a*d 0ho*e *u#$e"%
ost"ea# fo0e"ato"KK?ost"ea# fst"ea#X 0ho*e$oo5 o@
3
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
9
st"ea# KK o%*a#e KK t tN
st"ea# KK t?t KK o%a"eacode KK t@ tN
st"ea# KK o%0"e2i7 KK t-t KK o%*u# KK tl*tN
"etu"* st"ea#N €€ #ust "etu"* st"ea#
4
i*t #ai*?@
3
0ho*e$oo5 a?tTedtX BBBX VVVX B29Y@N
0ho*e$oo5 $?tAlicetX 9B2X VVVX VTWR@N
0ho*e$oo5 c?tTo#tX 2B2X VVVX ZZZB@N
cout KK a KK $ KK cN
"etu"* UN
4
Khí ñònh nghóa thaân haøm cheøn, ta ñònh nghóa toáng quaùt
hôn neáu coù theá. Ví duï haøm cheøn ñònh nghóa treân coù theá
söû duïng vôùí moïí íuoàng bôûí vì thaân cuûa haøm xuaát keát quaû
tröïc tíeáp ra íuoàng. Ví duï tíeáp theo veõ caùc hoäp ra maøn hình:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $o7 3
i*t 7X 6N
0u$lici
$o7?i*t iX i*t b@ 3 7ciN 6cbN 4
2"ie*d ost"ea# fo0e"ato"KK?ost"ea# fst"ea#X $o7 o@N
4N
€€ Out0ut a $o7%
ost"ea# fo0e"ato"KK?ost"ea# fst"ea#X $o7 o@
3
"egiste" i*t iX bN
2o"?icUN iKo%7N i@
st"ea# KK tƒtN
st"ea# KK tl*tN
2o"?bcBN bKo%6-BN b@3
2o"?icUN iKo%7N i@
i2?iccU ˆˆ icco%7-B@ st"ea# KK tƒtN
else st"ea# KK t tN
st"ea# KK tl*tN
9& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4
2o"?icUN iKo%7N i@
st"ea# KK tƒtN
st"ea# KK tl*tN
"etu"* st"ea#N
4
i*t #ai*?@
3
$o7 a?BYX W@X $?9UX T@X c?YUX V@N
cout KK tHe"e a"e so#e $o7esil*tN
cout KK a KK $ KK cN
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
He"e a"e so#e $o7esi
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
ƒ ƒ
ƒ ƒ
ƒ ƒ
ƒ ƒ
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
ƒ ƒ
ƒ ƒ
ƒ ƒ
ƒ ƒ
ƒ ƒ
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
ƒ ƒ
ƒ ƒ
ƒ ƒ
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
1.1#3.2. &'ï taïo ha$/ Muaát
Haøm trích choïn ngöôïc vôùí haøm cheøn. Daïng toáng quaùt
nhö sau:
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
94
ist"ea# fo0e"ato"qq?ist"ea# fst"ea#X class_t60e fo$b@
3
// $od6 o2 e7t"acto"
"etu"* st"ea#N
4
Haøm trích choïn traû veà moät tham chíeáu tôùí íuoàng coù
kíeáu ist"ea#. Tham soá ñaàu tíeân phaûí íaø tham chíeáu ñeán
íuoàng coù kíeáu ist"ea#. Tham soá thöù haí phaûí íaø tham chíeáu
ñeán ñoáí töôïng cuûa íôùp. Ví duï íôùp 0ho*e$oo5:
Ji*clude Kiost"ea#L
Ji*clude Kcst"i*gL
usi*g *a#es0ace stdN
class 0ho*e$oo5 3
cha" *a#egRUhN
i*t a"eacodeN
i*t 0"e2i7N
i*t *u#N
0u$lici
0ho*e$oo5?@ 3 4N
0ho*e$oo5?cha" ƒ*X i*t aX i*t 0X i*t *#@
3
st"c06?*a#eX *@N
a"eacode c aN
0"e2i7 c 0N
*u# c *#N
4
2"ie*d ost"ea# fo0e"ato"KK?ost"ea# fst"ea#X 0ho*e$oo5 o@N
2"ie*d ist"ea# fo0e"ato"LL?ist"ea# fst"ea#X 0ho*e$oo5 fo@N
4N
€€ Cis0la6 *a#e a*d 0ho*e *u#$e"%
ost"ea# fo0e"ato"KK?ost"ea# fst"ea#X 0ho*e$oo5 o@
3
st"ea# KK o%*a#e KK t tN
st"ea# KK t?t KK o%a"eacode KK t@ tN
st"ea# KK o%0"e2i7 KK t-t KK o%*u# KK tl*tN
"etu"* st"ea#N €€ #ust "etu"* st"ea#
9+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4
€€ I*0ut *a#e a*d tele0ho*e *u#$e"%
ist"ea# fo0e"ato"LL?ist"ea# fst"ea#X 0ho*e$oo5 fo@
3
cout KK tŠ*te" *a#ei tN
st"ea# LL o%*a#eN
cout KK tŠ*te" a"ea codei tN
st"ea# LL o%a"eacodeN
cout KK tŠ*te" 0"e2i7i tN
st"ea# LL o%0"e2i7N
cout KK tŠ*te" *u#$e"i tN
st"ea# LL o%*u#N
cout KK tl*tN
"etu"* st"ea#N
4
i*t #ai*?@
3
0ho*e$oo5 aN
ci* LL aN
cout KK aN
"etu"* UN
4
1.1%+. T>dB XBGI =>UX X>@ZHOF>IBJ
Ta coù theá tuøy bíeán treân heä thoáng vaøo ra trong C++
baèng caùch taïo ríeâng caùc haøm 1ani=ulator. Coù haí íí do ñeá
taïo ra haøm naøy: thöù nhaát ta coù theá hôïp nhaát daõy caùc
thao taùc vaøo ra trong moät haøm. Thöù haí thöïc híeän caùc thao
taùc vaøo ra treân caùc thíeát bò khoâng chuaán, ví duï gôûí moät
maõ ñíeàu khíeán ñeán maùy ín.
Daïng toáng quaùt cuûa haøm 1ani=ulator treân íuoàng ra
nhö sau:
ost"ea# f#a*i0-*a#e?ost"ea# fst"ea#@
3
// 6ou" code he"e
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
97
"etu"* st"ea#N
4
Trong ñoù, #a*i0-*a#e íaø teân cuûa haøm 1ani=ulator, haøm
traû veà tham chíeáu ñeán íuoàng ost"ea#. Ví duï:
Ji*clude Kiost"ea#L
Ji*clude Kio#a*i0L
usi*g *a#es0ace stdN
€€ A si#0le out0ut #a*i0ulato"%
ost"ea# fsethe7?ost"ea# fst"ea#@
3
st"ea#%set2?iosiisho!$ase@N
st"ea#%set2?iosiihe7X iosii$ase2ield@N
"etu"* st"ea#N
4
i*t #ai*?@
3
cout KK 2VW KK t t KK sethe7 KK 2VWN
"etu"* UN
4
Chöông trình treân seõ híeán thò 2VW U7BUU. Nhö ta thaáy,
haøm sethe7 ñöôïc söû duïng nhö íaø tham soá trong bíeáu thöùc
vaøo ra gíoáng nhö nhöõng haøm 1ani=ulator beân trong. Ví duï
tíeáp theo seõ taïo ra haí haøm 1ani=ulator híeán thò muõí teân
beân traùí, beân phaûí.
Ji*clude Kiost"ea#L
Ji*clude Kio#a*i0L
usi*g *a#es0ace stdN
€€ Right A""o!
ost"ea# f"a?ost"ea# fst"ea#@
3
st"ea# KK t-------L tN
"etu"* st"ea#N
4
€€ Le2t A""o!
ost"ea# fla?ost"ea# fst"ea#@
9- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
3
st"ea# KK t K-------tN
"etu"* st"ea#N
4
i*t #ai*?@
3
cout KK tHigh $ala*ce t KK "a KK B299%29 KK tl*tN
cout KK tOve" d"a2t t KK "a KK VWT%WW KK laN
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
High $ala*ce -------L B299%29
Ove" d"a2t -------L VWT%WW K-------
Daïng toáng quaùt cuûa haøm 1ani=ulator treân íuoàng vaøo
nhö sau:
ist"ea# f#a*i0-*a#e?ist"ea# fst"ea#@
3
// 6ou" code he"e
"etu"* st"ea#N
}
Ví duï chöông trình sau seõ taïo haøm get0ass?@, haøm phaùt
ra tíeáng chuoâng vaø nhaéc ngöôøí duøng nhaäp vaøo maät khaáu:
Ji*clude Kiost"ea#L
Ji*clude Kcst"i*gL
usi*g *a#es0ace stdN
€€ A si#0le i*0ut #a*i0ulato"%
ist"ea# fget0ass?ist"ea# fst"ea#@
3
cout KK wlawN €€ sou*d $ell
cout KK tŠ*te" 0ass!o"di tN
"etu"* st"ea#N
4
i*t #ai*?@
3
cha" 0!gRUhN
Gh*ông 26. Ke" thoáng 3a'o0ra trong GOO
99
do 3
ci* LL get0ass LL 0!N
4 !hile ?st"c#0?0!X t0ass!o"dt@@N
cout KK tLogo* co#0letel*tN
"etu"* UN
4
Löu yù: caùc haøm 1ani=ulator töï taïo phaûí traû veà íuoàng,
neáu khoâng chöông trình seõ khoâng ñöôïc söû duïng trong bíeáu
thöùc vaøo ra.
Gh*ông 21. Ke" thoáng 3a'o0ra treFn ;ile
&61
C=DL@A 21. HQG I=BR@A P>UB J> IJQC@
`ZFQ
1.1%4. p`\IJQ>Xq P>U S>WS FLWH IJQC@ `ZFQ
Neá thöïc híeän thao taùc vaøo ra treân ;ile, ta phaûí cheøn ;ile
tíeâu ñeà K2st"ea#L trong chöông trình. Noù ñònh nghóa moät vaøí
íôùp bao goàm i2st"ea#, o2st"ea# 2st"ea#. Nhöõng íôùp naøy
ñöôïc daãn xuaát töø íôùp ist"ea#, ost"ea#, st"ea# töông öùng
(ist"ea#, ost"ea#, st"ea# daãn xuaát töø íôùp ios), vì vaäy caùc
íôùp i2st"ea#, o2st"ea#, 2st"ea# coù theá truy caäp caùc thaønh
víeân trong ios. Lôùp khaùc söû duïng cho heä thoáng ;ile íaø
2ile$u2, cung caáp caùc chöùc naêng ôû möùc thaáp ñeá quaûn íí
íuoàng ;ile. Thoâng thöôøng noù khoâng ñöôïc söû duïng tröïc tíeáp
maø thoâng qua íôùp khaùc.
1.1%#. $LT P>U YBW@A XBGI `ZFQ
Trong C++, ta coù theá môû moät ;ile baèng caùch ííeân keát
vôùí íuoàng. Tröôùc khí môû moät ;ile ta phaûí nhaän moät íuoàng.
Coù ba kíeáu íuoàng, vaøo, ra, vaøo/ra. Neá taïo moät íuoàng ra, ta
phaûí khaí baùo íôùp o2st"ea#. Neá taïo íuoàng vaøo ta khaí baùo
íôùp i2st"ea#. Caùc íuoàng thöïc híeän caû haí thao taùc vaøo/ra
phaûí ñöôïc khaí baùo íôùp 2st"ea#. Ví duï, ñoaïn íeänh sau seõ taïo
ra ba íuoàng vaøo, ra, vaøo/ra:
i2st"ea# i*N €€ i*0ut
o2st"ea# outN €€ out0ut
2st"ea# ioN €€ i*0ut a*d out0ut
Khí ñaõ taïo ra íuoàng, ta coù theá keát hôïp vôùí moät ;ile
baèng caùch söû duïng haøm o0e*?@. Haøm naøy íaø thaønh víeân
cuûa caû ba íôùp ñaõ ñeà caäp. Daïng toáng quaùt cuûa moãí haøm
&62 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
nhö sau:
void i2st"ea#iio0e*?co*st cha" ƒ2ile*a#eX iosiio0e*#ode
#ode c iosiii*@N
void o2st"ea#iio0e*?co*st cha" ƒ2ile*a#eX iosiio0e*#ode
#ode c iosiiout ˆ iosiit"u*c@N
void 2st"ea#iio0e*?co*st cha" ƒ2ile*a#eX iosiio0e*#ode
#ode c iosiii* i iosiiout@N
Trong ñoù 2ile*a#e íaø teân cuûa ;ile, noù coù theá coù
ñöôøng daãn. Gíaù trò cuûa #ode xaùc ñònh kíeáu môû ;ile. Noù
phaûí íaø moät hoaëc hôn trong caùc gíaù trò ñöôïc ñònh nghóa bôûí
o0e*#ode ñöôïc ñònh nghóa trong íôùp ios.
iosiia00
iosiiate
iosii$i*a"6
iosiii*
iosiiout
iosiit"u*c
Ta coù theá keát hôïp haí hoaëc nhíeàu gíaù trò baèng pheùp
h^ logic.
iosiia00: taát caû caùc ;ile ra coù theá boá sung vaøo cuoáí
;ile. Gíaù trò naøy chæ söû duïng vôùí kíeáu ;ile ra. iosiiate ñöa
con troû ñeán cuoáí ;ile khí môû. Maëc daàu khí môû con troû ôû
cuoáí ;ile nhöng ta vaãn coù theá íaøm víeäc ôû moïí nôí treân ;ile.
iosiii*: môû ;ile ñeá ñoïc. iosiiout môû ;ile ñeá ghí.
iosii$i*: môû ;ile ôû cheá ñoä nhò phaân. Ngaàm ñònh taát
caû caùc ;ile môû ôû cheá ñoä vaên baûn. Trong cheá ñoä vaên
baûn, nhíeàu kí töï seõ ñöôïc chuyeán sang khoaûng troáng, kí töï
xuoáng doøng, kí töï veà ñaàu doøng seõ chuyeán sang moät doøng
môùí. Tuy nhíeân, khí moät ;ile ñöôïc môû ôû cheá ñoä nhò phaân,
khoâng coù kí töï naøo ñöôïc chuyeán ñoáí. Löu yù, taát caùc ;ile
hoaëc chöùa vaên baûn coù ñònh daïng hoaëc vaên baûn thoâ ñeàu
Gh*ông 21. Ke" thoáng 3a'o0ra treFn ;ile
&6
coù theá môû ôû daïng nhò phaân. Chæ coù moät ñíeám khaùc íaø
söï chuyeán ñoáí kí töï.
iosiit"u*c: noäí dung ;ile truøng teân tröôùc ñoù seõ bò huûy
boû vaø ;ile môùí seõ coù kích thöôùc íaø U. Khí taïo ra moät íuoàng
ra söû duïng íôùp o2st"ea#, moïí ;ile tröôùc ñoù truøng teân seõ
ñöôïc khôûí taïo vôùí kích thöôùc baèng U.
Noaïn chöông trình sau môû ;ile ñeá ghí vôùí cheá ñoä thoâng
thöôøng.
o2st"ea# outN
out%o0e*?ttesttX iosiiout@N
Tuy nhíeân ta coù theá môû ;ile treân baèng íeänh sau:
out%o0e*?ttestt@N
Bôûí vì iosiiout íaø thoâng soá ngaàm ñònh.
Neáu thao taùc môû saí, haøm traû veà gíaù trò 2alse khí söû
duïng trong bíeáu thöùc logic. Do ñoù, tröôùc khí söû duïng ;ile, ta
phaûí kíeám tra thao taùc môû coù thaønh coâng hay khoâng. Ta
coù theá íaøm víeäc naøy baèng caâu íeänh sau:
i2?^#6st"ea#@ 3
cout KK tCa**ot o0e* 2ile%l*tN
€€ ha*dle e""o"
4
Maëc daàu ta coù theá môû ;ile baèng haøm o0e*?@, tuy
nhíeân ta coù theá môû ;ile baèng caáu töû cuûa caùc íôùp
i2st"ea#, o2st"ea#, 2st"ea#. Haøm caáu töû töông töï nhö haøm
o0e*?@. Thoâng thöôøng ta môû ;ile baèng thao taùc sau:
i2st"ea# #6st"ea#?t#62ilet@N €€ o0e* 2ile 2o" i*0ut
Nhö ñaõ ñeà caäp ôû treân, coù moät soá íí do ;ile khoâng môû
ñöôïc, khí ñoù gíaù trò keát hôïp vôùí íuoàng traû veà 2alse. Do ñoù
khí môû ;ile baèng caùch duøng caáu töû hay söû duïng haøm
&6& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
o0e*?@, ta vaãn phaûí kíeám tra xem thao taùc môû ;ile coù thaønh
coâng hay khoâng baèng caùch kíeám tra gíaù trò cuûa íuoàng.
Moät trong nhöõng caùch kíeám tra íaø ta söû duïng haøm
is_o0e*?@. Haøm naøy íaø thaønh víeân cuûa íôùp ost"ea#,
i2st"ea#, 2st"ea#. Daïng toáng quaùt cuûa haøm naøy nhö sau:
$ool is_o0e*? @N
Haøm traû veà t"ue neáu íuoàng ñaõ ñöôïc ííeân keát ñeán ;ile
vaø 2alse trong tröôøng hôïp coøn íaïí. Ví duï sau kíeám tra íuoàng
coù teân íaø #6st"ea# híeän taïí ñöôïc môû hay chöa:
i2?^#6st"ea#%is_o0e*?@@ 3
cout KK tFile is *ot o0e*%l*tN
€€ %%%
4
Neá ñoùng moät ;ile, ta duøng haøm thaønh víeân close?@. Ví
duï ñeá ñoùng moät ;ile ííeân keát vôùí íuoàng goïí íaø #6st"ea# ta
söû duïng caâu íeänh sau:
#6st"ea#%close?@N
Haøm close?@ khoâng nhaän tham soá vaø khoâng traû veà
gíaù trò.
1.1,/. 6BdS P>U PZQRI IJQC@ `ZFQ P>r@ V>T@
Neá ñoïc vaø víeát moät ;ile vaên baûn, ta söû duïng toaùn töû
KK vaø LL gíoáng nhö ñoïc víeát treân maøn hình vaø baøn phím. Ví
duï sau taïo ra moät ;ile kíeám keâ ngaén chöùa teân vaø gíaù cuûa
noù.
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
Gh*ông 21. Ke" thoáng 3a'o0ra treFn ;ile
&64
o2st"ea# out?tIN&NTR’t@N €€ out0utX *o"#al 2ile
i2?^out@ 3
cout KK tCa**ot o0e* IN&ŠNTOR’ 2ile%l*tN
"etu"* BN
4
out KK tRadios t KK 9Z%ZV KK e*dlN
out KK tToaste"s t KK BZ%ZV KK e*dlN
out KK tMi7e"s t KK 2Y%RU KK e*dlN
out%close?@N
"etu"* UN
4
Chöông trình sau seõ ñoïc ;ile IN&NTR’ ñöôïc taïo ra bôûí
chöông trình tröôùc vaø híeán thò noäí dung cuûa noù íeân maøn
hình.
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
i2st"ea# i*?tIN&NTR’t@N €€ i*0ut
i2?^i*@ 3
cout KK tCa**ot o0e* IN&ŠNTOR’ 2ile%l*tN
"etu"* BN
4
cha" ite#g2UhN
2loat costN
i* LL ite# LL costN
cout KK ite# KK t t KK cost KK tl*tN
i* LL ite# LL costN
cout KK ite# KK t t KK cost KK tl*tN
i* LL ite# LL costN
cout KK ite# KK t t KK cost KK tl*tN
i*%close?@N
"etu"* UN
4
Noïc vaø víeát treân fííe baèng caùch söû duïng toaùn töû LL
&6+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
vaø KK gíoáng nhö söû duïng caùc haøm 2sca*?@ vaø 20"i*t2?@
trong C chuaán. Taát caû caùc thoâng tín íöu tröõ treân ;ile coù
khuoân daïng gíoáng nhö híeán thò treân maøn hình.
Ví duï khaùc cuûa heä thoáng vaøo ra treân ñóa. Chöông trình
seõ ñoïc moät kí töï töø baøn phím vaø víeát vaøo ñóa. Chöông trình
seõ ngöøng ñoïc khí ngöôøí duøng baám moät daáu chaám than (^).
Neá söû duïng chöông trình naøy, ta phaûí chæ ra ;ile ñöôïc ghí
treân doøng íeänh cuûa [hT.
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
usi*g *a#es0ace stdN
i*t #ai*?i*t a"gcX cha" ƒa"gvgh@
3
i2?a"gc^c2@ 3
cout KK tasagei out0ut K2ile*a#eLl*tN
"etu"* BN
4
o2st"ea# out?a"gvgBh@N €€ out0utX *o"#al 2ile
i2?^out@ 3
cout KK tCa**ot o0e* out0ut 2ile%l*tN
"etu"* BN
4
cha" st"gRUhN
cout KK t–"ite st"i*gs to dis5% Š*te" ^ to sto0%l*tN
do 3
cout KK ti tN
ci* LL st"N
out KK st" KK e*dlN
4 !hile ?ƒst" ^c w^w@N
out%close?@N
"etu"* UN
4
Khí ñoïc ;ile vaên baûn baèng caùch söû duïng toaùn töû LL,
íöu yù raèng seõ xuaát híeän söï chuyeán ñoáí kí töï. Ví duï nhö
khoaûng troáng seõ boû qua. Neáu muoán traùnh moïí söï chuyeán
Gh*ông 21. Ke" thoáng 3a'o0ra treFn ;ile
&67
ñoáí kí töï, ta phaûí môû ;ile ôû daïng nhò phaân.
Khí ñoïc, neáu gaëp cuoáí ;ile íuoàng ííeân keát vôùí ;ile seõ
traû gíaù trò íaø 2alse.
1.1,1. V>UB J> IJQC@ `ZFQ _=BC@A Ya@= ]>d@A P>U
@=a H=>C@
Noïc vaø víeát treân ;ile vaên baûn raát deã daøng, tuy nhíeân
ñoù khoâng phaûí íaø caùch híeäu quaû ñeá quaûn íí ;ile. Trong moät
soá tình huoáng ta coù theá íöu döõ ííeäu döôùí daïng nhò phaân
khoâng phaûí vaên baûn. Khí thöïc híeän caùc thao taùc nhò phaân
treân fííe, ta phaûí söû duïng cheá ñoä iosii$i*a"6.
1.121.1. Kí t'ï ,o 1ôùi b)te
Trong raát nhíeàu naêm, heä thoáng vaøo/ra cuûa C vaø C++
thöïc híeän theo höôùng töøng b?te moät. Níeàu naøy íaø do kí töï
töông ñöông vôùí moät b?te vaø chæ coù duy nhaát moät kíeáu
íuoàng caùc kí töï. Tuy nhíeân vôùí söï xuaát híeän cuûa kí töï roäng
(coù kíeáu !cha"_t) vaø söï xuaát híeän cuûa íuoàng ta khoâng theá
noùí vaøo/ra trong C++ theo höôùng töøng b?te nöõa, thay vaøo
ñoù, ta noùí íaø höôùng kí töï. Taát nhíeân íuoàng caùc kí töï vaãn
íaø íuoàng caùc b?te khí ta íaøm víeäc treân döõ ííeäu khoâng phaûí
vaên baûn. Nhöng söï töông ñöông cuûa b?te vaø kí töï khoâng coøn
phuø hôïp nöõa.
Nhö ñaõ ñeà caäp trong chöông 20, taát caû caùc íuoàng trong
taøí ííeäu naøy íaø íuoàng kí töï bôûí vì caùch söû duïng cuûa íuoàng
naøy íaø chung nhaát. Noù cuõng taïo ra caùch quaûn íí ;ile khoâng
ñònh daïng deã daøng hôn bôûí vì moät íuoàng kí töø taïo moät aùnh
xaï 1-1 gíöõa b?te vaø kí töï, ñaây cuõng íaø ñíeám thuaän íôïí khí
ñoïc hoaëc víeát treân döõ ííeäu nhò phaân.
&6- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
1.121.2. <ut(" 1a$ get("
Neá ñoïc vaø víeát döõ ííeäu khoâng ñònh daïng ta söû duïng
haí haøm thaønh víeân get?@ vaø 0ut?@ nhöõng haøm naøy hoaït
ñoäng treân kí töï. Haøm get?@seõ ñoïc moät kí töï vaø haøm 0ut?@
seõ víeát moät kí töï. Taát nhíeân neáu ta ñaõ môû moät ;ile nhò
phaân vaø caùc thao taùc treân kí töï thì caùc haøm naøy ñoïc/víeát
caùc b?te döõ ííeäu.
Haøm get?@ coù nhíeàu daïng, nhöng phíeân baûn chung
nhaát thöôøng ñí vôùí haøm 0ut?@:
ist"ea# fget?cha" fch@N
ost"ea# f0ut?cha" ch@N
Haøm get?@ ñoïc moät kí töï ñôn töø íuoàng vaø ñaët noù vaøo
bíeán ch. Noù traû veà tham chíeáu ñeán íuoàng. Haøm 0ut?@ víeát
kí töï ch vaøo íuoàng vaø traû veà tham chíeáu ñeán íuoàng.
Chöông trình sau seõ híeán thò noäí dung cuûa ;ile baát kì
(vaên baûn hoaëc nhò phaân) íeân maøn hình. Chöông trình söû
duïng haøm get?@.
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
usi*g *a#es0ace stdN
i*t #ai*?i*t a"gcX cha" ƒa"gvgh@
3
cha" chN
i2?a"gc^c2@ 3
cout KK tasagei PR K2ile*a#eLl*tN
"etu"* BN
4
i2st"ea# i*?a"gvgBhX iosiii* ˆ iosii$i*a"6@N
i2?^i*@ 3
cout KK tCa**ot o0e* 2ile%tN
"etu"* BN
4
Gh*ông 21. Ke" thoáng 3a'o0ra treFn ;ile
&69
!hile?i*@ 3 €€ i* !ill $e 2alse !he* eo2 is "eached
i*%get?ch@N
i2?i*@ cout KK chN
4
"etu"* UN
4
Nhö ta ñaõ bíeát, khí gaëp cuoáí ;ile, íuoàng seõ cho gíaù trò
íaø 2alse, do ñoù íuoàng i* gaëp cuoáí ;ile seõ cho gíaù trò íaø
2alse. Ta coù theá víeát caâu íeänh ñoïc ;ile treân döôùí daïng
ngaén goïn hôn nhö sau:
!hile?i*%get?ch@@
cout KK chN
Leänh treân hoaït ñoäng bình thöôøng bôûí vì haøm get?@ traû
veà tham chíeáu ñeán íuoàng vaø íuoàng seõ nhaän gíaù trò 2alse
khí cuoáí ;ile.
Chöông trình tíeáp theo seõ duøng haøm 0ut?@ ñeá víeát caùc
kí töï töø U ñeán 2VV vaøo ;ile coù teân íaø CHARS.
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
i*t iN
o2st"ea# out?tCHARStX iosiiout ˆ iosii$i*a"6@N
i2?^out@ 3
cout KK tCa**ot o0e* out0ut 2ile%l*tN
"etu"* BN
4
€€ !"ite all cha"acte"s to dis5
2o"?icUN iK2VWN i@ out%0ut??cha"@ i@N
out%close?@N
"etu"* UN
4
1.121.3. rea;(" 1a$ Urite("
&16 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Moät caùch khaùc ñeá ñoïc vaø víeát khoáí döõ ííeäu nhò
phaân íaø söû duïng haøm "ead?@ vaø haøm !"ite?@. Daïng toáng
quaùt nhö sau:
ist"ea# f"ead?cha" ƒ$u2X st"ea#si8e *u#@N
ost"ea# f!"ite?co*st cha" ƒ$u2X st"ea#si8e *u#@N
Haøm "ead?@ seõ ñoïc *u# kí töï töø íuoàng vaø ñaët noù vaøo
vuøng ñeäm ñöôïc troû bôûí $u2. Haøm !"ite?@ víeát *u# kí töï ñeán
íuoàng töø vuøng ñeäm ñöôïc troû bôûí $u2. st"ea#si8e íaø kíeáu
ñònh nghóa trong thö víeän cuûa C++ vaø noù coù daïng nhö íaø
moät soá nguyeân. Ví duï sau seõ víeát moät caáu truùc vaøo ñóa
vaø ñoïc íaïí caáu truùc naøy.
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
Ji*clude Kcst"i*gL
usi*g *a#es0ace stdN
st"uct status 3
cha" *a#egRUhN
dou$le $ala*ceN
u*sig*ed lo*g accou*t_*u#N
4N
i*t #ai*?@
3
st"uct status accN
st"c06?acc%*a#eX tRal0h T"a*to"t@N
acc%$ala*ce c BB29%29N
acc%accou*t_*u# c 9Y29VWTRN
€€ !"ite data
o2st"ea# out$al?t$ala*cetX iosiiout ˆ iosii$i*a"6@N
i2?^out$al@ 3
cout KK tCa**ot o0e* 2ile%l*tN
"etu"* BN
4
out$al%!"ite??cha" ƒ@ faccX si8eo2?st"uct status@@N
out$al%close?@N
€€ *o!X "ead $ac5N
Gh*ông 21. Ke" thoáng 3a'o0ra treFn ;ile
&11
i2st"ea# i*$al?t$ala*cetX iosiii* ˆ iosii$i*a"6@N
i2?^i*$al@ 3
cout KK tCa**ot o0e* 2ile%l*tN
"etu"* BN
4
i*$al%"ead??cha" ƒ@ faccX si8eo2?st"uct status@@N
cout KK acc%*a#e KK e*dlN
cout KK tAccou*t J t KK acc%accou*t_*u#N
cout%0"ecisio*?2@N
cout%set2?iosii2i7ed@N
cout KK e*dl KK tBala*cei —t KK acc%$ala*ceN
i*$al%close?@N
"etu"* UN
4
Ta thaáy chæ caàn duøng moät íeänh "ead hoaëc !"ite coù
theá ñoïc hoaëc ghí toaøn boä thoâng tín cuûa moät caáu truùc.
Caùc tröôøng khoâng caàn ñoïc víeát ríeâng bíeät. Vuøng ñeäm coù
theá íaø kíeáu baát kì.
Neáu gaëp cuoáí ;ile tröôùc khí *u# kí töï ñöôïc ñoïc, haøm
"ead?@ seõ ngöøng ñoïc vaø vuøng ñeäm seõ chöùa nhöõng kí töï
ñaõ ñoïc ñöôïc. Ta coù theá kíeám tra coù bao nhíeâu kí töï ñaõ ñöôïc
ñoïc baèng caùch söû duïng haøm thaønh víeân gcou*t?@:
st"ea#si8e gcou*t?@N
Haøm naøy traû veà soá kí töï ñaõ ñoïc bôûí thao taùc ñoïc nhò
phaân cuoáí cuøng. Chöông trình sau mính hoïa caùch söû duïng
cuûa haøm "ead?@,!"ite?@, gcou*t?@:
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
dou$le 2*u#gYh c 3ZZ%TVX -9Y%YX BTTW%UX 2UU%B4N
i*t iN
o2st"ea# out?t*u#$e"stX iosiiout ˆ iosii$i*a"6@N
&12 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
i2?^out@ 3
cout KK tCa**ot o0e* 2ile%tN
"etu"* BN
4
out%!"ite??cha" ƒ@ f2*u#X si8eo2 2*u#@N
out%close?@N
2o"?icUN iKYN i@ €€ clea" a""a6
2*u#gih c U%UN
i2st"ea# i*?t*u#$e"stX iosiii* ˆ iosii$i*a"6@N
i*%"ead??cha" ƒ@ f2*u#X si8eo2 2*u#@N
€€ see ho! #a*6 $6tes have $ee* "ead
cout KK i*%gcou*t?@ KK t $6tes "eadl*tN
2o"?icUN iKYN i@ €€ sho! values "ead 2"o# 2ile
cout KK 2*u#gih KK t tN
i*%close?@N
"etu"* UN
4
Chöông trình treân víeát moät maûng caùc soá thöïc vaøo ñóa
vaø sau ñoù ñoïc noù trôû íaïí. Sau khí goïí haøm "ead?@, gcou*t?@
ñöôïc söû duïng ñeá xaùc ñònh coù bao nhíeâu b?te vöøa môùí ñöôïc
ñoïc.
1.121.#. (aùc ha$/ get("
Haøm get?@ ñaõ ñöôïc taûí boäí theo nhíeàu daïng khaùc nhau.
Ba daïng thöôøng ñöôïc söû duïng nhaát íaø:
ist"ea# fget?cha" ƒ$u2X st"ea#si8e *u#@N
ist"ea# fget?cha" ƒ$u2X st"ea#si8e *u#X cha" deli#@N
i*t get?@N
Daïng ñaàu tíeân ñoïc caùc kí töï vaøo maûng ñöôïc troû bôûí
$u2 cho ñeán khí hoaëc *u#-B kí töï ñöôïc ñoïc, hoaëc moät doøng
môùí xuaát híeän, hoaëc cuoáí ;ile. Maûng ñöôïc troû bôûí $u2 seõ
íaø chuoãí keát thuùc roãng. Neáu kí töï doøng môùí xuaát híeän
trong íuoàng, noù vaãn khoâng ñöôïc trích ra. Thay vì noù vaãn duy
trì trong íuoàng cho ñeán khí gaëp moät thao taùc ñoïc töø íuoàng.
Gh*ông 21. Ke" thoáng 3a'o0ra treFn ;ile
&1
Daïng thöù haí ñoïc caùc kí töï vaøo trong maûng ñöôïc troû
bôûí $u2 cho ñeán khí hoaëc íaø *u#-B kí töï ñaõ ñöôïc ñoïc, hoaëc
xuaát híeän kí töï deli#, hoaëc cuoáí ;ile. Maûng ñöôïc troû bôûí $u2
seõ íaø chuoãí keát thuùc roãng. Neáu gaëp kí töï ñaùnh daáu
(<eli1iter) trong íuoàng, noù khoâng ñöôïc trích ra, noù vaãn duy trì
trong íuoàng cho ñeán khí gaëp moät thao taùc ñoïc tíeáp theo.
Daïng thöù ba traû veà kí töï tíeáp theo töø íuoàng. Noù traû
veà ŠOF neáu gaëp cuoáí ;ile. Daïng haøm get?@ naøy töông töï nhö
haøm getc?@ trong C.
1.121.2. get!ine("
Moät haøm khaùc thöïc híeän víeäc ñoïc ñoù íaø haøm
getli*e?@. Haøm naøy íaø thaønh víeân cuûa caùc íôùp o2t"ea#,
i2st"ea#, 2st"ea#. Daïng toáng quaùt nhö sau:
ist"ea# fgetli*e?cha" ƒ$u2X st"ea#si8e *u#@N
ist"ea# fgetli*e?cha" ƒ$u2X st"ea#si8e *u#X cha" deli#@N
Daïng ñaàu tíeân ñoïc caùc kí töï vaøo maûng ñöôïc troû bôûí
$u2 cho ñeán khí ñoïc ñöôïc *u#-B kí töï, hoaëc gaëp moät kí töï
doøng môùí, hoaëc gaëp cuoáí ;ile. Maûng ñöôïc troû bôûí $u2 íaø
chuoãí keát thuùc roãng. Neáu xuaát híeän kí töï doøng môùí, noù
seõ ñöôïc trích ra nhöng khoâng ñaët vaøo $u2.
Daïng thöù haí ñoïc kí töï vaøo maûng ñöôïc troû bôûí $u2 cho
ñeán khí ñoïc *u#-B kí töï, hoaëc hoaëc gaëp kí töï ñöôïc moâ taû
bôûí deli#, hoaëc gaëp cuoáí ;ile. Maûng ñöôïc troû bôûí $u2 íaø
chuoãí keát thuùc roãng. Neáu gaëp kí töï ñaùnh daáu (<eli1iter)
trong íuoàng, noù seõ ñöôïc trích ra nhöng khoâng ñaët vaøo trong
$u2.
Ta thaáy haí phíeân baûn haøm naøy gíoáng nhö haí phíeân
baûn cuûa haøm get?@. Caû haí ñeàu ñoïc chuoãí kí töï vaø ñaët
&1& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
vaøo trong maûng ñöôïc troû bôûí $u2 cho ñeán khí *u#-B kí töï
ñöôïc ñoïc, hoaëc gaëp kí töï ñaùnh daáu. Níeám khaùc íaø
getli*e?@ ñoïc vaø xoùa kí töï ñaùnh daáu töø íuoàng coøn get?@
thì khoâng.
Ví duï sau mính hoïa haøm getli*e?@. Noù ñoïc noäí dung
cuûa ;ile vaên baûn treân moät doøng trong moãí íaàn ñoïc vaø
híeán thò noù íeân maøn hình.
€€ Read a*d dis0la6 a te7t 2ile li*e $6 li*e%
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
usi*g *a#es0ace stdN
i*t #ai*?i*t a"gcX cha" ƒa"gvgh@
3
i2?a"gc^c2@ 3
cout KK tasagei Cis0la6 K2ile*a#eLl*tN
"etu"* BN
4
i2st"ea# i*?a"gvgBh@N €€ i*0ut
i2?^i*@ 3
cout KK tCa**ot o0e* i*0ut 2ile%l*tN
"etu"* BN
4
cha" st"g2VVhN
!hile?i*@ 3
i*%getli*e?st"X 2VV@N €€ deli# de2aults to wl*w
i2?i*@ cout KK st" KK e*dlN
4
i*%close?@N
"etu"* UN
4
1.1,2. P=>WI =ZQG@ EO.
Ta coù theá xaùc ñònh khí naøo gaëp cuoáí ;ile baèng caùch
söû duïng haøm thaønh víeân eo2?@, daïng toáng quaùt nhö sau:
Gh*ông 21. Ke" thoáng 3a'o0ra treFn ;ile
&14
$ool eo2?@N
Haøm traû veà t"ue neáu gaëp cuoáí ;ile, traû veà 2alse trong
tröôøng hôïp coøn íaïí.
Chöông trình sau seõ söû duïng haøm eo2?@ ñeá híeán thò noäí
dung cuûa ;ile ôû haí daïng maõ ASCII vaø soá heä BW.
€ƒ Cis0la6 co*te*ts o2 s0eci2ied 2ile
i* $oth ASCII a*d i* he7%
ƒ€
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
Ji*clude Kcct60eL
Ji*clude Kio#a*i0L
usi*g *a#es0ace stdN
i*t #ai*?i*t a"gcX cha" ƒa"gvgh@
3
i2?a"gc^c2@ 3
cout KK tasagei Cis0la6 K2ile*a#eLl*tN
"etu"* BN
4
i2st"ea# i*?a"gvgBhX iosiii* ˆ iosii$i*a"6@N
i2?^i*@ 3
cout KK tCa**ot o0e* i*0ut 2ile%l*tN
"etu"* BN
4
"egiste" i*t iX bN
i*t cou*t c UN
cha" cgBWhN
cout%set2?iosiiu00e"case@N
!hile?^i*%eo2?@@ 3
2o"?icUN iKBW ff ^i*%eo2?@N i@ 3
i*%get?cgih@N
4
i2?iKBW@ i--N €€ get "id o2 eo2
2o"?bcUN bKiN b@
cout KK set!?9@ KK he7 KK ?i*t@ cgbhN
2o"?N bKBWN b@ cout KK t tN
&1+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
cout KK tlttN
2o"?bcUN bKiN b@
i2?is0"i*t?cgbh@@ cout KK cgbhN
else cout KK t%tN
cout KK e*dlN
cou*tN
i2?cou*tccBW@ 3
cou*t c UN
cout KK tP"ess ŠNTŠR to co*ti*uei tN
ci*%get?@N
cout KK e*dlN
4
4
i*%close?@N
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
1.1,3. H>UX ZA@BJQ("
Ta coù theá duøng haøm ig*o"e?@ ñeá ñoïc vaø boû qua moät
caùc kí töï töø íuoàng. Daïng toáng quaùt nhö sau:
ist"ea# fig*o"e?st"ea#si8e *u#cBX i*t_t60e deli#cŠOF@N
Gh*ông 21. Ke" thoáng 3a'o0ra treFn ;ile
&17
Haøm seõ ñoïc vaø boû qua kí töï cho ñeán khí hoaëc *u# kí töï
ñaõ boû qua (ngaàm ñònh íaø 1) hoaëc gaëp kí töï deli# (ngaàm
ñònh íaø ŠOF). Neáu xuaát híeän kí töï ñaùnh daáu, noù khoâng
ñöôïc xoùa khoûí íuoàng. Kíeáu i*t_t60e ñònh nghóa gíoáng soá
nguyeân.
Ví duï sau ñoïc noäí dung ;ile TŠST. Noù boû qua nhöõng kí töï
cho ñeán khí hoaëc gaëp moät khoaûng troáng hoaëc ñaõ ñoïc ñöôïc
BU kí töï. Híeán thò caùc noäí dung coøn íaïí cuûa ;ile.
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
i2st"ea# i*?ttestt@N
i2?^i*@ 3
cout KK tCa**ot o0e* 2ile%l*tN
"etu"* BN
4
€ƒ Ig*o"e u0 to BU cha"acte"s o" u*til 2i"st
s0ace is 2ou*d% ƒ€
i*%ig*o"e?BUX w w@N
cha" cN
!hile?i*@ 3
i*%get?c@N
i2?i*@ cout KK cN
4
i*%close?@N
"etu"* UN
4
1.1,%. HQQ_(" P>U HOIV>S_("
Ta coù theá nhaän moät kí töï trong íuoàng maø khoâng xoùa
noù baèng caùch söû duïng haøm 0ee5?@. Daïng toáng quaùt nhö
sau:
&1- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
i*t_t60e 0ee5?@N
Noù traû veà kí töï tíeáp theo trong íuoàng hoaëc ŠOF neáu
gaëp cuoáí ;ile (i*t_t60e ñöôïc ñònh nghóa gíoáng nhö soá
nguyeân).
Ta coù theá traû íaïí kí töï cuoáí cuøng ñaõ ñoïc ñeán íuoàng
baèng caùch söû duïng 0ut$ac5?@. Daïng toáng quaùt nhö sau:
ist"ea# f0ut$ac5?cha" c@N
c íaø kí töï cuoáí ñaõ ñoïc.
1.1,,. `FO\=("
Khí môû moät íuoàng ñeá ghí, döõ ííeäu khoâng caàn thíeát
phaûí víeát ngay íaäp töùc ra caùc thíeát bò vaät íí ííeân keát vôùí
íuoàng. Thay vaøo ñoù, döõ ííeäu seõ ñöôïc íöu tröõ trong moät
vuøng nhôù trung gían cho ñeán khí vuøng nhôù naøy ñaày. Khí ñoù
döõ ííeäu töø vuøng ñeäm môùí ghí vaøo ñóa. Tuy nhíeân ta coù
theá baét buoäc caùc thoâng tín naøy víeát vaøo ñóa tröôùc khí
íuoàng ñaày baèng caùch söû duïng haøm fíush(). Daïng toáng quaùt
nhö sau:
ost"ea# f2lush?@N
Löu yù: khí ñoùng moät ;ile, chöông trình cuõng chuyeán döõ
ííeäu töø vuøng ñeäm vaøo ñóa.
1.1,-. TJO^ S>GH @A>fO @=ZQC@
Trong heä thoáng vaøo/ra C++, ta coù theá thöïc híeän caùc
thao taùc truy caäp ngaãu nhíeân baèng caùch söû duïng haí haøm
see5g?@ vaø see50?@.
ist"ea# fsee5g?o22_t60e o22setX see5di" o"igi*@N
ost"ea# fsee50?o22_t60e o22setX see5di" o"igi*@N
o22-t60e íaø kíeáu soá nguyeân ñöôïc ñònh nghóa trong ios
coù theá íöu tröõ gíaù trò nguyeân íôùn nhaát. see5di" íaø moät
Gh*ông 21. Ke" thoáng 3a'o0ra treFn ;ile
&19
kíeáu ííeät keâ ñöôïc ñònh nghóa trong ios, noù xaùc ñònh caùch
thöùc truy caäp.
Trong C++ coù haí con troû keát hôïp vôùí ;ile. Moät goïí íaø
con troû get, con troû naøy chæ ra vò trí treân ;ile maø thao taùc
ñoïc tíeáp theo seõ thöïc híeän. Con troû thöù haí íaø con troû 0ut,
noù chæ ra vò trí maø thao taùc ghí tíeáp theo seõ thöïc híeän. Moãí
thao taùc ñoïc ghí caùc con troû seõ töï ñoäng dí chuyeán tuaàn töï.
Tuy nhíeân, söû duïng haøm see5g?@ vaø see50?@ cho pheùp ta truy
caäp döôùí daïng khoâng trình töï.
Haøm see5g?@ dí chuyeán con troû híeän haønh keát hôïp vôùí
;ile o22set kí töï töø vò trí o"igi*. o"igi* seõ nhaän moät trong ba
gíaù trò sau:
iosii$eg Begi**i*g-o2-2ile
iosiicu" Cu""e*t locatio*
iosiie*d Š*d-o2-2ile
Haøm see50?@ dí chuyeán con troû 0ut híeän haønh keát hôïp
vôùí ;ile o22set kí töï töø vò trí o"igi*.
Toáng quaùt, thao taùc truy caäp ngaãu nhíeân chæ thöïc
híeän treân ;ile môû döôùí daïng nhò phaân. Ví duï sau ñeà caäp
ñeán haøm see50?@ cho pheùp ta thay ñoáí kí töï chæ ra trong ;ile.
Chæ ra teân ;ile taïí doøng íeänh, theo sau íaø soá kí töï trong ;ile
maø ta muoán thay ñoáí theo sau bôûí moät kí töï môùí. Chuù yù ;ile
ñöôïc môû döôùí cheá ñoä ñoïc vaø ghí.
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
Ji*clude Kcstdli$L
usi*g *a#es0ace stdN
i*t #ai*?i*t a"gcX cha" ƒa"gvgh@
3
i2?a"gc^cY@ 3
&26 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
cout KK tasagei CHAN…Š K2ile*a#eL Kcha"acte"L
Kcha"Ll*tN
"etu"* BN
4
2st"ea# out?a"gvgBhX iosiii* ˆ iosiiout ˆ iosii$i*a"6@N
i2?^out@ 3
cout KK tCa**ot o0e* 2ile%tN
"etu"* BN
4
out%see50?atoi?a"gvg2h@X iosii$eg@N
out%0ut?ƒa"gvg9h@N
out%close?@N
"etu"* UN
4
Ví duï ta söû duïng chöông trình naøy thay ñoáí kí töï thöù B2
cuûa ;ile TŠST thaønh chöõ “. ta söû duïng íeänh sau:
cha*ge test B2 “
Chöông trình tíeáp theo seõ söû duïng haøm see50?@. Híeán
thò noäí dung cuûa ;ile baét ñaàu vôùí vò trí ñöôïc chæ ra taïí doøng
íeänh.
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
Ji*clude Kcstdli$L
usi*g *a#es0ace stdN
i*t #ai*?i*t a"gcX cha" ƒa"gvgh@
3
cha" chN
i2?a"gc^c9@ 3
cout KK tasagei SHO– K2ile*a#eL Ksta"ti*g
locatio*Ll*tN
"etu"* BN
4
i2st"ea# i*?a"gvgBhX iosiii* ˆ iosii$i*a"6@N
i2?^i*@ 3
cout KK tCa**ot o0e* 2ile%tN
"etu"* BN
Gh*ông 21. Ke" thoáng 3a'o0ra treFn ;ile
&21
4
i*%see5g?atoi?a"gvg2h@X iosii$eg@N
!hile?i*%get?ch@@
cout KK chN
"etu"* UN
4
Chöông trình sau seõ söû duïng caû haí haøm see50?@ vaø
see5g?@ ñeá ñaûo ngöôïc *u# kí töï ñaàu tíeân trong ;ile.
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
Ji*clude Kcstdli$L
usi*g *a#es0ace stdN
i*t #ai*?i*t a"gcX cha" ƒa"gvgh@
3
i2?a"gc^c9@ 3
cout KK tasagei Reve"se K2ile*a#eL K*u#Ll*tN
"etu"* BN
4
2st"ea# i*out?a"gvgBhX iosiii* ˆ iosiiout ˆ iosii$i*a"6@N
i2?^i*out@ 3
cout KK tCa**ot o0e* i*0ut 2ile%l*tN
"etu"* BN
4
lo*g eX iX bN
cha" cBX c2N
e c atol?a"gvg2h@N
2o"?icUX bceN iKbN iX b--@ 3
i*out%see5g?iX iosii$eg@N
i*out%get?cB@N
i*out%see5g?bX iosii$eg@N
i*out%get?c2@N
i*out%see50?iX iosii$eg@N
i*out%0ut?c2@N
i*out%see50?bX iosii$eg@N
i*out%0ut?cB@N
4
i*out%close?@N
&22 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
"etu"* UN
4
Neá söû duïng chöông trình treân, ta chæ ra teân ;ile muoán
ñaûo ngöôïc, theo sau íaø soá kí töï ñöôïc ñaûo ngöôïc. Ví duï muoán
ñaûo ngöôïc BU kí töï ñaàu tíeân cuûa ;ile TŠST, ta söû duïng doøng
íeänh sau:
"eve"se test BU
Neáu ;ile chöùa döõ ííeäu nhö sau:
This is a test%
Sau khí ñaûo ngöôïc BU kí töï ñaàu ta coù:
a si sihTtest%
1.123.1. Rhaän 1ò trí hieän ha$nh cuûa :i!e
Ta coù theá xaùc ñònh vò trí híeän taïí cuûa ;ile baèng caùch
söû duïng haøm sau:
0os_t60e tellg?@N
0os_t60e tell0?@N
0os_t60e íaø kíeáu ñònh nghóa trong trong ios coù khaû
naêng íöu tröõ gíaù trò soá nguyeân íôùn nhaát. Ta coù theá söû
duïng gíaù trò traû veà cuûa haøm tell0?@ vaø tellg?@ nhö íaø
moät tham soá cuûa caùc haøm see50?@ vaø see5g?@ töông öùng
ôû daïng sau:
ist"ea# fsee5g?0os_t60e 0os@N
ost"ea# fsee50?0os_t60e 0os@N
Nhöõng haøm naøy cho pheùp íöu tröõ vò trí híeän thôøí cuûa
con troû ;ile. Ví duï nhö thöïc híeän moät thao treân ;ile sau ñoù
chuyeán con troû ;ile veà ñuùng vò trí tröôùc ñoù.
1.1,+. C>WS IJ>d@A I=>WZ P>UB J>
Heä thoáng vaøo ra trong C++, duy trì thoâng tín traïng thaùí
veà keát quaû cuûa moãí thao taùc vaøo ra. Traïng thaùí híeän thôøí
Gh*ông 21. Ke" thoáng 3a'o0ra treFn ;ile
&2
cuûa thao taùc vaøo ra ñöôïc gíöõ trong moät ñoáí töôïng iostate
íaø moät kíeáu ííeät keâ ñöôïc ñònh nghóa trong ios bao goàm caùc
thaønh víeân sau:
Na#e Mea*i*g
iosiigood$it No e""o" $its set
iosiieo2$it B !he* e*d-o2-2ile is e*cou*te"edN
U othe"!ise
iosii2ail$it B !he* a ?0ossi$l6@ *o*2atal I€O e""o"
has occu""edN
U othe"!ise
iosii$ad$it B !he* a 2atal I€O e""o" has occu""edN
U othe"!ise
Coù haí caùch ta coù theá nhaän thoâng tín traïng thaùí
vaøo/ra. Naàu tíeân söû duïng haøm "dstate?@. Noù coù khuoân
daïng nhö sau:
iostate "dstate?@N
Haøm traû veà traïng thaùí híeän thôøí cuûa côø íoãí, neáu
khoâng coù íoãí haøm traû veà good$it. Chöông trình sau mính hoïa
haøm "dstate?@. Noù híeán thò noäí dung cuûa moät ;ile vaên
baûn. Neáu gaëp íoãí, chöông trình seõ thoâng baùo baèng caùch
söû duøng haøm chec5status?@.
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
usi*g *a#es0ace stdN
void chec5status?i2st"ea# fi*@N
i*t #ai*?i*t a"gcX cha" ƒa"gvgh@
3
i2?a"gc^c2@ 3
cout KK tasagei Cis0la6 K2ile*a#eLl*tN
"etu"* BN
4
i2st"ea# i*?a"gvgBh@N
i2?^i*@ 3
cout KK tCa**ot o0e* i*0ut 2ile%l*tN
&2& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
"etu"* BN
4
cha" cN
!hile?i*%get?c@@ 3
i2?i*@ cout KK cN
chec5status?i*@N
4
chec5status?i*@N €€ chec5 2i*al status
i*%close?@N
"etu"* UN
4
void chec5status?i2st"ea# fi*@
3
iosiiiostate iN
i c i*%"dstate?@N
i2?i f iosiieo2$it@
cout KK tŠOF e*cou*te"edl*tN
else i2?i f iosii2ail$it@
cout KK tNo*-Fatal I€O e""o"l*tN
else i2?i f iosii$ad$it@
cout KK tFatal I€O e""o"l*tN
4
Chöông trình sau íuoân híeán thò moät thoâng baùo, ñoù íaø
thoâng baùo keát thuùc ;ile. Moät caùch khaùc ñeá xaùc ñònh íoãí
ñoù íaø duøng caùc haøm sau:
$ool $ad?@N
$ool eo2?@N
$ool 2ail?@N
$ool good?@N
Haøm $ad?@ traû veà t"ue neáu $ad$it ñöôïc thíeát íaäp,
haøm 2ail?@ traû veà t"ue neáu 2ail$it ñöôïc thíeát íaäp, haøm
eo2?@ traû veà t"ue neáu eo2$it ñöôïc thíeát íaäp, haøm good?@
traû veà t"ue neáu khoâng coù íoãí. Ngoaøí ra, taát caû traû veà
2alse.
Neáu moät íoãí xuaát híeän, noù caàn phaûí xoùa tröôùc khí
Gh*ông 21. Ke" thoáng 3a'o0ra treFn ;ile
&24
chöông trình tíeáp tuïc. Neá íaøm víeäc naøy ta söû duïng haøm
clea"?@ nhö sau:
void clea"?iostate 2lagsciosiigood$it@N
Neáu 2lags íaø good$it (íaø tham soá ngaàm ñònh), taát caû
caùc côø íoãí seõ ñöôïc xoùa, ngoaøí ra ta thíeát íaäp 2lags nhö
mong muoán.
1.1,4. TOU^ VZQR@ P>UB J> P>U `ZFQ
Trong chöông 20 ta ñaõ ñeà caäp ñeán caùch taûí boäí haøm
toaùn töû cheøn vaø trích choïn ííeân quan ñeán íôùp cuûa mình.
Trong chöông ñoù ta chæ thöïc híeän vaøo ra treân cheá ñoä
con,ole, nhöng vì taát caû caùc íuoàng trong C++ íaø nhö nhau
neân ta coù theá taûí boäí haøm cheøn, trích choïn ñeá thöïc híeän
vaøo ra treân con,ole vaø treân ;ile maø khoâng caàn thay ñoáí baát
cöù ñíeàu gì. Ví duï sau trôû íaïí vôùí ví duï 0ho*e$oo5 trong chöông
20, vaø caùc danh saùch seõ ñöôïc íöu treân ñóa. Chöông trình coù
caùc chöùc naêng ñôn gíaûn nhö: cho pheùp theâm teân vaøo danh
saùch hoaëc híeán thò danh saùch íeân maøn hình. Noù söû duïng
caùc tuøy bíeán treân haøm cheøn vaø trích choïn ñeá vaøo vaø ra
döõ ííeäu soá ñíeän thoaïí.
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
Ji*clude Kcst"i*gL
usi*g *a#es0ace stdN
class 0ho*e$oo5 3
cha" *a#egRUhN
cha" a"eacodegYhN
cha" 0"e2i7gYhN
cha" *u#gVhN
0u$lici
0ho*e$oo5?@34N
0ho*e$oo5?cha" ƒ*X cha" ƒaX cha" ƒ0X cha" ƒ*#@
&2+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
3
st"c06?*a#eX *@N
st"c06?a"eacodeX a@N
st"c06?0"e2i7X 0@N
st"c06?*u#X *#@N
4
2"ie*d ost"ea# fo0e"ato"KK?ost"ea# fst"ea#X 0ho*e$oo5 o@N
2"ie*d ist"ea# fo0e"ato"LL?ist"ea# fst"ea#X 0ho*e$oo5 fo@N
4N
€€ Cis0la6 *a#e a*d 0ho*e *u#$e"%
ost"ea# fo0e"ato"KK?ost"ea# fst"ea#X 0ho*e$oo5 o@
3
st"ea# KK o%*a#e KK t tN
st"ea# KK t?t KK o%a"eacode KK t@ tN
st"ea# KK o%0"e2i7 KK t-tN
st"ea# KK o%*u# KK tl*tN
"etu"* st"ea#N €€ #ust "etu"* st"ea#
4
€€ I*0ut *a#e a*d tele0ho*e *u#$e"%
ist"ea# fo0e"ato"LL?ist"ea# fst"ea#X 0ho*e$oo5 fo@
3
cout KK tŠ*te" *a#ei tN
st"ea# LL o%*a#eN
cout KK tŠ*te" a"ea codei tN
st"ea# LL o%a"eacodeN
cout KK tŠ*te" 0"e2i7i tN
st"ea# LL o%0"e2i7N
cout KK tŠ*te" *u#$e"i tN
st"ea# LL o%*u#N
cout KK tl*tN
"etu"* st"ea#N
4
i*t #ai*?@
3
0ho*e$oo5 aN
cha" cN
2st"ea# 0$?t0ho*etX iosiii* ˆ iosiiout ˆ iosiia00@N
i2?^0$@ 3
Gh*ông 21. Ke" thoáng 3a'o0ra treFn ;ile
&27
cout KK tCa**ot o0e* 0ho*e $oo5 2ile%l*tN
"etu"* BN
4
2o"?NN@ 3
do 3
cout KK tB% Š*te" *u#$e"sl*tN
cout KK t2% Cis0la6 *u#$e"sl*tN
cout KK t9% ~uitl*tN
cout KK tl*Š*te" a choicei tN
ci* LL cN
4 !hile?cKwBw ˆˆ cLw9w@N
s!itch?c@ 3
case wBwi
ci* LL aN
cout KK tŠ*t"6 isi tN
cout KK aN €€ sho! o* sc"ee*
0$ KK aN €€ !"ite to dis5
$"ea5N
case w2wi
cha" chN
0$%see5g?UX iosii$eg@N
!hile?^0$%eo2?@@ 3
0$%get?ch@N
i2?^0$%eo2?@@ cout KK chN
4
0$%clea"?@N €€ "eset eo2
cout KK e*dlN
$"ea5N
case w9wi
0$%close?@N
"etu"* UN
4
4
4
Chuù yù raèng, toaùn töû taûí boäí KK coù theá ñöôïc söû duïng
ñeá víeát íeân ñóa hoaëc víeát íeân maøn hình maø khoâng caàn
thay ñoáí. Naây chính íaø ñaët tröng quan troïng vaø höõu ích cuûa
&2- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
phöông phaùp vaøo ra trong C++.
Gh*ông 22. Kie>u taïi .ie>1 th*ïc thi 3a' eù= kie>u &29
C=DL@A 22. 0ZQMO I>dZ YZQMX I=DdS I=Z
P>U QWH _ZQMO
C++ chuaán chöùa haí ñaët tröng gíuùp hoã trôï íaäp trình
höôùng ñoáí töôïng: xaùc ñònh kíeáu taïí thôøí ñíeám thöïc thí (víeát
taét íaø ^))ZA ^un )i1e )?=e Z<enti;ication) vaø toaùn töû eùp kíeáu
môùí. RTTI cho pheùp ta xaùc ñònh kíeáu cuûa moät ñoáí töôïng
trong suoát quaù trình thöïc thí chöông trình. Toaùn töû eùp kíeáu
cung caáp thao taùc eùp kíeáu an toaøn hôn.
1.1,#. 6a@= ]>@= _ZQMO I>dZ I=LUZ YZQMX I=DdS I=Z
Khaùí níeäm kíeáu taïí thôøí ñíeám thöïc thí khoâng xuaát
híeän trong cô cheá khoâng ña hình ví duï nhö ngoân ngöõ C. Trong
ngoân ngöõ khoâng ña hình noù khoâng caàn thoâng tín veà kíeáu
thöïc thí bôûí vì kíeáu cuûa moãí ñoáí töôïng ñöôïc xaùc ñònh taïí
thôøí ñíeám bíeân dòch (töùc íaø taïí thôøí ñíeám víeát chöông trình).
Tuy nhíeân trong ngoân ngöõ coù cô cheá ña hình nhö C++, xuaát
híeän tình huoáng maø trong ñoù kíeáu cuûa moät ñoáí töôïng
khoâng ñöôïc bíeát taïí thôøí ñíeám bíeân dòch bôûí tính chính xaùc
cuûa ñoáí töôïng khoâng ñöôïc xaùc ñònh cho ñeán khí chöông trình
thöïc thí. Trong chöông 17, C++ caøí ñaët tính ña hình thoâng qua
caùch söû duïng íôùp phaân caáp, haøm aûo, vaø con troû íôùp cô
sôû. Con troû íôùp cô sôû coù theá troû ñeán ñoáí töôïng íôùp cô sôû
hoaëc ñoáí töôïng íôùp daãn xuaát. Ta khoâng theá naøo xaùc ñònh
kíeáu ñoáí töôïng cuûa con troû naøy taïí moãí thôøí ñíeám trong
chöông trình. Kíeáu ñoáí töôïng cuûa con troû naøy chæ ñöôïc xaùc
ñònh taïí thôøí ñíeám thöïc thí baèng caùch söû duïng RTTI.
Neá nhaän ñöôïc kíeáu ñoáí töôïng, ta söû duïng toaùn töû
t60eid. Ta phaûí cheøn ;ile tíeâu ñeà Kt60ei*2oL. Daïng toáng
&6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
quaùt nhö sau:
t60eid?o$bect@
o$bect íaø ñoáí töôïng maø kíeáu cuûa noù seõ ñöôïc nhaän.
Noù coù kíeáu baát kì, bao goàm kíeáu döõ ííeäu beân trong vaø
kíeáu íôùp do ta taïo ra. t60eid traû veà moät tham chíeáu ñeán
ñoáí töôïng cuûa kíeáu t60e_i*2o moâ taû kíeáu cuûa ñoáí töôïng.
Kíeáu t60e_i*2o ñònh nghóa caùc thaønh víeân =ublic sau:
$ool o0e"ato"cc?co*st t60e_i*2o fo$@N
$ool o0e"ato"^c?co*st t60e_i*2o fo$@N
$ool $e2o"e?co*st t60e_i*2o fo$@N
co*st cha" ƒ*a#e?@N
Haí toaùn töû ñaõ ñöôïc taûí boäí íaø cc vaø ^c duøng ñeá so
saùnh kíeáu. Haøm $e2o"e?@ traû veà t"ue neáu ñoáí töôïng goïí
haøm naøy íaø tröôùc ñoáí töôïng trong tham soá (haøm naøy
thöôøng söû duïng beân trong). Haøm *a#e?@ traû veà teân ñoáí
töôïng. Ví duï:
€€ A si#0le e7a#0le that uses t60eid%
Ji*clude Kiost"ea#L
Ji*clude Kt60ei*2oL
usi*g *a#es0ace stdN
class #6classB 3
€€ %%%
4N
class #6class2 3
€€ %%%
4N
i*t #ai*?@
3
i*t iX bN
2loat 2N
cha" ƒ0N
#6classB o$BN
#6class2 o$2N
Gh*ông 22. Kie>u taïi .ie>1 th*ïc thi 3a' eù= kie>u &1
cout KK tThe t60e o2 i isi t KK t60eid?i@%*a#e?@N
cout KK e*dlN
cout KK tThe t60e o2 2 isi t KK t60eid?2@%*a#e?@N
cout KK e*dlN
cout KK tThe t60e o2 0 isi t KK t60eid?0@%*a#e?@N
cout KK e*dlN
cout KK tThe t60e o2 o$B isi t KK t60eid?o$B@%*a#e?@N
cout KK e*dlN
cout KK tThe t60e o2 o$2 isi t KK t60eid?o$2@%*a#e?@N
cout KK tl*l*tN
i2?t60eid?i@ cc t60eid?b@@
cout KK tThe t60es o2 i a*d b a"e the sa#el*tN
i2?t60eid?i@ ^c t60eid?2@@
cout KK tThe t60es o2 i a*d 2 a"e *ot the sa#etN
i2?t60eid?o$B@ ^c t60eid?o$2@@
cout KK to$B a*d o$2 a"e o2 di22e"i*g t60esl*tN
"etu"* UN
4
Keát quaû xuaát híeän nhö sau:
The t60e o2 i isi i*t
The t60e o2 2 isi 2loat
The t60e o2 0 isi cha" ƒ
The t60e o2 o$B isi class #6classB
The t60e o2 o$2 isi class #6class2
The t60es o2 i a*d b a"e the sa#e
The t60es o2 i a*d 2 a"e *ot the sa#e
o$B a*d o$2 a"e o2 di22e"i*g t60es
Caùch söû duïng chung nhaát cuûa t60eid khí aùp duïng con
troû íôùp cô sôû ña hình. Trong tröôøng hôïp naøy, noù seõ töï ñoäng
traû veà kíeáu cuûa ñoáí töôïng thöïc söï maø noù troû ñeán, coù
theá íaø kíeáu cô sôû hoaëc kíeáu daãn xuaát. Khí söû duïng t60eid
trong tình huoáng naøy, ta coù theá xaùc ñònh ñöôïc kíeáu cuûa
moät ñoáí töôïng taïí thôøí ñíeám thöïc thí maø ñöôïc troû bôûí con
troû íôùp cô sôû. Ví duï sau seõ mính hoïa tröôøng hôïp treân.
&2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
€€ A* e7a#0le that uses t60eid o* a 0ol6#o"0hic class
hie"a"ch6%
Ji*clude Kiost"ea#L
Ji*clude Kt60ei*2oL
usi*g *a#es0ace stdN
class Ma##al 3
0u$lici
€€ Ma##al is 0ol6#o"0hic
vi"tual $ool la6s_eggs?@ 3 "etu"* 2alseN 4
€€ %%%
4N
class Cati 0u$lic Ma##al 3
0u$lici
€€ %%%
4N
class Plat60usi 0u$lic Ma##al 3
0u$lici
$ool la6s_eggs?@ 3 "etu"* t"ueN 4
€€ %%%
4N
i*t #ai*?@
3
Ma##al ƒ0X A*6Ma##alN
Cat catN
Plat60us 0lat60usN
0 c fA*6Ma##alN
cout KK t0 is 0oi*ti*g to a* o$bect o2 t60e tN
cout KK t60eid?ƒ0@%*a#e?@ KK e*dlN
0 c fcatN
cout KK t0 is 0oi*ti*g to a* o$bect o2 t60e tN
cout KK t60eid?ƒ0@%*a#e?@ KK e*dlN
0 c f0lat60usN
cout KK t0 is 0oi*ti*g to a* o$bect o2 t60e tN
cout KK t60eid?ƒ0@%*a#e?@ KK e*dlN
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
0 is 0oi*ti*g to a* o$bect o2 t60e class Ma##al
Gh*ông 22. Kie>u taïi .ie>1 th*ïc thi 3a' eù= kie>u &
0 is 0oi*ti*g to a* o$bect o2 t60e class Cat
0 is 0oi*ti*g to a* o$bect o2 t60e class Plat60us
Trong taát caû caùc tröôøng hôïp, khí t60eid aùp duïng vôùí
con troû cuûa moät íôùp coù phaân caáp nhöng khoâng ña hình, íuùc
ñoù seõ traû veà kíeáu döõ ííeäu cuûa íôùp cô sôû. Thaät vaäy, trong
ví duï treân neáu ta boû töø khoùa vi"tual tröôùc haøm
la6s_eggs?@ keát quaû xuaát híeän treân maøn hình nhö sau:
0 is 0oi*ti*g to a* o$bect o2 t60e class Ma##al
0 is 0oi*ti*g to a* o$bect o2 t60e class Ma##al
0 is 0oi*ti*g to a* o$bect o2 t60e class Ma##al
Khí aùp duïng t60eid ñeán tham chíeáu ñoáí töôïng cuûa íôùp
ña hình, noù traû veà kíeáu ñoáí töôïng thöïc söï maø tham chíeáu
ñeán ví duï nhö íaø íôùp daãn xuaát. Tình huoáng naøy thöôøng
xuaát híeän khí ta gôûí ñeán haøm moät tham chíeáu. Ví duï chöông
trình sau, haøm –hatMa##al?@ ñöôïc khaí baùo coù moät tham soá
íaø tham chíeáu ñeán ñoáí töôïng coù kíeáu Ma##al. Níeàu naøy coù
nghóa íaø tham soá coù theá nhaän kíeáu Ma##al hoaëc íôùp daãn
xuaát töø Ma##al. Khí aùp duïng toaùn töû t60eid ñeán tham soá
naøy, noù traû veà kíeáu thöïc söï cuûa ñoáí töôïng gôûí ñeán haøm.
€€ ase a "e2e"e*ce !ith t60eid%
Ji*clude Kiost"ea#L
Ji*clude Kt60ei*2oL
usi*g *a#es0ace stdN
class Ma##al 3
0u$lici
vi"tual $ool la6s_eggs?@ 3 "etu"* 2alseN 4€€ Ma##al is
0ol6#o"0hic
€€ %%%
4N
class Cati 0u$lic Ma##al 3
0u$lici
€€ %%%
4N
&& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
class Plat60usi 0u$lic Ma##al 3
0u$lici
$ool la6s_eggs?@ 3 "etu"* t"ueN 4
€€ %%%
4N
€€ Ce#o*st"ate t60eid !ith a "e2e"e*ce 0a"a#ete"%
void –hatMa##al?Ma##al fo$@
3
cout KK to$ is "e2e"e*ci*g a* o$bect o2 t60e tN
cout KK t60eid?o$@%*a#e?@ KK e*dlN
4
i*t #ai*?@
3
Ma##al A*6Ma##alN
Cat catN
Plat60us 0lat60usN
–hatMa##al?A*6Ma##al@N
–hatMa##al?cat@N
–hatMa##al?0lat60us@N
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
o$ is "e2e"e*ci*g a* o$bect o2 t60e class Ma##al
o$ is "e2e"e*ci*g a* o$bect o2 t60e class Cat
o$ is "e2e"e*ci*g a* o$bect o2 t60e class Plat60us
Daïng thöù haí cuûa toaùn töû t60eid nhaän teân kíeáu nhö
íaø moät tham soá. Daïng toáng quaùt nhö sau:
t60eid?type-name@
Ví duï caâu íeänh sau hoaøn toaøn hôïp íeä:
cout KK t60eid?i*t@%*a#e?@N
Caùch söû duïng chính cuûa daïng naøy íaø nhaän moät ñoáí
töôïng kíeáu t60e_i*2o, vì vaäy ta coù theá söû duïng trong caâu
íeänh so saùnh. Ví duï:
void –hatMa##al?Ma##al fo$@
Gh*ông 22. Kie>u taïi .ie>1 th*ïc thi 3a' eù= kie>u &4
3
cout KK to$ is "e2e"e*ci*g a* o$bect o2 t60e tN
cout KK t60eid?o$@%*a#e?@ KK e*dlN
i2?t60eid?o$@ cc t60eid?Cat@@
cout KK tCats do*wt li5e !ate"%l*tN
4
1.129.1. _Fng ;uïng +ôn giaûn cuûa ^&&L
Chöông trình sau noùí íeân söùc maïnh cuûa RTTI. Trong
chöông trình naøy, haøm ñöôïc goïí íaø 2acto"6?@, haøm naøy taïo
ra caùc theá híeän cuûa caùc kíeáu daãn xuaát töø íôùp Ma##al.
Kíeáu cuûa ñoáí töôïng ñöôïc taïo ra ñöôïc xaùc ñònh bôûí íôøí goïí
cuûa haøm "a*d?@, neáu haøm traû veà U, sính ra ñoáí töôïng Cog,
neáu traû veà B sính ra ñoáí töôïng Cat vaø neáu traû veà 2 sính ra
ñoáí töôïng Plat60us. Chöông trình taïo ra BU ñoáí töôïng vaø ñeám
soá íöôïng moãí kíeáu ñöôïc hình thaønh.
€€ Ce#o*st"ati*g "u*-ti#e t60e id%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class Ma##al 3
0u$lici
€€ Ma##al is 0ol6#o"0hic
vi"tual $ool la6s_eggs?@ 3 "etu"* 2alseN 4€€ %%%
4N
class Cati 0u$lic Ma##al 3
0u$lici
€€ %%%
4N
class Plat60usi 0u$lic Ma##al 3
0u$lici
$ool la6s_eggs?@ 3 "etu"* t"ueN 4
€€ %%%
4N
class Cogi 0u$lic Ma##al 3
0u$lici
€€ %%%
&+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4N
€€ A 2acto"6 2o" o$bects de"ived 2"o# Ma##al%
Ma##al ƒ2acto"6?@
3
s!itch?"a*d?@ e 9 @ 3
case Ui "etu"* *e! CogN
case Bi "etu"* *e! CatN
case 2i "etu"* *e! Plat60usN
4
"etu"* UN
4
i*t #ai*?@
3
Ma##al ƒ0t"N €€ 0oi*te" to $ase class
i*t iN
i*t ccUX dcUX 0cUN
€€ ge*e"ate a*d cou*t o$bects
2o"?icUN iKBUN i@ 3
0t" c 2acto"6?@N €€ ge*e"ate a* o$bect
cout KK tO$bect is t KK t60eid?ƒ0t"@%*a#e?@N
cout KK e*dlN
€€ cou*t it
i2?t60eid?ƒ0t"@ cc t60eid?Cog@@ dN
i2?t60eid?ƒ0t"@ cc t60eid?Cat@@ cN
i2?t60eid?ƒ0t"@ cc t60eid?Plat60us@@ 0N
4
cout KK e*dlN
cout KK tA*i#als ge*e"atedil*tN
cout KK t Cogsi t KK d KK e*dlN
cout KK t Catsi t KK c KK e*dlN
cout KK t Plat60usesi t KK 0 KK e*dlN
"etu"* UN
4
Keát quaû xuaát híeän nhö sau:
O$bect is class Plat60us
O$bect is class Plat60us
O$bect is class Cat
O$bect is class Cat
Gh*ông 22. Kie>u taïi .ie>1 th*ïc thi 3a' eù= kie>u &7
O$bect is class Plat60us
O$bect is class Cat
O$bect is class Cog
O$bect is class Cog
O$bect is class Cat
O$bect is class Plat60us
A*i#als ge*e"atedi
Cogsi 2
Catsi Y
Plat60usesi Y
1.129.2. _Fng ;uïng toaùn t'û t)<ei; +eán !ôù< /aPu
Toaùn töû t60eid coù theá aùp duïng cho íôùp maãu. Toaùn
töû naøy duøng ñeá xaùc ñònh kíeáu döõ ííeäu gì duøng cho kíeáu
döõ ííeäu chung. Ví duï:
€€ asi*g t60eid !ith te#0lates%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
te#0late Kclass TL class #6class 3
T aN
0u$lici
#6class?T i@ 3 a c iN 4
€€ %%%
4N
i*t #ai*?@
3
#6classKi*tL oB?BU@X o2?Z@N
#6classKdou$leL o9?T%2@N
cout KK tT60e o2 oB is tN
cout KK t60eid?oB@%*a#e?@ KK e*dlN
cout KK tT60e o2 o2 is tN
cout KK t60eid?o2@%*a#e?@ KK e*dlN
cout KK tT60e o2 o9 is tN
cout KK t60eid?o9@%*a#e?@ KK e*dlN
cout KK e*dlN
i2?t60eid?oB@ cc t60eid?o2@@
cout KK toB a*d o2 a"e the sa#e t60el*tN
&- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
i2?t60eid?oB@ cc t60eid?o9@@
cout KK tŠ""o"l*tN
else
cout KK toB a*d o9 a"e di22e"e*t t60esl*tN
"etu"* UN
4
Keát quaû híeán thò nhö sau:
T60e o2 oB is class #6classKi*tL
T60e o2 o2 is class #6classKi*tL
T60e o2 o9 is class #6classKdou$leL
oB a*d o2 a"e the sa#e t60e
oB a*d o9 a"e di22e"e*t t60es
Nhö ta thaáy, haí ñoáí töôïng íaø cuøng kíeáu íôùp maãu, neáu
döõ ííeäu tham soá khoâng khôùp nhau, noù seõ íaø haí kíeáu
khoâng töông ñöông nhau. Trong chöông trình naøy, oB íaø kíeáu
#6classKi*tL vaø o9 íaø kíeáu #6classKdou$leL, haí ñoáí töôïng
naøy coù kíeáu khaùc nhau.
RTTI ít khí ñöôïc söû duïng trong caùc chöông trình. Trong
tröôøng hôïp ta íaøm víeäc vôùí kíeáu ña hình, ta söû duïng toaùn
töû t60eid ñeá xaùc ñònh kíeáu döõ ííeäu cuûa ñoáí töôïng ñöôïc
taïo ra.
1.1-/. TB>W@ IDT QWH _ZQMO
C++ ñònh nghóa 5 toaùn töû eùp kíeáu, kíeáu ñaàu tíeân theo
phong caùch truyeàn thoáng keá thöøa töø C. Boán toaùn töû coøn
íaïí ñöôïc boá sung vaøo sau ñoù íaø: d6*a#ic_cast, co*st_cast,
"ei*te"0"et_cast, static_cast.
1.13>.1. ;)na/icaca,t
Toaùn töû eùm kíeáu môùí quan troïng nhaát íaø
d6*a#ic_cast. Toaùn töû naøy thöïc híeän eùp kíeáu ôû thôøí gían
thöïc. Daïng toáng quaùt nhö sau:
Gh*ông 22. Kie>u taïi .ie>1 th*ïc thi 3a' eù= kie>u &9
d6*a#ic_castKta"get-t60eL ?e70"@
ta"get-t60e chæ ra kíeáu ñích cuûa toaùn töû eùp kíeáu vaø
e70" íaø bíeáu thöùc ñöôïc eùp sang kíeáu môùí. Kíeáu ñích phaûí
íaø moät kíeáu con troû hoaëc tham chíeáu vaø bíeáu thöùc ñöôïc
eùp kíeáu phaûí ñöôïc coí nhö íaø kíeáu con troû hoaëc tham chíeáu.
Thaät vaäy, d6*a#ic_cast coù theá ñöôïc söû duïng ñeá eùp moät
kíeáu con troû ñeán moät kíeáu con troû khaùc hoaëc moät tham
chíeáu ñeán moät tham chíeáu khaùc.
Muïc ñích cuûa d6*a#ic_cast thöïc thí eùp kíeáu treân kíeáu
ña hình. Ví duï, cho haí íôùp ña hình B vaø C vôùí C ñöôïc keá thöøa
töø B, toaùn töû d6*a#ic_cast coù theá íuoân íuoân eùp kíeáu con
troû Cƒ sang kíeáu Bƒ bôûí vì con troû kíeáu cô sôû coù theá troû
ñeán íôùp daãn xuaát. Nhöng d6*a#ic_cast coù theá eùp moät
kíeáu Bƒ vaøo kíeáu Cƒ neáu ñoáí töôïng ñöôïc troû ñaõ thöïc söï íaø
moät ñoáí töôïng C. Toáng quaùt, d6*a#ic_cast seõ thaønh coâng
neáu con troû (hoaëc tham chíeáu) ñöôïc eùp kíeáu ñeán hoaëc íaø
moät ñoáí töôïng kíeáu ñích hoaëc íaø moät ñoáí töôïng ñöôïc daãn
xuaát töø kíeáu ñích. Caùc tröôøng hôïp coøn íaïí, eùp kíeáu seõ
khoâng thaønh coâng. Neáu eùp kíeáu khoâng thaønh coâng
d6*a#ic_cast traû veà gíaù trò *ull trong tröôøng e70" íaø con
troû. Noáí vôùí tröôøng hôïp tham chíeáu, neáu d6*a#ic_cast
khoâng thaønh coâng seõ neùm moät ngoaïí íeä íaø $ad_cast.
Ví duï sau gíaû söû Base íaø íôùp ña hình vaø Ce"ived ñöôïc
daãn xuaát töø Base.
Base ƒ$0X $_o$N
Ce"ived ƒd0X d_o$N
$0 c fd_o$N €€ $ase 0oi*te" 0oi*ts to Ce"ived o$bect
d0 c d6*a#ic_castKCe"ived ƒL ?$0@N €€ cast to de"ived
0oi*te" OO
i2?d0@ cout KK tCast OOtN
&&6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Ví duï treân eùp kíeáu töø con troû $0 íôùp cô sôû veà ñeán
íôùp daãn xuaát d0 hôïp íeä bôûí $0 ñaõ thöïc söï troû ñeán moät
ñoáí töôïng cuûa Ce"ived. Vaø ñoaïn chöông trình treân híeán thò
Cast OO. Xeùt ñoaïn chöông trình sau:
$0 c f$_o$N €€ $ase 0oi*te" 0oi*ts to Base o$bect
d0 c d6*a#ic_castKCe"ived ƒL ?$0@N €€ e""o"
i2?^d0@ cout KK tCast FailstN
Noaïn trình treân eùp kíeáu khoâng thöïc híeän ñöôïc bôûí vì $0
ñang troû ñeán ñoáí töôïng íôùp Base vaø víeäc eùp kíeáu töø ñoáí
töôïng íôùp cô sôû veà ñoáí töôïng íôùp daãn xuaát íaø khoâng hôïp
íeä.
Chöông trình ñeà raát nhíeàu tình huoáng maø d6*a#ic_cast
coù theá quaûn íí:
€€ Ce#o*st"ate d6*a#ic_cast%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class Base 3
0u$lici
vi"tual void 2?@ 3 cout KK tI*side Basel*tN 4
€€ %%%
4N
class Ce"ived i 0u$lic Base 3
0u$lici
void 2?@ 3 cout KK tI*side Ce"ivedl*tN 4
4N
i*t #ai*?@
3
Base ƒ$0X $_o$N
Ce"ived ƒd0X d_o$N
d0 c d6*a#ic_castKCe"ived ƒL ?fd_o$@N
i2?d0@ 3
cout KK tCast 2"o# Ce"ived ƒ to Ce"ived ƒ
OO%l*tN
d0-L2?@N
Gh*ông 22. Kie>u taïi .ie>1 th*ïc thi 3a' eù= kie>u &&1
4 else
cout KK tŠ""o"l*tN
cout KK e*dlN
$0 c d6*a#ic_castKBase ƒL ?fd_o$@N
i2?$0@ 3
cout KK tCast 2"o# Ce"ived ƒ to Base ƒ OO%l*tN
$0-L2?@N
4 else
cout KK tŠ""o"l*tN
cout KK e*dlN
$0 c d6*a#ic_castKBase ƒL ?f$_o$@N
i2?$0@ 3
cout KK tCast 2"o# Base ƒ to Base ƒ OO%l*tN
$0-L2?@N
4 else
cout KK tŠ""o"l*tN
cout KK e*dlN
d0 c d6*a#ic_castKCe"ived ƒL ?f$_o$@N
i2?d0@
cout KK tŠ""o"l*tN
else
cout KK tCast 2"o# Base ƒ to Ce"ived ƒ *ot
OO%l*tN
cout KK e*dlN
$0 c fd_o$N €€ $0 0oi*ts to Ce"ived o$bect
d0 c d6*a#ic_castKCe"ived ƒL ?$0@N
i2?d0@ 3
cout KK tCasti*g $0 to a Ce"ived ƒ OOl*t KK
t$ecause $0 is "eall6 0oi*ti*gl*t KK
tto a Ce"ived o$bect%l*tN
d0-L2?@N
4 else
cout KK tŠ""o"l*tN
cout KK e*dlN
$0 c f$_o$N €€ $0 0oi*ts to Base o$bect
d0 c d6*a#ic_castKCe"ived ƒL ?$0@N
i2?d0@
cout KK tŠ""o"tN
&&2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
else 3
cout KK tNo! casti*g $0 to a Ce"ived ƒl*t KK
tis *ot OO $ecause $0 is "eall6 l*t KK
t0oi*ti*g to a Base o$bect%l*tN
4
cout KK e*dlN
d0 c fd_o$N €€ d0 0oi*ts to Ce"ived o$bect
$0 c d6*a#ic_castKBase ƒL ?d0@N
i2?$0@ 3
cout KK tCasti*g d0 to a Base ƒ is OO%l*tN
$0-L2?@N
4 else
cout KK tŠ""o"l*tN
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
Cast 2"o# Ce"ived ƒ to Ce"ived ƒ OO%
I*side Ce"ived
Cast 2"o# Ce"ived ƒ to Base ƒ OO%
I*side Ce"ived
Cast 2"o# Base ƒ to Base ƒ OO%
I*side Base
Cast 2"o# Base ƒ to Ce"ived ƒ *ot OO%
Casti*g $0 to a Ce"ived ƒ OO
$ecause $0 is "eall6 0oi*ti*g
to a Ce"ived o$bect%
I*side Ce"ived
No! casti*g $0 to a Ce"ived ƒ
is *ot OO $ecause $0 is "eall6
0oi*ti*g to a Base o$bect%
Casti*g d0 to a Base ƒ is OO%
I*side Ce"ived
1.13>.2. &ha) theá t)<ei; 1ôùi ;)na/icaca,t
Toaùn töû d6*a#ic_cast thænh thoaûng ñöôïc söû duïng thay
cho t60eid. Ví duï gíaû söû Base íaø íôùp cô sôû ña hình vaø
Gh*ông 22. Kie>u taïi .ie>1 th*ïc thi 3a' eù= kie>u &&
Ce"ived íaø íôùp daãn xuaát töø Base. Noaïn chöông trình sau seõ
gaùn d0 ñòa chæ cuûa ñoáí töôïng ñöôïc troû bôûí $0 neáu vaø chæ
neáu noù íaø moät ñoáí töôïng thöïc söï cuûa íôùp Ce"ived.
Base ƒ$0N
Ce"ived ƒd0N
€€ %%%
i2?t60eid?ƒ$0@ cc t60eid?Ce"ived@@ d0 c ?Ce"ived ƒ@ $0N
Trong tröôøng hôïp naøy, eùp kíeáu theo caùch cuõ ñöôïc söû
duïng ñeá eùp kíeáu. Caùch naøy íaø an toaøn bôûí vì caâu íeänh i2
kíeám tra tính hôïp phaùp eùp kíeáu söû duïng t60eid tröôùc khí
eùp kíeáu thöïc söï díeãn ra. Tuy nhíeân caùch toát hôn ñeá thöïc
híeän ñíeàu naøy íaø thay theá toaùn töû t60eid vaø caâu íeänh i2
baèng d6*a#ic_cast.
d0 c d6*a#ic_castKCe"ived ƒL ?$0@N
Do d6*a#ic_cast chæ thaønh coâng neáu ñoáí töôïng ñöôïc
eùp hoaëc íaø ñoáí töôïng cuûa kíeáu ñích hoaëc íaø ñoáí töôïng
ñöôïc daãn xuaát cuûa kíeáu ñích, sau khí thöïc híeän caâu íeänh
naøy d0 seõ chöùa hoaëc roãng hoaëc con troû ñeán ñoáí töôïng
cuûa íôùp Ce"ived. Ví duï:
€€ ase d6*a#ic_cast to "e0lace t60eid%
Ji*clude Kiost"ea#L
Ji*clude Kt60ei*2oL
usi*g *a#es0ace stdN
class Base 3
0u$lici
vi"tual void 2?@ 34
4N
class Ce"ived i 0u$lic Base 3
0u$lici
void de"ivedO*l6?@ 3
cout KK tIs a Ce"ived O$bect%l*tN
4
&&& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4N
i*t #ai*?@
3
Base ƒ$0X $_o$N
Ce"ived ƒd0X d_o$N
€€ ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
€€ use t60eid
€€ ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
$0 c f$_o$N
i2?t60eid?ƒ$0@ cc t60eid?Ce"ived@@ 3
d0 c ?Ce"ived ƒ@ $0N
d0-Lde"ivedO*l6?@N
4
else
cout KK tCast 2"o# Base to Ce"ived 2ailed%l*tN
$0 c fd_o$N
i2?t60eid?ƒ$0@ cc t60eid?Ce"ived@@ 3
d0 c ?Ce"ived ƒ@ $0N
d0-Lde"ivedO*l6?@N
4
else
cout KK tŠ""o"X cast should !o"5^l*tN
€€ ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
€€ use d6*a#ic_cast
€€ ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
$0 c f$_o$N
d0 c d6*a#ic_castKCe"ived ƒL ?$0@N
i2?d0@ d0-Lde"ivedO*l6?@N
else
cout KK tCast 2"o# Base to Ce"ived 2ailed%l*tN
$0 c fd_o$N
d0 c d6*a#ic_castKCe"ived ƒL ?$0@N
i2?d0@ d0-Lde"ivedO*l6?@N
else
cout KK tŠ""o"X cast should !o"5^l*tN
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
Gh*ông 22. Kie>u taïi .ie>1 th*ïc thi 3a' eù= kie>u &&4
Cast 2"o# Base to Ce"ived 2ailed%
Is a Ce"ived O$bect%
Cast 2"o# Base to Ce"ived 2ailed%
Is a Ce"ived O$bect%
1.13>.3. Q'û ;uïng ;)na/icaca,t 1ôùi !ôù< /aPu
Toaùn töû d6*a#ic_cast cuõng coù theá söû duïng vôùí íôùp
maãu. Ví duï:
€€ Ce#o*st"ate d6*a#ic_cast o* te#0late classes%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
te#0late Kclass TL class Nu# 3
0"otectedi
T valN
0u$lici
Nu#?T 7@ 3 val c 7N 4
vi"tual T getval?@ 3 "etu"* valN 4
€€ %%%
4N
te#0late Kclass TL class SA"Nu# i 0u$lic Nu#KTL 3
0u$lici
SA"Nu#?T 7@ i Nu#KTL?7@ 3 4
T getval?@ 3 "etu"* val ƒ valN 4
4N
i*t #ai*?@
3
Nu#Ki*tL ƒ$0X *u#I*t_o$?2@N
SA"Nu#Ki*tL ƒd0X sA"I*t_o$?9@N
Nu#Kdou$leL *u#Cou$le_o$?9%9@N
$0 c d6*a#ic_castKNu#Ki*tL ƒL ?fsA"I*t_o$@N
i2?$0@ 3
cout KK tCast 2"o# SA"Nu#Ki*tLƒ to Nu#Ki*tLƒ
OO%l*tN
cout KK t&alue is t KK $0-Lgetval?@ KK e*dlN
4 else
cout KK tŠ""o"l*tN
cout KK e*dlN
d0 c d6*a#ic_castKSA"Nu#Ki*tL ƒL ?f*u#I*t_o$@N
&&+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
i2?d0@
cout KK tŠ""o"l*tN
else 3
cout KK tCast 2"o# Nu#Ki*tLƒ to SA"Nu#Ki*tLƒ *ot
OO%l*tN
cout KK tCa*wt cast a 0oi*te" to a $ase o$bect
i*tol*tN
cout KK ta 0oi*te" to a de"ived o$bect%l*tN
4
cout KK e*dlN
$0 c d6*a#ic_castKNu#Ki*tL ƒL ?f*u#Cou$le_o$@N
i2?$0@
cout KK tŠ""o"l*tN
else
cout KK tCa*wt cast 2"o# Nu#Kdou$leLƒ to
Nu#Ki*tLƒ%l*tN
cout KK tThese a"e t!o di22e"e*t t60es%l*tN
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
Cast 2"o# SA"Nu#Ki*tLƒ to Nu#Ki*tLƒ OO%
&alue is Z
Cast 2"o# Nu#Ki*tLƒ to SA"Nu#Ki*tLƒ *ot OO%
Ca*wt cast a 0oi*te" to a $ase o$bect i*to
a 0oi*te" to a de"ived o$bect%
Ca*wt cast 2"o# Nu#Kdou$leLƒ to Nu#Ki*tLƒ%
These a"e t!o di22e"e*t t60es%
Vaán ñeà chính mính hoïa trong ví duï naøy íaø ta khoâng theá
söû duïng d6*a#ic_cast ñeá eùp moät con troû theá híeän cuûa
íôùp maãu veà kíeáu khaùc cuûa theá híeän. Löu yù raèng, kíeáu
chính xaùc cuûa moät ñoáí töôïng cuûa íôùp maãu ñöôïc xaùc ñònh
bôûí kíeáu döõ ííeäu ñöôïc söû duïng ñeá taïo ra theá híeän cuûa
íôùp maãu. Thaät vaäy, Nu#Kdou$leL vaø Nu#Ki*tL íaø haí kíeáu
khaùc nhau.
1.13>.#. con,taca,t
Gh*ông 22. Kie>u taïi .ie>1 th*ïc thi 3a' eù= kie>u &&7
toaùn töû const_cast ñöôïc söû duïng ñeá taûí boäí const
vaø/hoaëc voíatííe trong eùp kíeáu. Kíeáu ñích vaø nguoàn phaûí
cuøng kíeáu vôùí nhau. Daïng toáng quaùt cuûa toaùn töû naøy nhö
sau:
co*st_castKt60eL ?e70"@
type cho bíeát kíeáu ñích, expr bíeáu thöùc caàn eùp sang
kíeáu môùí. Ví duï:
€€ Ce#o*st"ate co*st_cast%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void sA"val?co*st i*t ƒval@
3
i*t ƒ0N
€€ cast a!a6 co*st-*ess%
0 c co*st_castKi*t ƒL ?val@N
ƒ0 c ƒval ƒ ƒvalN €€ *o!X #odi26 o$bect th"ough v
4
i*t #ai*?@
3
i*t 7 c BUN
cout KK t7 $e2o"e calli t KK 7 KK e*dlN
sA"val?f7@N
cout KK t7 a2te" calli t KK 7 KK e*dlN
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
7 $e2o"e calli BU
7 a2te" calli BUU
Ta thaáy x ñöôïc thay ñoáí bôûí haøm sqrvaí() keá caû khí tham
soá ñöôïc truyeàn vaøo íaø kíeáu con troû const.
Toaùn töû const_cast cuõng ñöôïc söû duïng ñeá eùp kíeáu
haèng sang tham chíeáu haèng. Ví duï, chöông trình treân íaøm
víeäc íaïí vôùí tham soá gôûí ñeán haøm íaø haèng tham chíeáu.
&&- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
€€ ase co*st_cast o* a co*st "e2e"e*ce%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void sA"val?co*st i*t fval@
3
€€ cast a!a6 co*st o* val
co*st_castKi*t fL ?val@ c val ƒ valN
4
i*t #ai*?@
3
i*t 7 c BUN
cout KK t7 $e2o"e calli t KK 7 KK e*dlN
sA"val?7@N
cout KK t7 a2te" calli t KK 7 KK e*dlN
"etu"* UN
4
Löu yù chöông trình treân íaøm víeäc ñöôïc bôûí vì noù xoùa ñí
thuoäc tính haèng cuûa vaí, noù cho pheùp gaùn moät gíaù trò môùí
tôùí íôøí goïí haøm (trong tröôøng hôïp naøy íaø x).
1.13>.2. ,taticaca,t
toaùn töû statíc_cast thöïc thí moät eùp kíeáu khoâng phaûí ña
hình. Noù coù theá ñöôïc söû duïng cho moïí kíeáu chuyeán ñoáí
chuaán. Noù khoâng thöïc híeän kíeáu tra khí thöïc thí. Daïng toáng
quaùt nhö sau:
static_castKt60eL ?e70"@
type íaø kíeáu ñích vaø expr íaø bíeáu thöùc caàn eùp kíeáu. Ví
duï:
€€ ase static_cast%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
i*t iN
2o"?icUN iKBUN i@
Gh*ông 22. Kie>u taïi .ie>1 th*ïc thi 3a' eù= kie>u &&9
cout KK static_castKdou$leL ?i@ € 9 KK t tN
"etu"* UN
4
1.13>.3. reinter<retaca,t
Toaùn töû reínterpret_cast chuyeán ñoáí moät kíeáu vaøo
kíeáu cô baûn khaùc. Ví duï noù coù theá chuyeán moät con troû veà
soá nguyeân vaø soá nguyeân veà con troû. Daïng toáng quaùt nhö
sau:
"ei*te"0"et_castKt60eL ?e70"@
type íaø kíeáu ñích vaø expr íaø bíeáu thöùc caàn eùp kíeáu. Ví
duï:
€€ A* e7a#0le that uses "ei*te"0"et_cast%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
i*t iN
cha" ƒ0 c tThis is a st"i*gtN
€€ cast 0oi*te" to i*tege"
i c "ei*te"0"et_castKi*tL ?0@N
cout KK iN
"etu"* UN
4
Ví duï treân, toaùn töû reínterpret_cast eùp kíeáu con troû veà
kíeáu soá nguyeân.
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &41
C=DL@A 23. 0=BC@A AZ>@ IQC@1 S>WS
=>UX S=O^QM@ YBMZ1 S>WS S=OT YQ?
@>C@A S>B
1.1-1. 0=BC@A AZ>@ IQC@
Khoâng gían teân môùí ñöôïc boá sung vaøo C++, muïc ñích
cuûa noù íaø khoanh vuøng teân cuûa caùc ñònh danh ñeá traùnh
tình traïng xung ñoät. Trong moâí tröôøng íaäp trình C++, coù söï
buøng noá veà teân bíeán, haøm vaø íôùp. Tröôùc khí phaùt mính ra
khoâng gían teân, caùc teân naèm trong moät khoâng gían teân
toaøn cuïc vaø xaûy ra xung ñoät. Ví duï chöông trình ñònh nghóa
moät haøm coù teân íaø a$s?@, noù coù theá choàng íeân haøm thö
víeän chuaán a$s?@ bôûí vì caû haí teân ñöôïc íöu tröõ trong moät
khoâng gían teân toaøn cuïc. Xung ñoät teân xuaát híeän khí haí
hoaëc nhíeàu hôn haí thö víeän söû duïng trong moät chöông trình,
khí ñoù coù theá coù moät teân ñöôïc ñònh nghóa trong haí thö
víeän khaùc nhau. Tình huoáng naøy cuõng xuaát híeän trong teân
íôùp.
Söï xuaát híeän cuûa töø khoùa *a#es0ace seõ gíaûí quyeát
caùc vaán ñeà treân bôûí vì noù khoanh vuøng caùc teân vaøo beân
trong noù. Khoâng gían teân cho pheùp cuøng moät teân coù theá
söû duïng ôû nhöõng ngöõ caûnh khaùc nhau maø khoâng coù söï
xung ñoät. Tuy nhíeân, ñíeám thuaän íôïí ñaùng chuù yù nhaát cuûa
khoâng gían teân ñoù íaø thö víeän chuaán. Tröôùc khí coù khoâng
gían teân, toaøn boä caùc thö víeän ñöôïc ñònh nghóa beân trong
moät khoâng gían teân toaøn cuïc, töø khí coù töø khoùa *a#es0ace,
caùc thö víeän ñöôïc ñònh nghóa beân trong moät khoâng gían teân
cuûa noù goïí íaø std.
&42 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Ta cuõng coù theá taïo ra moät khoâng gían teân ñeá khoanh
vuøng caùc bíeán maø ta nghæ coù theá xaûy ra xung ñoät. Níeàu
naøy ñaëc bíeät quan troïng neáu ta taïo ra moät thö víeän caùc
íôùp vaø haøm.
1.131.1. (ô baûn 1eN khoDng gian teDn
Töø khoùa *a#es0ace cho pheùp ta chía khoâng gían teân
toaøn cuïc baèng caùch taïo ra moät khaí baùo vuøng, noùí caùch
khaùc khoâng gían teân ñònh nghóa moät phaïm ví. Daïng toáng
quaùt khoâng gían teân nhö sau:
*a#es0ace *a#e 3
// decla"atio*s
4
Moïí thöù ñònh nghóa beân trong caâu íeänh *a#es0ace íaø
beân trong phaïm ví cuûa khoâng gían teân ñoù.
Sau ñaây íaø moät ví duï veà khoâng gían teân. Noù khoanh
vuøng teân cuûa ñöôïc duøng ñeá caøí ñaët moät íôùp ñeám ñôn
gíaûn. Trong khoâng gían teân naøy ñònh nghóa moät íôùp coù teân
íaø cou*te" vaø bíeán u00e"$ou*d vaø lo!e"$ou*d.
*a#es0ace Cou*te"Na#eS0ace 3
i*t u00e"$ou*dN
i*t lo!e"$ou*dN
class cou*te" 3
i*t cou*tN
0u$lici
cou*te"?i*t *@ 3
i2?* Kc u00e"$ou*d@ cou*t c *N
else cou*t c u00e"$ou*dN
4
void "eset?i*t *@ 3
i2?* Kc u00e"$ou*d@ cou*t c *N
4
i*t "u*?@ 3
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &4
i2?cou*t L lo!e"$ou*d@ "etu"* cou*t--N
else "etu"* lo!e"$ou*dN
4
4N
4
OU ñaây u00e"$ou*d, lo!e"$ou*d vaø cou*te" ñöôïc khoanh
vuøng trong khoâng gían teân Cou*te"Na#es0ace.
Beân trong moät khoâng gían teân, ñònh danh khaí baùo beân
trong khoâng gían teân ñoù ñöôïc tham chíeáu tröïc tíeáp. Ví duï
beân trong khoâng gían teân Cou*te"Na#es0ace, haøm "u*?@ coù
theá tham chíeáu tröïc tíeáp ñeán lo!e"$ou*d baèng caâu íeänh:
i2?cou*t L lo!e"$ou*d@ "etu"* cou*t--N
Tuy nhíeân, do khoâng gían teân ñònh nghóa moät phaïm ví ta
caàn phaûí söû duïng toaùn töû phaân gíaûí phaïm ví ñeá tham
chíeáu ñeán ñoáí töôïng ñöôïc khaí baùo beân trong moät khoâng
gían teân töø beân ngoaøí khoâng gían teân. Ví duï ñeá gaùn BU cho
u00e"$ou*d töø beân ngoaøí khoâng gían teân Cou*te"Na#es0ace ta
phaûí söû duïng caâu íeänh:
Cou*te"Na#eS0aceiiu00e"$ou*d c BUN
Hoaëc ñeá khaí baùo moät ñoáí töôïng kíeáu cou*te" ôû beân
ngoaøí Cou*te"Na#es0ace, ta söû duïng caâu íeänh:
Cou*te"Na#eS0aceiicou*te" o$N
Toáng quaùt, ñeá truy caäp moät thaønh víeân cuûa khoâng
gían teân töø beân ngoaøí, tröôùc teân thaønh víeân phaûí coù teân
cuûa khoâng gían teân cuøng vôùí toaùn töû phaân gíaûí phaïm ví.
Chöông trình sau mính hoïa caùch söû duïng khoâng gían teân
Cou*te"*a#es0ace.
€€ Ce#o*st"ate a *a#es0ace%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
&4& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
*a#es0ace Cou*te"Na#eS0ace 3
i*t u00e"$ou*dN
i*t lo!e"$ou*dN
class cou*te" 3
i*t cou*tN
0u$lici
cou*te"?i*t *@ 3
i2?* Kc u00e"$ou*d@ cou*t c *N
else cou*t c u00e"$ou*dN
4
void "eset?i*t *@ 3
i2?* Kc u00e"$ou*d@ cou*t c *N
4
i*t "u*?@ 3
i2?cou*t L lo!e"$ou*d@ "etu"* cou*t--N
else "etu"* lo!e"$ou*dN
4
4N
4
i*t #ai*?@
3
Cou*te"Na#eS0aceiiu00e"$ou*d c BUUN
Cou*te"Na#eS0aceiilo!e"$ou*d c UN
Cou*te"Na#eS0aceiicou*te" o$B?BU@N
i*t iN
do 3
i c o$B%"u*?@N
cout KK i KK t tN
4 !hile?i L Cou*te"Na#eS0aceiilo!e"$ou*d@N
cout KK e*dlN
Cou*te"Na#eS0aceiicou*te" o$2?2U@N
do 3
i c o$2%"u*?@N
cout KK i KK t tN
4 !hile?i L Cou*te"Na#eS0aceiilo!e"$ou*d@N
cout KK e*dlN
o$2%"eset?BUU@N
Cou*te"Na#eS0aceiilo!e"$ou*d c ZUN
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &44
do 3
i c o$2%"u*?@N
cout KK i KK t tN
4 !hile?i L Cou*te"Na#eS0aceiilo!e"$ou*d@N
"etu"* UN
4
Chuù yù: khaí baùo ñoáí töôïng cou*te" vaø tham chíeáu ñeán
thaønh víeân lo!e"$ou*d, u00e"$ou*d phaûí ñöôïc chæ roõ bôûí
Cou*te"Na#es0ace. Tuy nhíeân khí ñoáí töôïng cuûa cou*te" ñaõ
ñöôïc khaí baùo noù vaø caùc thaønh víeân cuûa noù khoâng caàn
chæ roõ khoâng gían teân. Thaät vaäy, o$B%"u*?@ coù theá goïí tröïc
tíeáp, khoâng gían teân ñaõ ñöôïc phaân gíaûí.
1.131.2. (aDu !eänh u,ing
Neáu chöông trình tham chíeáu ñeán caùc thaønh víeân cuûa
moät khoâng gían teân nhíeàu íaàn, ñíeàu naøy daãn ñeán víeäc ta
phaûí víeát íaïí nhíeàu íaàn teân khoâng gían vaø toaùn töû phaân
gíaûí phaïm ví. Neá khaéc phuïc tình huoáng naøy, ta söû duïng caâu
íeänh usi*g. Caâu íeänh naøy coù haí daïng nhö sau:
usi*g *a#es0ace *a#eN
usi*g *a#eii#e#$e"N
Daïng ñaàu tíeân, chæ ra khoâng gían teân maø ta muoán truy
caäp. Taát caû caùc thaønh víeân trong khoâng gían teân seõ íaø
thaønh víeân cuûa khoâng gían teân híeän haønh vaø noù ñöôïc söû
duïng maø khoâng caàn phaûí chæ roõ khoâng gían teân ôû tröôùc.
Daïng thöù haí, chæ noùí roõ nhöõng thaønh víeân cuûa khoâng gían
teân ñoù. Ví duï:
usi*g Cou*te"Na#eS0aceiilo!e"$ou*dN €€ o*l6 lo!e"$ou*d is
visi$le
lo!e"$ou*d c BUN €€ OO $ecause lo!e"$ou*d is visi$le
usi*g *a#es0ace Cou*te"Na#eS0aceN €€ all #e#$e"s a"e
visi$le
&4+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
u00e"$ou*d c BUUN €€ OO $ecause all #e#$e"s a"e *o!
visi$le
Chöông trình sau mính hoïa caùch söû duïng usi*g:
€€ Ce#o*st"ate usi*g%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
*a#es0ace Cou*te"Na#eS0ace 3
i*t u00e"$ou*dN
i*t lo!e"$ou*dN
class cou*te" 3
i*t cou*tN
0u$lici
cou*te"?i*t *@ 3
i2?* Kc u00e"$ou*d@ cou*t c *N
else cou*t c u00e"$ou*dN
4
void "eset?i*t *@ 3
i2?* Kc u00e"$ou*d@ cou*t c *N
4
i*t "u*?@ 3
i2?cou*t L lo!e"$ou*d@ "etu"* cou*t--N
else "etu"* lo!e"$ou*dN
4
4N
4
i*t #ai*?@
3
€€ use o*l6 u00e"$ou*d 2"o# Cou*te"Na#eS0ace
usi*g Cou*te"Na#eS0aceiiu00e"$ou*dN
€€ *o!X *o Auali2icatio* *eeded to set u00e"$ou*d
u00e"$ou*d c BUUN
€€ Auali2icatio* still *eeded 2o" lo!e"$ou*dX etc%
Cou*te"Na#eS0aceiilo!e"$ou*d c UN
Cou*te"Na#eS0aceiicou*te" o$B?BU@N
i*t iN
do 3
i c o$B%"u*?@N
cout KK i KK t tN
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &47
4 !hile?i L Cou*te"Na#eS0aceiilo!e"$ou*d@N
cout KK e*dlN
€€ *o!X use e*ti"e Cou*te"Na#eS0ace
usi*g *a#es0ace Cou*te"Na#eS0aceN
cou*te" o$2?2U@N
do 3
i c o$2%"u*?@N
cout KK i KK t tN
4 !hile?i L lo!e"$ou*d@N
cout KK e*dlN
o$2%"eset?BUU@N
lo!e"$ou*d c ZUN
do 3
i c o$2%"u*?@N
cout KK i KK t tN
4 !hile?i L lo!e"$ou*d@N
"etu"* UN
4
1.131.3. KhoDng gian teDn khoDng coù teDn
Coù moät kíeáu khoâng gían teân ñaëc bíeät goïí íaø khoâng
gían teân khoâng coù teân, cho pheùp ta taïo ra caùc ñònh danh
ríeâng cho moät ;ile. Khoâng gían teân naøy coøn ñöôïc goïí íaø
khoâng gían teân naëc danh. Daïng toáng quaùt nhö sau:
*a#es0ace 3
// decla"atio*s
4
Khoâng gían teân naëc danh cho pheùp ta thíeát íaäp nhöõng
ñònh danh ríeâng maø chæ ñöôïc bíeát trong moät ;ile ñôn. Beân
trong ;ile chöùa khoâng gían teân naëc danh, caùc thaønh víeân
naøy ñöôïc söû duïng tröïc tíeáp. Tuy nhíeân beân ngoaøí ;ile, phaûí
chæ roõ ñònh danh.
1.131.#. Yoät 1a$i tu$) choïn treDn khoDng gian teDn
Coù theá coù nhíeàu khoâng gían teân truøng teân. Ví duï:
&4- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
*a#es0ace NS 3
i*t iN
4
€€ %%%
*a#es0ace NS 3
i*t bN
4
i*t #ai*?@
3
NSiii c NSiib c BUN
€€ "e2e" to NS s0eci2icall6
cout KK NSiii ƒ NSiib KK tl*tN
€€ use NS *a#es0ace
usi*g *a#es0ace NSN
cout KK i ƒ bN
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
BUU
BUU
OU ñaây NS ñöôïc chía thaønh haí maãu, tuy nhíeân noäí dung
cuûa moãí maãu vaãn naèm treân cuøng moät teân ñoù íaø NS.
Moät khoâng gían teân phaûí ñöôïc khaí baùo beân ngoaøí caùc
phaïm ví khaùc. Níeàu naøy coù nghóa íaø baïn khoâng theá khaí
baùo khoâng gían teân trong moät haøm. Tuy nhíeân coù moät
ngoaïí íeä, khoâng gían teân coù theá íoàng trong moät khoâng gían
teân khaùc. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
*a#es0ace NSB 3
i*t iN
*a#es0ace NS2 3 €€ a *ested *a#es0ace
i*t bN
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &49
4
4
i*t #ai*?@
3
NSBiii c BZN
€€ NS2iib c BUN Š""o"X NS2 is *ot i* vie!
NSBiiNS2iib c BUN €€ this is "ight
cout KK NSBiii KK t tKK NSBiiNS2iib KK tl*tN
€€ use NSB
usi*g *a#es0ace NSBN
€ƒ No! that NSB is i* vie!X NS2 ca* $e used to
"e2e" to b% ƒ€
cout KK i ƒ NS2iibN
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
BZ BU
BZU
Trong ví duï treân, khoâng gían teân NS2 íoàng trong khoâng
gían teân NSB. Neá tham chíeáu ñeán b ta phaûí chæ roõ caû haí
khoâng gían teân NSB vaø NS2.
Thoâng thöôøng ta khoâng neân taïo ra khoâng gían teân cho
nhöõng chöông trình coù kích thöôùc nhoû. Tuy nhíeân neáu ta taïo
ra moät thö víeän ñeá söû duïng thì neân goùí nhöõng thö víeän
naøy vaøo moät khoâng gían teân.
1.1-2. 0=BC@A AZ>@ IQC@ \I]
C++ chuaán ñònh nghóa toaøn boä caùc thö víeän chuaán
vaøo khoâng gían teân íaø std. ñaây chính íaø íí do vì sao caùc ví duï
ñaõ ñeà caäp ôû treân ñeàu coù caâu íeänh:
usi*g *a#es0ace stdN
Caâu íeänh treân ñöa khoâng gían std thaønh khoâng gían
híeän haønh. Ta coù theá truy caäp tröïc tíeáp teân haøm, íôùp
&+6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
thaønh ñöôïc ñònh nghóa beân trong thö víeän maø khoâng caàn
chæ roõ sdtii. Taát nhíeân ta coù theá chæ ñaày ñuû khoâng gían
teân neáu muoán. Ví duï chöông trình sau seõ khoâng ñöa caùc thö
víeän vaøo khoâng gían toaøn cuïc.
€€ ase e70licit stdii Auali2icatio*%
Ji*clude Kiost"ea#L
i*t #ai*?@
3
i*t valN
stdiicout KK tŠ*te" a *u#$e"i tN
stdiici* LL valN
stdiicout KK tThis is 6ou" *u#$e"i tN
stdiicout KK stdiihe7 KK valN
"etu"* UN
4
OU ñaây ci*, cout vaø haøm he7 ñöôïc chæ roõ bôûí khoâng
gían teân. Tuy nhíeân neáu chöông trình cuûa ta chöùa haøng traêm
caâu íeänh tham chíeáu ñeán teân thö víeän, khí ñoù chuyeán
khoâng gían teân std íaøm khoâng híeän haønh íaøm cho noäí dung
chöông trình ngaén goïn hôn.
Neáu ta chæ söû duïng vaøí teân trong thö víeän chuaán, ta
coù theá duøng caâu íeänh usi*g cho töøng thaønh víeân ríeâng
bíeät. Níeám thuaän tíeän cuûa phöông phaùp naøy íaø ta coù theá
söû duïng nhöõng thaønh víeân ñoù maø khoâng caàn khoâng gían
teân trong khí khoâng caàn mang toaøn boä khoâng gían teân cuûa
thö víeän thaønh khoâng gían teân híeän haønh. Ví duï:
€€ B"i*g o*l6 a 2e! *a#es i*to the glo$al *a#es0ace%
Ji*clude Kiost"ea#L
€€ gai* access to coutX ci*X a*d he7
usi*g stdiicoutN
usi*g stdiici*N
usi*g stdiihe7N
i*t #ai*?@
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &+1
3
i*t valN
cout KK tŠ*te" a *u#$e"i tN
ci* LL valN
cout KK tThis is 6ou" *u#$e"i tN
cout KK he7 KK valN
"etu"* UN
4
OU ñaây ci*, cout vaø he7 coù theá söû duïng tröïc tíeáp,
nhöng nhöõng phaàn coøn íaïí cuûa khoâng gían std vaãn khoâng
trôû thaønh khoâng gían híeän haønh.
Nhö ñaõ ñeà caäp, thö víeän C++ ñöôïc ñònh nghóa trong
khoâng gían teân toaøn cuïc, neáu ta chuyeán töø chöông trình cuõ
hôn, khí ñoù ta caàn hoaëc theâm töø khoùa usi*g *a#es0ace std
hoaëc chæ roõ tröôùc tham chíeáu moãí thaønh víeân töø stdii.
Naây íaø vaán ñeà raát quan troïng neáu ta thay theá ;ile tíeâu ñeà
cuõ vôùí ;ile tíeâu ñeà môùí. Nhôù raèng, ;ile tíeâu ñeà cuõ ñaët noäí
dung cuûa noù trong khoâng gían teân toaøn cuïc, ;ile tíeâu ñeà
môùí ñaët noäí dung cuûa noù vaøo khoâng gían teân std.
1.1-3. T>dB XBGI =>UX S=O^QM@ YBMZ
Trong moät soá tình huoáng, ta muoán söû duïng moät ñoáí
töôïng cuûa íôùp trong bíeáu thöùc bao goàm nhöõng kíeáu döõ
ííeäu khaùc. Toaùn töû taûí boäí cung caáp phöông tíeän ñeá thöïc
híeän ñíeàu naøy. Tuy nhíeân trong moät soá tröôøng hôïp ta muoán
moät chuyeán ñoáí ñôn gíaûn töø kíeáu íôùp sang kíeáu ñích. Neá
thöïc híeän ñíeàu naøy, C++ cho pheùp ta taïo ra haøm chuyeán
ñoáí. Haøm chuyeán ñoáí chuyeán kíeáu íôùp thaønh moät kíeáu
töông thích vôùí nhöõng phaàn coøn íaïí cuûa bíeáu thöùc. Daïng
toáng quaùt:
o0e"ato" t60e?@ 3 "etu"* valueN 4
&+2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
t60e íaø kíeáu ñích vaø value íaø gíaù trò cuûa íôùp sau khí
chuyeán ñoáí kíeáu. Haøm chuyeán ñoáí traû veà döõ ííeäu kíeáu
t60e, moïí kíeáu traû veà khaùc ñeàu khoâng ñöôïc pheùp thöïc
híeän. Moät haøm chuyeán ñoáí phaûí íaø thaønh víeân cuûa íôùp
ñònh nghóa noù. Haøm chuyeán ñoáí ñöôïc keá thöøa vaø noù coù
theá íaø haøm aûo.
Chöông trình söû duïng íôùp stac5 ñeá mính hoïa, gíaû söû ta
muoán söû duïng ñoáí töôïng cuûa íôùp stac5 beân trong moät
bíeáu thöùc soá nguyeân. Gíaû söû gíaù trò cuûa ñoáí töôïng kíeáu
stac5 trong bíeáu thöùc soá nguyeân íaø soá gíaù trò híeän thôøí
coù trong stac5. Coù moät caùch ñeá thöïc híeän ñíeàu naøy ñoù íaø
chuyeán ñoáí moät kíeáu stac5 sang moät soá nguyeân bíeáu díeãn
soá phaàn töû híeän coù trong stac5. Neá thöïc híeän ñíeàu naøy ta
söû duïng haøm chuyeán ñoáí coù daïng nhö sau:
o0e"ato" i*t?@ 3 "etu"* tosN 4
Chöông trình sau mính hoïa caùch íaøm víeäc cuûa haøm
chuyeán ñoáí.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
co*st i*t SI“ŠcBUUN
€€ this c"eates the class stac5
class stac5 3
i*t stc5gSI“ŠhN
i*t tosN
0u$lici
stac5?@ 3 toscUN 4
void 0ush?i*t i@N
i*t 0o0?void@N
€€co*ve"sio* o2 stac5 to i*t
o0e"ato" i*t?@3"etu"* tosN4
4N
void stac5ii0ush?i*t i@
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &+
3
i2?tosccSI“Š@ 3
cout KK tStac5 is 2ull%l*tN
"etu"*N
4
stc5gtosh c iN
tosN
4
i*t stac5ii0o0?@
3
i2?tosccU@ 3
cout KK tStac5 u*de"2lo!%l*tN
"etu"* UN
4
tos--N
"etu"* stc5gtoshN
4
i*t #ai*?@
3
stac5 stc5N
i*t iX bN
2o"?icUN iK2UN i@ stc5%0ush?i@N
b c stc5N €€ co*ve"t to i*tege"
cout KK b KK t ite#s o* stac5%l*tN
cout KK SI“Š - stc5 KK t s0aces o0e*%l*tN
"etu"* UN
4
Keát quaû híeán thò treân maøn hình nhö sau:
2U ite#s o* stac5%
RU s0aces o0e*%
Nhö ta thaáy, khí ñoáí töôïng stac5 ñöôïc söû duïng trong moät
bíeáu thöùc soá nguyeân ví duï nhö: b c stc5, haøm chuyeán ñoáí
seõ ñöôïc aùp duïng ñeán ñoáí töôïng. Trong tröôøng hôïp ñaëc bíeät
haøm chuyeán ñoáí traû veà gíaù trò 2U. Khí stc5 bò tröø bôûí SI“Š,
haøm chuyeán ñoáí cuõng ñöôïc goïí.
&+& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Sau ñaây íaø moät ví duï khaùc cuõng cuûa haøm chuyeán
ñoáí. Chöông trình seõ taïo ra moät íôùp 0!" íöu tröõ vaø tính keát
quaû cuûa soá muõ. Noù íöu tröõ keát quaû kíeáu dou$le. Baèng
caùch söû duïng haøm chuyeán ñoáí dou$le vaø traû veà keát quaû,
ta coù theá söû duïng ñoáí töôïng kíeáu 0!" trong bíeáu thöùc coù
gíaù trò khaùc íaø kíeáu dou$le.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class 0!" 3
dou$le $N
i*t eN
dou$le valN
0u$lici
0!"?dou$le $aseX i*t e70@N
0!" o0e"ato"?0!" o@ 3
dou$le $aseN
i*t e70N
$ase c $ o%$N
e70 c e o%eN
0!" te#0?$aseX e70@N
"etu"* te#0N
4
€€ co*ve"t to dou$le
o0e"ato" dou$le?@ 3 "etu"* valN 4 4N
0!"ii0!"?dou$le $aseX i*t e70@
3
$ c $aseN
e c e70N
val c BN
i2?e70ccU@ "etu"*N
2o"? N e70LUN e70--@ val c val ƒ $N
4
i*t #ai*?@
3
0!" 7?Y%UX 2@N
dou$le aN
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &+4
a c 7N €€ co*ve"t to dou$le
€€ co*ve"t 7 to dou$le a*d add BUU%2
cout KK 7 BUU%2N
cout KK tl*tN
0!" 6?9%9X 9@X 8?UX U@N
8 c 7 6N €€ *o co*ve"sio*
a c 8N €€ co*ve"t to dou$le
cout KK aN
"etu"* UN
4
Keát quaû híeán thò treân maø hình nhö sau:
BBW%2
2UT9U%T
Nhö ta thaáy, 7 ñöôïc söû duïng trong bíeáu thöùc 7BUU%2,
haøm chuyeán ñoáí ñöôïc söû duïng ñeá taïo ra moät gíaù trò
dou$le. Chuù yù raèng bíeáu thöùc 8c76 khoâng goïí haøm
chuyeán ñoáí kíeáu bôûí vì trong bíeáu thöùc chæ coù caùc ñoáí
töôïng cuûa íôùp 0!".
Thoâng thöôøng haøm chuyeán ñoáí kíeáu cung caáp moät cuù
phaùp töï nhíeân hôn ñeá söû duïng khí ñoáí töôïng cuûa moät íôùp
ñöôïc troän vôùí kíeáu döõ ííeäu noäí taïí. Naëc bíeät trong íôùp 0!"
haøm chuyeán ñoáí kíeáu íaøm cho ñoáí töôïng cuûa moät íôùp
ñöôïc söû duïng trong bíeáu thöùc toaùn hoïc thoâng thöôøng raát
deã íaäp trình vaø deã híeáu.
Ta coù theá taïo haøm chuyeán ñoáí khaùc neáu gaëp nhöõng
tình huoáng khaùc, ví duï ta coù theá ñònh nghóa haøm chuyeán
ñoáí ñeán kíeáu dou$le hoaëc lo*g. Moãí haøm naøy seõ töï ñoäng
thöïc híeän nhôø vaøo kíeáu döõ ííeäu cuûa bíeáu thöùc.
1.1-%. H>UX I=>U@= PZQC@ F>U SB@\I
Haøm thaønh víeân cuûa moät íôùp coù theá khaí baùo íaø
co*st. Thaät vaäy, nhöõng haøm naøy khoâng theá thay ñoáí bôûí
&++ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
ñoáí töôïng goïí noù. Noáí töôïng íaø co*st cuõng coù theá khoâng
goïí haøm thaønh víeân khoâng phaûí co*st. Tuy nhíeân, moät haøm
thaønh víeân íaø co*st coù theá ñöôïc goïí bôûí ñoáí töôïng hoaëc
íaø co*st hoaëc khoâng phaûí íaø co*st.
Neá chæ moät haøm thaønh víeân íaø co*st, ta söû duïng
khuoân daïng sau:
class ‹ 3
i*t so#e_va"N
0u$lici
i*t 2B?@ co*stN €€ co*st #e#$e" 2u*ctio*
4N
Nhö ta thaáy, co*st theo sau khaí baùo tham soá cuûa haøm.
Muïc ñích cuûa khaí baùo haøm thaønh víeân íaø co*st ñeá traùnh
tröôøng hôïp noù bò thay ñoáí bôûí ñoáí töôïng goïí noù. Xeùt ví duï
sau:
€ƒ
Ce#o*st"ate co*st #e#$e" 2u*ctio*s%
This 0"og"a# !o*wt co#0ile%
ƒ€
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class Ce#o 3
i*t iN
0u$lici
i*t geti?@ co*st 3
"etu"* iN €€ o5
4
void seti?i*t 7@ co*st 3
i c 7N €€ e""o"^
4
4N
i*t #ai*?@
3
Ce#o o$N
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &+7
o$%seti?BZUU@N
cout KK o$%geti?@N
"etu"* UN
4
Chöông trình sau seõ khoâng bíeân dòch bôûí vì haøm seti?@
ñöôïc khaí baùo íaø co*st. Níeàu naøy coù nghóa íaø noù khoâng
cho pheùp thay ñoáí ñoáí töôïng goïí noù. Do ta coá gaéng thay ñoáí
i neân chöông trình baùo íoãí. Ngöôïc íaïí, geti?@ khoâng thay ñoáí
gíaù trò cuûa i neân chöông trình bíeân dòch bình thöôøng.
Noâí khí ta muoán moät hoaëc nhíeàu thaønh víeân cuûa íôùp
maø haøm co*st coù theá thay ñoáí ñöôïc thaäm chí ta khoâng
muoán noù thay ñoáí caùc thaønh khaùc. Neá íaøm ñíeàu naøy, ta
söû duïng #uta$le. Thaønh víeân coù tính chaát #uta$le coù theá
ñöôïc thay ñoáí bôûí haøm thaønh víeân co*st. Ví duï:
€€ Ce#o*st"ate #uta$le%
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class Ce#o 3
#uta$le i*t iN
i*t bN
0u$lici
i*t geti?@ co*st 3
"etu"* iN €€ o5
4
void seti?i*t 7@ co*st 3
i c 7N €€ *o!X OO%
4
€ƒ The 2ollo!i*g 2u*ctio* !o*wt co#0ile%
void setb?i*t 7@ co*st 3
b c 7N €€ Still –"o*g^
4
ƒ€
4N
i*t #ai*?@
&+- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
3
Ce#o o$N
o$%seti?BZUU@N
cout KK o$%geti?@N
"etu"* UN
4
Chöông trình treân, i ñöôïc moâ taû nhö íaø #uta$le, vì vaäy
noù coù theá ñöôïc thay ñoáí bôûí haøm seti?@. Tuy nhíeân b
khoâng phaûí íaø #uta$le vaø setb?@ khoâng theá thay ñoáí gíaù
trò cuûa noù.
1.1-,. H>UX I=>U@= PZQC@ PBF>IZFQ
Haøm thaønh víeân coù theá khaí baùo íaø volatile. Neá chæ
moät haøm thaønh víeân íaø volatile ta söû duïng khuoân daïng
nhö sau:
class ‹ 3
0u$lici
void 22?i*t a@ volatileN €€ volatile #e#$e" 2u*ctio*
4N
1.1--. C>RO IDT IDLU@A XZ@=
Nhö ñaõ ñeà caäp trong chöông 12, moãí khí ta coù moät caáu
töû chæ moät tham soá, ta coù theá söû duïng o$?7@ hoaëc o$c7
ñeá khôûí gaùn ñoáí töôïng. Nguyeân nhaân íaø do baát cöù khí
naøo ta taïo ra moät caáu töû moät tham soá, ta cuõng taïo ra moät
chuyeán ñoáí töø kíeáu cuûa tham soá veà kíeáu cuûa íôùp. Tuy
nhíeân cuõng coù nhöõng tình huoáng ta khoâng muoán thöïc híeän
víeäc chuyeán ñoáí töï ñoäng naøy. Neá thöïc híeän ñíeàu naøy, C++
ñònh nghóa moät töø khoùa e70licit. Neá híeáu taùc ñoäng cuûa
noù, xeùt ví duï sau:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &+9
class #6class 3
i*t aN
0u$lici
#6class?i*t 7@ 3 a c 7N 4
i*t geta?@ 3 "etu"* aN 4
4N
i*t #ai*?@
3
€€ auto#aticall6 co*ve"ted i*to #6class?Y@
#6class o$ c YN
cout KK o$%geta?@N
"etu"* UN
4
Ví duï treân, caáu töû #6class chæ nhaän moät tham soá do
ñoù caâu íeänh #6class o$ cYN töï ñoäng chuyeán sang íôøí goïí
caáu töû #6class vôùí tham soá íaø 4.
Neáu ta khoâng muoán thöïc híeän chuyeán ñoáí naøy, ta coù
theá söû duïng töø khoùa e70licit. Töø khoùa e70licit chæ aùp
duïng cho caáu töû. Caáu töû ñöôïc vôùí töø khoùa e70licit chæ
ñöôïc söû duïng khí khôûí gaùn baèng caùch söû duïng cuù phaùp
thoâng thöôøng. Noù khoâng thöïc thí chuyeán ñoáí töï ñoäng. Ví
duï, baèng caùch khaí baùo caáu töû #6class íaø e70licit,
chuyeán ñoáí töï ñoäng seõ khoâng thöïc híeän:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class #6class 3
i*t aN
0u$lici
e70licit #6class?i*t 7@ 3 a c 7N 4
i*t geta?@ 3 "etu"* aN 4
4N
Khí ñoù caâu íeänh #6class o$?Y@N seõ thöïc híeän ñöôïc vaø
caâu íeänh #6class o$ c YN seõ baùo íoãí.
&76 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
1.1-+. !DT ]Od@A IDU _=BW> >\X
Tuy C++ íaø ngoân ngöõ toaøn díeän vaø maïnh nhöng noù
vaãn coù moät vaøí tình huoáng ñaëc bíeät maø noù khoâng theá
quaûn íí ñöôïc. Neá phuø hôïp vôùí nhöõng tình huoáng naøy, C++
cung moät cô cheá cho pheùp ta cheøn caùc maõ hôïp ngöõ moïí
íuùc, cô cheá naøy goïí íaø "trap door". Söû duïng caâu íeänh as# ta
coù theá nhuùng maõ hôïp ngöõ tröïc tíeáp vaøo trong chöông trình
cuûa mình. Maõ hôïp ngöõ naøy bíeân dòch maø khoâng coù söï
thay ñoáí naøo vaø noù seõ trôû thaønh moät phaàn cuûa maõ
chöông trình taïí ñíeám xuaát híeän as#.
Daïng toáng quaùt cuûa caâu íeänh naøy nhö sau:
as#?to0-codet@N
Trong ñoù o0-code íaø chæ thò cuûa ngoân ngöõ a,,e1bl?.
Trong moät soá trình bíeân dòch cuõng cho pheùp víeát nhö sau:
as# i*st"uctio*N
as# i*st"uctio* *e!li*e
as# 3
i*st"uctio* seAue*ce
4
i*st"uctio* íaø moïí caâu íeänh hôïp íeä trong ngoân ngöõ
a,,e1bler.
Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
as# i*t VN €€ ge*e"ate i*te"tu0t V
"etu"* UN
4
Khí chaïy treân heä ñíeàu haønh DOS, chöông trình sính ra
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &71
moät ngaét 5 noù goïí haøm ín ra maøn hình.
1.1-4. C=l JBE \Dd FZQC@ _QRI
Trong C++, ta coù theá chæ roõ moät haøm ñöôïc ííeân keát
nhö theá naøo trong chöông trình. Ngaàm ñònh, haøm ñöôïc ííeân
keát nhö íaø moät haøm cuûa C++. Tuy nhíeân, baèng caùch söû
duïng chæ roõ ííeân keát, ta coù theá chæ roõ moät haøm ñöôïc
ííeân keát theo moät kíeáu ngoân ngöõ khaùc. Daïng toáng quaùt
nhö sau:
e7te"* tla*guaget 2u*ctio*-0"otot60e
OU ñaây, la*guage ñònh nghóa moät ngoân ngöõ mong
muoán. Taát caû caùc trình bíeân dòch hoã trôï haí caùch ííeân keát
C vaø C++. Noâí khí trình bíeân dòch cuõng cho pheùp ta chæ roõ
ííeân keát cho Wortran, Sa,cal, hoaëc !a,ic. Ví duï:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
e7te"* tCt void #6C2u*c?@N
i*t #ai*?@
3
#6C2u*c?@N
"etu"* UN
4
€€ This !ill li*5 as a C 2u*ctio*%
void #6C2u*c?@
3
cout KK tThis li*5s as a C 2u*ctio*%l*tN
4
Ta coù theá chæ ra nhíeàu hôn moät haøm taïí thôøí ñíeám söû
duïng caâu íeänh e7te"*:
e7te"* tla*guaget 3
0"otot60es
4
1.1-#. V>UB J> IJQC@ X>T@A
&72 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Vaøo ra treân maûng íaø söû duïng maûng caùc kí töï nhö íaø
moät thíeát bò vaøo, ra hoaëc caû haí. Thao taùc vaøo ra treân
maûng gíoáng nhö thöïc híeän treân íuoàng. Caùc íuoàng ííeân keát
maûng caùc kí töï thöôøng ñöôïc thay theá nhö íaø íuoàng cha" ƒ.
Neá söû vaøo ra treân maûng trong chöông trình ta phaûí theâm
Kst"st"ea#L.
1.139.1. (aùc !ôù< 1a$o ra treDn /aûng
Caùc íôùp ist"st"ea#, ost"st"ea#, st"st"ea# ñöôïc söû
duïng ñeá taïo ra caùc íuoàng vaøo, ra vaø vaøo/ra töông öùng. Lôùp
ist"st"ea# ñöôïc keá thöøa töø íôùp ist"ea#, ost"st"ea# ñöôïc
keá thöøa töø ost"st"ea# vaø st"st"ea# keá thöøa töø íôùp
iost"ea#. Do ñoù caùc íôùp vaøo ra treân maûng ñöôïc keá thöøa
gíaùn tíeáp íôùp ios.
1.139.2. &aïo /oät !uoNng ra treDn /aûng
Neá thöïc híeän thao taùc ra döõ ííeäu treân maûng, ta phaûí
ííeân keát maûng ñeán íuoàng baèng caùch söû duïng caáu töû sau:
ost"st"ea# ost"?cha" ƒ$u2X st"ea#si8e si8eX o0e*#ode
#odeciosiiout@N
OU ñaây, $u2 íaø moät con troû ñeán maûng ñöôïc söû duïng
ñeá taäp hôïp caùc kí töï ñeá víeát ñeán íuoàng ost". Kích thöôùc
cuûa maûng ñöôïc gôûí ñeán tham soá si8e. Ngaàm ñònh, íuoàng
ñöôïc môû ôû daïng thoâng thöôøng, nhöng ta coù theá keát hôïp
theâm nhíeàu tuøy choïn khaùc ñeá taïo ra #ode theo yeâu caàu. Ví
duï ta coù theá theâm tuøy choïn iosiia00 ñeá thíeát íaäp íuoàng
ñöôïc boá sung thoâng tín vaøo cuoáí.
Khí ñaõ môû moät íuoàng ra treân maûng, taát caû caùc thao
taùc ra ñeàu ñaët döõ ííeäu vaøo maûng. Tuy nhíeân, caùc döõ ííeäu
khoâng víeát ra ngoaøí bíeân cuûa maûng. Neáu víeát ra bíeân
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &7
maûng, trình bíeân dòch seõ baùo íoãí. Ví duï:
Ji*clude Kst"st"ea#L
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
cha" st"gRUhN
ost"st"ea# outs?st"X si8eo2?st"@@N
outs KK tC a""a6-$ased I€O% tN
outs KK BU2Y KK he7 KK t tN
outs%set2?iosiisho!$ase@N
outs KK BUU KK w w KK ZZ%TRZ KK e*dsN
cout KK st"N €€ dis0la6 st"i*g o* co*sole
"etu"* UN
4
Keát quaû xuaát híeän treân maøn hình nhö sau:
C a""a6-$ased I€O% BU2Y U7WY ZZ%TRZ
Nhôù raèng, outs íaø moät íuoàng thoâng thöôøng, chæ khaùc
nhöõng íuoàng tröôùc ñaây ñoù íaø thíeát bò ííeân keát vôùí íuoàng
naøy íaø maûng kí töï.
Ngöôøí íaäp trình phaûí keát thuùc maûng baèng moät kí híeäu
roãng baèng haøm e*ds. Ta coù theá xaùc ñònh coù bao nhíeâu kí
töï ñöôïc víeát ra maûng baèng caùch söû duïng haøm 0cou*t?@.
Noù coù khuoân daïng nhö sau:
st"ea#si8e 0cou*t? @N
Soá kí töï traû veà bao goàm caû kí töï roãng neáu nhö noù
toàn taïí.
Chöông trình sau seõ ñeà caäp haøm 0cou*t?@, noù cho bíeát
outs chöùa 18 kí töï keá caû kí töï roãng.
Ji*clude Kst"st"ea#L
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
&7& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
i*t #ai*?@
3
cha" st"gRUhN
ost"st"ea# outs?st"X si8eo2?st"@@N
outs KK ta$cde2g tN
outs KK 2T KK t t KK RZU%29N
outs KK e*dsN €€ *ull te"#i*ate
€€dis0la6 ho! #a*6 cha"s i* outs
cout KK outs%0cou*t?@N
cout KK t t KK st"N
"etu"* UN
4
1.139.3. Q'û ;uïng /aûng +e* nhaä< ;'O !ieäu
Neá ííeân keát íuoàng nhaäp döõ ííeäu vôùí maûng, ta duøng
caáu töû:
ist"st"ea# ist"?co*st cha" ƒ$u2@N
OU ñaây, $u2 íaø con troû maûng ñöôïc söû duïng nhö íaø
nguoàn kí töï moãí íaàn nhaäp. Noäí dung trong maûng ñöôïc troû
bôûí $u2 phaûí íaø chuoãí keát thuùc roãng, tuy nhíeân kí töï roãng
naøy khoâng bao gíôø ñöôïc ñoïc töø maûng. Ví duï:
Ji*clude Kiost"ea#L
Ji*clude Kst"st"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
cha" sgh c tBU Hello U7TV Y2%T9 OOtN
ist"st"ea# i*s?s@N
i*t iN
cha" st"gRUhN
2loat 2N
€€ "eadi*gi BU Hello
i*s LL iN
i*s LL st"N
cout KK i KK t t KK st" KK e*dlN
€€ "eadi*g U7TV Y2%T9 OO
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &74
i*s LL he7 LL iN
i*s LL 2N
i*s LL st"N
cout KK he7 KK i KK t t KK 2 KK t t KK st"N
"etu"* UN
4
Neáu muoán chæ moät phaàn cuûa chuoãí ñöôïc nhaäp, ta
duøng caáu töû sau:
ist"st"ea# ist"?co*st cha" ƒ$u2X st"ea#si8e si8e@N
OU ñaây chæ coù si8e phaàn töû ñaàu tíeân ñöôïc troû bôûí
$u2 ñöôïc söû duïng. Chuoãí khoâng caàn phaûí keát thuùc roãng
bôûí vì gíaù trò cuûa si8e ñaõ xaùc ñònh kích thöôùc cuûa chuoãí.
Luoàng ííeân keát vôùí boä nhôù hoaït ñoäng gíoáng nhö ñöôïc
ííeân keát vôùí thíeát bò khaùc. Ví duï sau ñeà caäp ñeán vaán ñeà
noäí dung cuûa chuoãí vaên baûn coù theá ñöôïc ñoïc. Khí keát
thuùc maûng (gíoáng nhö keát thuùc ;ile), i*s cho gíaù trò 2alse.
€ƒ This 0"og"a# sho!s ho! to "ead the co*te*ts o2 a*6
a""a6 that co*tai*s te7t% ƒ€
Ji*clude Kiost"ea#L
Ji*clude Kst"st"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
cha" sgh c tBU%29 this is a test KKLLKK|^l*tN
ist"st"ea# i*s?s@N
cha" chN
€ƒ This !ill "ead a*d dis0la6 the co*te*ts
o2 a*6 te7t a""a6% ƒ€
i*s%u*set2?iosiis5i0!s@N €€ do*wt s5i0 s0aces
!hile ?i*s@ 3 €€ 2alse !he* e*d o2 a""a6 is "eached
i*s LL chN
cout KK chN
4
"etu"* UN
&7+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
4
1.139.#. uoNng 1a$o.ra treDn /aûng
Neá taïo moät íuoàng treân maûng coù theá thöïc híeän thao
taùc vaøo/ra, ta söû duïng haøm caáu töû st"st"ea#:
st"st"ea# iost"?cha" ƒ$u2X st"ea#si8e si8eX o0e*#ode #ode
c iosiii* ˆ iosiiout@N
OU ñaây, $u2 íaø con troû ñeán maûng chuoãí caàn thöïc híeän
thao taùc vaøo/ra, gíaù trò cuûa si8e cho bíeát kích thöôùc cuûa
maûng. Gíaù trò cuûa #ode cho bíeát íuoàng hoaït ñoäng nhö theá
naøo. Neá thíeát íaäp thao taùc vaøo ra thoâng thöôøng, #ode phaûí
íaø gíaù trò iosiii*ˆosiiout. Neá nhaäp, maûng phaûí keát thuùc
bôûí kí töï roãng. Ví duï:
€€ Pe"2o"# $oth i*0ut a*d out0ut%
Ji*clude Kiost"ea#L
Ji*clude Kst"st"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
cha" iost"gRUhN
st"st"ea# st"io?iost"X si8eo2?iost"@X iosiii* ˆ
iosiiout@N
i*t aX $N
cha" st"gRUhN
st"io KK tBU 2U testi*g tN
st"io LL a LL $ LL st"N
cout KK a KK t t KK $ KK t t KK st" KK e*dlN
"etu"* UN
4
Chöông trình naøy seõ víeát BU 2U testi*g ñeán maûng vaø
sau ñoù ñoïc ngöôïc íaïí bíeán.
1.1+/. !DT ]Od@A X>T@A YBG@A
Trong ví duï tröôùc, khí ta ííeân keát moät íuoàng ñeán maûng
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &77
xuaát döõ ííeäu, maûng vaø kích thöôùc cuûa noù phaûí ñöôïc gôûí
qua caáu töû ost"st"ea#. Phöông phaùp naøy raát toát neáu nhö ta
bíeát ñöôïc soá kí töï toáí ña maø ta caàn xuaát ra maûng. Tuy
nhíeân khí khoâng bíeát soá kí töï toáí ña, ta söû duïng daïng thöù
haí cuûa caáu töû ost"st"ea#:
ost"st"ea#?@N
Khí caáu töû naøy ñöôïc söû duïng, ost"st"ea# seõ taïo vaø
duy trì moät maûng caáp phaùp ñoäng, noù seõ töï ñoäng phaùt
tríeán ñoä daøí ñeá phuø hôïp vôùí döõ ííeäu ñaàu ra caàn íöu tröõ.
Neá truy caäp ñeán maûng caáp phaùt ñoäng ta phaûí söû duïng
haøm goïí íaø st"?@ nhö sau:
cha" ƒst"?@N
Haøm naøy traû veà moät con troû ñeán maûng, ta söû duïng
con troû naøy ñeá truy caäp maûng ñoäng nhö íaø moät chuoãí. Ta
khoâng theá söû duïng maûng naøy ñeá xuaát döõ ííeäu moät íaàn
nöõa tröø khí ta íaøm íaïí thao taùc khôûí taïo. Ví duï:
Ji*clude Kst"st"ea#L
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
cha" ƒ0N
ost"st"ea# outsN €€ d6*a#icall6 allocate a""a6
outs KK tC a""a6-$ased I€O tN
outs KK -BU KK he7 KK t tN
outs%set2?iosiisho!$ase@N
outs KK BUU KK e*dsN
0 c outs%st"?@N €€ F"ee8e d6*a#ic $u22e" a*d "etu"*
€€ 0oi*te" to it%
cout KK 0N
"etu"* UN
4
Ta coù theá söû duïng maûng ñoäng vôùí íôùp st"st"ea# ñeá
&7- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
thöïc híeän caû haí thao taùc vaøo, ra. Ta coù theá cho pheùp
maûng ñoäng coù theá ñöôïc xuaát döõ ííeäu íaïí hoaëc khoâng
baèng caùch goïí haøm 2"ee8e?@. Daïng toáng quaùt nhö sau:
void 2"ee8e?$ool actio* c t"ue@N
Neáu actio*ct"ue, maûng ñöôïc pheùp, actio*c2alse maûng
khoâng ñöôïc pheùp xuaát döõ ííeäu íaïí.
1.1+1. !DT ]Od@A P>UB J> @=a H=>C@ IJQC@ FOB?@A
]Dd> P>UB X>T@A
Nhôù raèng vaøo ra nhò phaân treân maûng coù taát caû caùc
chöùc naêng vaø khaû naêng gíoáng nhö vaøo ra thoâng thöôøng.
Do ñoù maûng ííeân keát vôùí íuoàng vaøo/ra treân maûng cuõng
chöùa caùc thoâng tín nhò phaân. Khí ñoïc moät thoâng tín nhò
phaân, ta caàn söû duïng haøm eo2?@ ñeá xaùc ñònh khí naøo keát
thuùc maûng. Ví duï sau theá caùch ñoïc maûng nhò phaân hoaëc
vaên baûn söû duïng haøm get?@.
Ji*clude Kiost"ea#L
Ji*clude Kst"st"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
cha" ƒ0 c tthis is a testlBl2l9lYlVlWlTtN
ist"st"ea# i*s?0@N
cha" chN
€€ "ead a*d dis0la6 $i*a"6 i*2o
!hile ?^i*s%eo2?@@ 3
i*s%get?ch@N
cout KK he7 KK ?i*t@ ch KK w wN
4
"etu"* UN
4
Trong ví duï naøy, gíaù trò ñöôïc ñònh daïng bôûí lBl2l9` íaø
Gh*ông 2. KhoFng gian teFn@ caùc ha'1 chu?e>n .o>i@ caùc chuû .eQ
naFng cao &79
nhöõng gíaù trò khoâng ín ra maøn hình. Neá ghí döõ ííeäu treân
maûng nhò phaân, ta söû duïng haøm 0uts?@. Neáu ta ñoïc döõ
ííeäu nhò phaân, ta phaûí söû duïng haøm "ead?@. Neá víeát döõ
ííeäu nhò phaân ta söû duïng haøm !"ite?@.
1.1+2. TBWX I>cI \Dd _=>WS @=>O AZDE> C P>U C99
Nhìn chung, C++ chuaán íaø taäp chöùa C chuaán vaø taát caû
caùc chöông trình C cuõng íaø C++. Tuy nhíeân, coù moät ít söï
khaùc bíeät. Nhöõng khaùc bíeät quan troïng nhaát ñöôïc toùm taét
ôû ñaây:
Trong C++, bíeán cuïc boä ñöôïc khaí baùo ôû moïí nôí trong
beân trong khoáí íeänh. Trong C, noù phaûí ñöôïc khaí baùo ôû ñaàu
khoáí, tröôùc moïí caâu íeänh.
Trong C++, void trong danh saùch tham soá íaø tuy choïn.
Raát nhíeàu ngöôøí íaäp trình C++ cheøn void trong danh saùch
tham soá ñeá thoâng baùo íaø haøm khoâng coù tham soá, nhöng
veà maët kó thuaät thì khoâng caàn thíeát.
Trong C++, taát caû caùc haøm phaûí ñöôïc khaí baùo
nguyeân maãu. Níeàu naøy íaø tuy choïn trong C. Tuy nhíeân, theo
kính nghíeäm íaäp trình ta neân khaí baùo nguyeân maãu trong caùc
chöông trình C.
Trong C, moät kí töï töï ñoäng naâng íeânh thaønh moät soá
nguyeân, trong C++ thì khoâng.
Trong C, ta coù theá khaí baùo bíeán toaøn cuïc nhíeàu íaàn,
trong C++ thì khoâng ñöôïc pheùp.
Trong C, ñònh danh chæ coù 31 kí töï íaø coù nghóa. Trong C+
+ taát caû caùc töø ñeàu coù nghóa. Tuy nhíeân trong thöïc teá,
ñònh danh khoâng neân ñaët quaù daøí.
&-6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Trong C, maëc duø ít söû duïng nhöng ta coù theá goïí haøm
#ai*?@ trong chöông trình. Trong C++ thì khoâng ñöôïc pheùp.
Trong C, ta khoâng theá íaáy ñòa chæ cuûa moät bíeán
"egiste", trong C++ thì ñöôïc pheùp.
Trong C, neáu khoâng chæ ra kíeáu döõ ííeäu trong khaí baùo
bíeán, kíeáu ngaàm ñònh íaø kíeáu soá nguyeân (i*t), trong C++ thì
khoâng ñöôïc.
Gh*ông 2&. (iôùi thieQu th* 3ie"n chua>n caùc lôù= 1a\u &-1
C=DL@A 2%. GZLWZ I=ZQGO I=D PZQG@
S=O>M@ S>WS FLWH X>fO
Thö víeän chuaán caùc íôùp maãu (Standard Tempíate Líbrary-
STL) íaø moät ñaët tröng môùí vaø quan troïng nhaát ñöôïc boá sung
vaøo trong nhöõng naêm gaàn ñaây. Söï boá sung cuûa STL íaø
moät trong nhöõng keát quaû chính nhaän ñöôïc trong suoát thôøí
gían chuaán hoùa C++. Noù cung caáp íôùp vaø haøm maãu ñöôïc
söû duïng cho caáu truùc döõ ííeäu vaø gíaûí thuaät, ví duï noù hoã
trôï vector, danh saùch, haøng ñôïí vaø ngaên xeáp. Bôûí vì STL
ñöôïc xaây döïng töø íôùp maãu, neân thuaät toaùn vaø caáu truùc
döõ ííeäu ñöôïc aùp duïng treân moïí kíeáu döõ ííeäu.
STL íaø moät cô cheá phaàn meàm phöùc taïp söû duïng
nhíeàu ñaët tröng phöùc taïp nhaát cuûa C++. Neá híeáu vaø söû
duïng ñöôïc STL, ta phaûí híeáu ñaày ñuû ngoân ngöõ C++ bao
goàm con troû, tham chíeáu vaø maãu.
Muïc ñích cuûa chöông naøy íaø gíôùí thíeäu toáng quan STL
bao goàm thíeát keá vaät íí, toá chöùc, caáu taïo vaø kó thuaät
íaäph trình caàn ñeá söû duïng noù. Bôûí vì STL íaø moät thö víeän
raát íôùn neân ta khoâng theá gíôùí thíeäu taát caû caùc ñaët tröng
cuûa noù ôû chöông naøy.
Chöông naøy cuõng moâ taû moät íôùp môùí quan troïng nhaát
cuûa C++, ñoù íaø íôùp stríng. Lôùp stríng ñònh nghóa kíeáu döõ
ííeäu chuoãí cho pheùp ta íaøm víeäc vôùí kíeáu kí töï gíoáng nhö íaø
nhöõng kíeáu döõ ííeäu khaùc: söû duïng toaùn töû. Lôùp stríng quan
heä gaàn guõí vôùí STL.
1.1+3. TBM@A NO>@ PQ? !TL
Maëc daàu thö víeän caùc íôùp maãu íaø raát íôùn vaø cuù
&-2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
phaùp hôn phöùc taïp, noù raát deã söû duïng neáu ta híeáu noù
ñöôïc xaây döïng nhö theá naøo.
Taïí nhaân cuûa STL coù ba ñoáí töôïng cô baûn: contaíners,
aígoríthms vaø íterators. Nhöõng ñoáí töôïng naøy íaøm víeäc vôùí
nhau ñeá cung caáp moät gíaûí phaùp cho caùc vaán ñeà íaäp trình.
1.153.1. (ontaine,r
Contaíner íaø ñoáí töôïng íöu tröõ ñoáí töôïng khaùc vaø moät
vaøí kíeáu khaùc. Ví duï íôùp vector ñònh nghóa maûng ñoäng,
deque taïo moät haøng ñôïí soá thöïc vaø ííst cung caáp moät danh
saùch tuyeán tính. Nhöõng thuøng chöùa naøy goïí íaø thuøng chöùa
chuoãí (sequence contaíner) bôûí vì trong thuaät ngöõ STL, chuoãí
íaø moät danh saùch tuyeán tính. STL cuõng ñònh nghóa moät
thuøng chöùa keát hôïp (assocíatíve contaíner) cho pheùp tìm kíeám
híeäu quaû caùc gíaù trò döïa vaøo khoùa. Ví duï map íöu tröõ moät
caëp khoùa/gíaù trò vaø cho pheùp gíaù trò ñöôïc tìm kíeám thoâng
qua khoùa.
Moãí íôùp contaíner ñònh nghóa moät taäp caùc haøm coù
theá aùp duïng treân thuøng chöùa. Ví duï moät danh saùch bao
goàm caùc haøm ínsert, deíete vaø merge. Moät íôùp stack bao
goàm caùc haøm pop vaø push.
1.153.2. b!gorith/,
Aígoríthm ñoùng vaí troø nhö íaø moät thuøng chöùa. Noù cung
caáp phöông tíeän maø ta coù theá thao taùc treân noäí dung cuûa
thuøng chöùa. Caùc phöông tíeän ñoù íaø bao goàm khôûí taïo, saép
xeáp, tìm kíeám vaø chuyeán ñoáí noäí dung cuûa thuøng chöùa.
1.153.3. Lterator
Iterator íaø moät con troû, noù cung caáp cho ta khaû naêng
quay troøn thoâng suoát noäí dung cuûa thuøng chöùa trong nhíeàu
Gh*ông 2&. (iôùi thieQu th* 3ie"n chua>n caùc lôù= 1a\u &-
caùch. Coù 5 kíeáu íterator:
Iterator Truy caäp ñöôïc pheùp
Random Access Löu tröõ vaø tìm kíeám gíaù trò.
Caùc phaàn töû coù theá truy caäp ngaãu
nhíeân.
Bídírectíonaí Löu tröõ vaø tìm kíeám gíaù trò. Dí chuyeán
ñeán tröôùc vaø sau.
Forward Löu tröõ vaø tìm kíeám gíaù trò. Chæ dí
chuyeán ñeán tröôùc.
Input Tìm kíeám nhöng khoâng íöu tröõ gíaù
trò.
Chæ dí chuyeán ñeán tröôùc.
Output Löu tröõ nhöng khoâng tìm kíeám, chæ dí
chuyeán ñeán tröôùc.
Toáng quaùt, moät boä íaëp coù khaû naêng truy caäp íôùn
hôn coù theá truy nhöõng nôí coù khaû naêng nhoû hôn. Ví duï,
forward íterator coù theá ñöôïc söû duïng trong ínput íterator
Iterator ñöôïc quaûn íí nhö íaø con troû, ta coù theá taêng
hoaëc gíaûm noù, ta coù theá aùp duïng toaùn töû *. Boä íaëp ñöôïc
khaí baùo söû duïng kíeáu íterator ñöôïc ñònh nghóa bôûí raát
nhíeàu thuøng chöùa
1.153.#. (aùc tha$nh <haNn khaùc