Sei sulla pagina 1di 471

Muc luc 1

MUC LUC
PHAN I. NGON NG LAP TRNH C.........................13
CHNG 1.TONG QUAN VE NGON NG C.............13
1.1.Nguon goc cua ngon ng C............................................13
1.2.C a ngon ng bac trung...................................................13
1.3.C a ngon ng co cau truc............................................15
1.4.Cau truc cua mot chng trnh C.....................................16
1.5.Chng trnh au ten..........................................................18
CHNG 2.BIEU THC (EPRE!!ION"......................1#
1.6.Keu d eu c s (Basc Data Type)................................19
1.7.Bo ng keu d eu c s (Modfyng the Basc Type). .19
1.8.Nnh danh (Identfer)..............................................................20
1.9.Ben (Varabe).......................................................................21
1.9.1.Khi gan gia tr cho bin.....................................................21
1.9.2.V tr khai bao bien...............................................................22
1.9..!ien cuc bo" #$ocal Variable %................................................22
1.9.&.!ien toa'n cuc #(lobal Variable%............................................2
1.10.Hang (Constant)...................................................................24
1.11.Toan t (Operator).............................................................26
1.11.1.)oan t* gan.......................................................................2+
1.11.2.)oan t* ,o hoc..................................................................2-
1.11..)oan t* t* .o"ng ta/ng0gia1...........................................2-
1.11.&.)oan t* 2uan he" 3a' logic.................................................29
1.11.4.)oan t* bit...........................................................................29
1.11.+.)oan t* 5.............................................................................6
1.11.7.)oan t* 8 3a' toan t* 9...................................................1
1.11.-.)oan t* ,i:eo;......................................................................2
1.11.9.)oan t* <au =ha>? #@%........................................................2
1.11.16.)oan t* . 3a' AB.................................................................2
1.11.11.)oan t* #% 3a' CD................................................................
1.11.12.Eo" *u tieFn cua tat ca cac =he= toan......................
1.12.Beu thc (Expresson).......................................................33
1.12.1.)h* t* tnh toan..................................................................&
1.12.2.Ghu?e>n .o>i kie>u trong bie>u th*c....................................&
1.12..HI= kie>u................................................................................4
1.12.&.Khoang trong 3a' <au ngoaJc .n....................................4
1.12.4.Viet nhanh cua =he= toan gan......................................+
1.13.Vao ra d eu c ban.....................................................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 =h1....................................&1
1.14.Cau ho trac nghem va ba tap................................46
1.1&.1.GaFu hoi traPc nghie"1........................................................&+
1.1&.2.!a'i ta"=.................................................................................&7
CHNG 3.CAU LENH (!TATE$ENT"........................%#
1.15.Kho enh............................................................................49
1.16.Beu thc............................................................................49
1.17.True va Fase trong C...........................................................50
1.18.Cau enh a chon............................................................50
1.1-.1.GaFu le"nh i;...........................................................................46
1.1-.2.Gac le"nh i; loQng nhau.........................................................41
1.1-..Gac le"nh i;Ael,eAi; lieFn tuc.................................................42
1.1-.&.)oan t* 5.............................................................................4
1.1-.4.$e"nh ,Ritch...........................................................................4
1.1-.+.$e"nh ,Ritch loQng nhau.........................................................47
1.19.Lenh ap.............................................................................57
1.19.1.$e"nh laJ= ;or.........................................................................47
1.19.2.!ien .o>i cua 3o'ng laJ= ;or...............................................49
1.19..Vo'ng laJ= Rhile.....................................................................+6
1.19.&.Vo'ng laJ= <oARihle................................................................+1
1.20.Lenh nhay..........................................................................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.Cau ho trac nghem va ba tap................................66
1.21.1. GaFu hoi traPc nghie"1.......................................................++
1.21.2.!a'i ta"=.................................................................................+-
CHNG %.$A&NG VA' CHUO(I (ARRA) * !TRING".....+3
1.22.Kha nem...........................................................................73
1.23.Mang mot cheu...............................................................73
1.24.Phat snh mot ben con tro en mang........................75
1.25.G mang mot cheu en ham....................................75
1.26.Chuo ket thuc rong (nu-termnated strng).................76
1.27.Mang ha cheu...................................................................77
1.28.Truy cap mang thong qua con tro.................................80
1.29.Kh gan mot mang.......................................................81
1.29.1.Khi gan 1ang 1o"t chieQu..............................................-1
1.29.2.Khi gan 1ang hai chieQu.................................................-2
Muc luc
1.29..Khi gan 1ang khoFng kch th*c..................................-
1.30.Chng trnh game caro n gan.......................................83
1.31.Cau ho trac nghem va ba tap................................86
1.1.1.GaFu hoi traPc nghie"1........................................................-+
1.1.2.!a'i ta"=.................................................................................-7
CHNG ,.CON TRO& (POINTER".................................#1
1.32.Kha nem con tro.............................................................91
1.33.Ben con tro.......................................................................91
1.34.Toan t tren con tro.......................................................92
1.35.Beu thc con tro.............................................................93
1.4.1.She= toan gan...................................................................9
1.4.2.)oan t* ,o hoc treFn con tro...........................................9&
1.4..To ,anh con tro...................................................................9&
1.36.Con tro va mang..............................................................96
1.37.Mang cac con tro.............................................................96
1.38.Tro gan tep.....................................................................97
1.39. Kh gan con tro.............................................................98
1.40.Con tro ham.......................................................................98
1.41.Cap phat bo nh ong...............................................101
1.&1.1.Ga= =hat bo" nh baUng ha'1 1alloc#%.........................161
1.&1.2.(iai =hong bo" nh baUng ha'1 ;ree#%...........................161
1.42.Mot so van e v con tro.........................................101
1.&2.1.Vac .nh con tro tr*c khi ,* <ung..............................161
1.&2.2.KhoFng neFn gan gia tr cu the> cho con tro................162
1.&2..(ia tr con tro tha? .o>i...................................................16
1.43.Cau ho trac nghem va ba tap..............................103
1.&.1.GaFu hoi traPc nghie"1......................................................16
1.&.2.!a'i ta"=...............................................................................164
CHNG -.HA'$ (.UNCTION"...................................1/+
1.44.Dang tong quat cua mot ham...................................107
1.45.Cac uat pham v cua ham..........................................107
1.46.Tham so cua ham..........................................................108
1.&+.1. (oi ha'1 theo tha1 tr 3a' theo tha1 chieu..................16-
1.&+.2.(i 1ang .en ha'1........................................................169
1.47.Tham so trong ham man.................................................110
1.48.Cau enh return................................................................111
1.49.Ne quy...............................................................................112
& MgoFn ng*N la"= trLnh G0GOO
1.50.Kha bao danh sach tham so co o da ben o...113
1.51.Cau ho trac nghem va ba tap..............................114
1.41.1.GaFu hoi traPc nghie"1......................................................11&
1.41.2.!a'i ta"=...............................................................................114
CHNG +.0IEU !TRUCTURE!1 UNION1 ENU$ERATE VA'
U!ER23E.INE ...........................................................11+
1.52.Cau truc...........................................................................117
1.42.1.Mang cau truc..................................................................11-
1.42.2.(i cau truc .en 1o"t ha'1.........................................119
1.42..Gon tro cau truc...............................................................119
1.42.&.Mang 3a' cau truc beFn trong cau truc.......................121
1.42.4.)r*'ng bit............................................................................122
1.53.Keu unons........................................................................122
1.54.Keu et ke (Enumeraton).............................................125
1.55.Dung toan t szeof e am bao tnh kha chuyen
.....................................................................................................127
1.56.Keu do ng dung nh ngha....................................128
1.57.Cau ho trac nghem va ba tap..............................128
1.47.1.GaFu hoi traPc nghie"1......................................................12-
1.47.2.!a'i ta"=...............................................................................12-
CHNG 4.VA'O5 RA 3 LIEU TREN CON!OLE.....133
1.58.Noc va vet mot k t....................................................133
1.4-.1.Mo"t 3an .eQ 3i ha'1 getchar........................................1&
1.4-.2.!ien the> cua ha'1 getchar#%...........................................1&
1.59.Noc va vet chuo..........................................................135
1.60.Ham prntf .........................................................................136
1.61.Ham scanf..........................................................................137
CHNG #.6O7C5GHI 3 LIEU TREN .ILE..............1%1
1.62.Luong va fe....................................................................141
1.+2.1.$uoQng #,trea1%....................................................................1&1
1.+2.2.Wile.........................................................................................1&1
1.63.Cac ham c s cua he thong fe..............................142
1.64.fread va fwrte...................................................................145
1.65.fseek va truy cap ngau nhen......................................145
1.66.fprntf() va fscanf().............................................................145
1.67.Luong chuan....................................................................145
CHNG 1/.TIEN & L) VA' CHU TH8CH...........1%+
Muc luc 4
1.68.#defne................................................................................147
1.+-.1.Enh nghXa Macro giong ha'1...........................................1&9
1.69.#error..................................................................................150
1.70.#ncude..............................................................................150
1.71.Ch th ben dch co eu ken..................................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.defned.................................................................................155
1.74.#ne....................................................................................156
1.75.Toan t ten x y # va ##......................................156
1.76.Cac macro nh ngha trc...........................................157
1.77.Chu thch trong C chuan..................................................158
PHAN II. NGON NG LAP TRNH C99..................1-1
CHNG 11.TONG QUAN VE NGON NG LAP
TRNH C99...............................................................1-1
1.78.Nguon goc cua C++......................................................161
1.79.Kha nem ap trnh hng o tng.........................162
1.79.1.!ao goi #enca=,ualation%....................................................1+
1.79.2.Ea hLnh #=ol?1or=hi,1%........................................................1+
1.79..Ke th*'a #inheritance%.........................................................1+&
1.80.Va van e c ban C++................................................164
1.-6.1.Mo"t 3 <u ch*ng trLnh GOO...............................................1+&
1.-6.2.Mo"t cac nhLn gaQn guNi hn 3eQ thao tac 3a'o ra...........1+7
1.-6..Khai bao bien cuc bo"......................................................1+7
1.-6.&.Kie>u <*N lie"u bool..............................................................1+-
1.81.Mo hnh cu so v mo hnh hen a...........................168
1.-1.1.)ieFu .eQ trong GOO.............................................................1+9
1.-1.2.KhoFng gian teFn..................................................................176
1.-1..$a'1 3ie"c 3i trLnh bieFn <ch cuN...................................176
1.82.G theu p trong C++...............................................170
1.83.Ham ta bo (Functon Overoadng)...............................175
1.84.Toan t ta bo (Operator Overoadng)........................176
1.85.Ke tha.............................................................................177
1.86.Cau t va huy t (contructor, destructor)..................181
1.87.T khoa trong C++..........................................................185
1.88.Dang tong quat cua mot chng trnh C++...............186
+ MgoFn ng*N la"= trLnh G0GOO
CHNG 12.LP VA' 6O:I T7NG (CLA!! AN3
OB;ECT"....................................................................14+
1.89.Lp.....................................................................................187
1.90.S en quan ga p va o tng...........................188
1.91.S en quan cua tap hp va p...............................190
1.91.1.K= naJc <anh #anon?1ou, union,%....................................191
1.92.Ham than then..............................................................192
1.93.Lp than then................................................................194
1.94.Ham Inne..........................................................................195
1.9&.1.Enh nghXa ha'1 Znline trong 1o"t l=.............................19+
1.95.Cau t co tham so........................................................197
1.94.1.Gau t* 1o"t tha1 ,o.......................................................199
1.96.Thanh ven tnh cua mot 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 nao mot cau t va huy t thc hen?.............204
1.98.Toan t phan ga pham v..........................................206
1.99.Lp ong nhau..................................................................206
1.100.Lp cuc bo.....................................................................207
1.101.G mot o tng en ham....................................207
1.102.Tra ve mot o tng.................................................209
1.103.Gan mot o tng......................................................210
CHNG 13.$A&NG1 CON TRO&1 THA$ CHIE:U VA'
TOAN T& CA:P PHAT BO NH 6ONG.............213
1.104.Mang cac o tng.....................................................213
1.16&.1.)ao 1o"t 1ang co khi tao 3a' khoFng.....................214
1.105.Con tro o tng..........................................................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 .en kie>u <a\n ]uat.........................................226
1.164.&.Gon tro .en tha'nh 3ieFn cua l=...............................222
1.106.Tham cheu......................................................................225
1.16+.1.)ha1 chieu .en tha1 ,o...............................................224
1.16+.2.(i tha1 chieu <en .oi t*ng....................................22-
1.16+..)ra 3eQ 1o"t tha1 chieu................................................26
1.16+.&.)ha1 chieu .o"c la"=.......................................................26
1.16+.4.)ha1 chieu .en 1o"t kie>u <a\n ]uat.........................21
1.16+.+.Kan che cua tha1 chieu...............................................22
Muc luc 7
1.107.Toan t cap phat ong.............................................232
1.167.1.Khi gan cho bo" nh .aN ca= =hat..........................2&
1.167.2.Ga= =hat 1ang..............................................................24
1.167..Ga= =ha= cho .oi t*ng................................................24
1.167.&.MothroR...............................................................................2&6
1.167.4.[ang ,aP= ]e= cua neR 3a' <elete................................2&1
CHNG 1%.HA'$ TA&I BOI1 CA:U T& !AO CHEP
VA' THA$ !O: NGA$ 6<NH...................................2%3
1.108.Ham ta bo..................................................................243
1.109.Ta bo ham cau t...................................................244
1.169.1.)ai bo"i ha'1 cau t* .e> ch*ng trLnh 1eQ1 <eo.....2&4
1.169.2.Gho =he= khi gan 3a' khoFng 1o"t .oi t*ng.........2&+
1.110.Cau t sao chep...........................................................248
1.111.Tm a ch cua mot ham ta bo...........................252
1.112.T khoa overoad...........................................................253
1.113.Tham so ham ngam nh............................................254
1.11.1.)ha1 ,o ngaQ1 .nh ,o 3i tai bo"i.............................24-
1.114.Ham ta bo va s nhap nhang..............................259
CHNG 1,.TOAN T& TA&I BOI...........................2-3
1.115.Tao mot ham toan t thanh ven..........................263
1.114.1.)ao 1o"t <ang tieQn to 3a' ha"u to cua toan t* ta/ng@
gia1...............................................................................................2+7
1.114.2.)ai bo"i treFn toan t* 3iet taPt....................................2+-
1.114..Kan che cua toan t* tai bo"i.....................................2+9
1.116.Toan t ta bo s dung ham than then............269
1.11+.1.T* <ung ;rien< .e> tai bo"i OO 3a' AA............................271
1.11+.2.Ka'1 toan t* thaFn thie"n bo> ,ung tnh 1eQ1 <eo...27
1.117.Ta bo tren toan t new va deete.........................275
1.117.1.)ai bo"i toan t* neR 3a' <etele cho 1ang.................2-6
1.117.2.)ai bo"i =hieFn ban nothroR cua neR 3a' <elete.........2-2
1.118.Ta bo mot va toan t ac bet.........................283
1.11-.1.)ai bo"i treFn CD.................................................................2-
1.11-.2.)ai bo"i treFn #%.................................................................2-7
1.11-..)ai bo"i treFn AB...............................................................2--
1.11-.&.)ai bo"i treFn toan t* <au =ha>?................................2-9
CHNG 1-.0E: TH'A............................................2#3
1.119.Neu khen truy cap p c s...................................293
1.120.Thanh ven protected va ke tha 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 tha nheu p c s............................................300
1.122.Cau t, huy t va ke tha.....................................301
1.122.1.Khi na'o ha'1 cau t* 3a' hu? t* .*c th*c thi........61
1.122.2. (i tha1 ,o .en cau t* cua l= c ,.................6&
1.123.Cho phep truy cap.........................................................308
1.124.Lp c s ao.................................................................310
CHNG 1+.HA'$ A&O VA' 6A HNH.......................31+
1.125.Ham ao..........................................................................317
1.124.1.(oi ha'1 ao thoFng 2ua tha1 chieu l= c ,..........19
1.126.Ke tha mot thuoc tnh ao.......................................321
1.127.Cac ham ao c phan cap.....................................322
1.128.Ham ao thuan tuy......................................................324
1.12-.1.$= tr*'u t*ng................................................................2+
1.129.S dung ham ao..........................................................326
1.130.Len ket sm va tre..................................................329
CHNG 14.LP $A(U (TE$PLATE"........................331
1.131.Ham chung......................................................................331
1.11.1.Mo"t ha'1 3i hai kie>u chung........................................
1.11.2.)ai bo"i treFn ha'1 chung...............................................
1.11..)ai bo"i treFn ha'1 1a\u................................................4
1.11.&.T* <ung tha1 ,o chua>n 3i ha'1 1a\u....................+
1.11.4.Kan che cua ha'1 chung...............................................7
1.132.Ung dung cua ham chung..........................................338
1.12.1.TaP= ]e= chung.................................................................-
1.12.2.^ut gon 1o"t 1ang........................................................9
1.133.Lp chung........................................................................341
1.1.1.Mo"t 3 <u 3i hai kie>u <*N lie"u chung.........................&&
1.1.2._Ing <ung cua l= 1a\u` l= 1ang chung...............&4
1.1..T* <ung tha1 ,o khoFng .nh kie>u 3i l= chung...&+
1.1.&.T* <ung tha1 ,o ngaQ1 .nh 3i l= 1a\u..............&-
1.1.4.$= .aJc bie"t roN ra'ng..................................................46
1.134.T khoa typename va export.......................................351
1.135.Sc manh cua p mau.............................................352
CHNG 1#.QUA&N L) NGOA7I LE.........................3,3
1.136.C ban ve quan y ngoa e.....................................353
1.1+.1.MaP1 baPt 1o"t kie>u l=................................................49
1.1+.2.T* <ung nhieQu le"nh catch.............................................+6
1.137.Ouan y ngoa e p dan xuat...............................362
Muc luc 9
1.138.Tuy ben quan y ngoa e........................................363
1.1-.1.!aPt tat ca cac ngoai le"..............................................+
1.1-.2.Kan che cua ngoai le"...................................................+4
1.1-..Me1 lai 1o"t ngoai le"....................................................+7
1.139.Tm heu termnate() va unexpected()...........................368
1.19.1.)hiet la"= 2uan l? ter1inate 3a' une]=ecte<...............+-
1.140.Ham uncaught_expecton()..............................................370
1.141.Ung dung cua quan y ngoa e..............................370
CHNG 2/.HE THO:NG VA'O5RA TRONG C99........3+3
1.142.So sanh phen ban cu va hen a.........................373
1.143.Cac uong trong C++.....................................................373
1.144.Lp cac uong...............................................................374
1.1&&.1.$uoQng .nh nghXa tr*c..................................................74
1.145.Vao ra co khuon dang.................................................376
1.1&4.1.Enh <ang baUng cach ,* <ung tha'nh 3ieFn cua l=
io,.....................................................................................................7+
1.1&4.2.)hiet la"= c' .nh <ang.................................................7-
1.1&4..Voa c' .nh <ang...........................................................79
1.1&4.&.Mo"t <ang tai bo"i cua ,et;#%..........................................79
1.1&4.4.MghieFn c*u c' .nh <ang.............................................-1
1.1&4.+.)hiet la"= tat ca cac c'.............................................-2
1.1&4.7.T* <ung Ri<th#%@ =reci,ion#%@ ;ill#%.....................................-
1.1&4.-.T* <ung 1ani=ulator .e> .nh <ang 3a'o0ra#.ang ,*a%
.........................................................................................................-4
1.146.Ta bo << va >>.........................................................389
1.1&+.1.)* tao ra ha'1 che'n........................................................-9
1.1&+.2.)* tao ha'1 ]uat............................................................9&
1.147.Tao mot ham manpuator............................................396
CHNG 21.HE THO:NG VA'O RA TREN .ILE.........%/1
1.148.<fstream> va cac p tren fe...................................401
1.149.M va ong mot fe...................................................401
1.150.Noc va vet tren fe van ban...................................404
1.151.Vao ra tren fe khong nh dang va nh phan.......407
1.141.1.K t* ,o 3i b?te................................................................&67
1.141.2.=ut#% 3a' get#%.....................................................................&6-
1.141..rea<#% 3a' Rrite#%................................................................&69
1.141.&.Gac ha'1 get#%..................................................................&12
1.141.4.getline#%...............................................................................&1
1.152.Phat hen EOF................................................................414
1.153.Ham gnore()....................................................................416
16 MgoFn ng*N la"= trLnh G0GOO
1.154.peek() va putback().........................................................417
1.155.fush()................................................................................418
1.156.Truy cap ngau nhen....................................................418
1.14+.1.Mha"n 3 tr hie"n ha'nh cua ;ile......................................&22
1.157.Cac trang tha vao ra..................................................422
1.158.Tuy ben vao ra va fe...............................................425
CHNG 22.0IEU TA7I 6IE$ TH7C THI VA' EP 0IEU
................................................................................%2#
1.159.Nnh danh keu ta th em thc th........................429
1.149.1._Ing <ung .n gian cua ^))Z........................................&4
1.149.2._Ing <ung toan t* t?=ei< .en l= 1a\u....................&7
1.160.Toan t ep keu..........................................................438
1.1+6.1.<?na1icaca,t......................................................................&-
1.1+6.2.)ha? the t?=ei< 3i <?na1icaca,t...................................&&2
1.1+6..T* <ung <?na1icaca,t 3i l= 1a\u............................&&4
1.1+6.&.con,taca,t...........................................................................&&+
1.1+6.4.,taticaca,t...........................................................................&&-
1.1+6.+.reinter=retaca,t...................................................................&&9
CHNG 23.0HONG GIAN TEN1 CAC HA'$ CHU)EN
6OI1 CAC CHU& 6E NANG CAO...........................%,1
1.161.Khong gan ten...............................................................451
1.1+1.1.G ban 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'? chon treFn khoFng gian teFn.....................&47
1.162.Khong gan ten std.........................................................459
1.163.Tao mot ham chuyen o..........................................461
1.164.Ham thanh ven a const............................................465
1.165.Ham thanh ven voate...............................................468
1.166.Cau t tng mnh.......................................................468
1.167.S dung t khoa asm..................................................470
1.168.Ch ro s en ket.......................................................471
1.169.Vao ra tren mang.........................................................471
1.1+9.1.Gac l= 3a'o ra treFn 1ang..........................................&72
1.1+9.2.)ao 1o"t luoQng ra treFn 1ang.......................................&72
1.1+9..T* <ung 1ang .e> nha"= <*N lie"u...............................&7&
1.1+9.&.$uoQng 3a'o0ra treFn 1ang .............................................&7+
1.170.S dung mang ong....................................................476
Muc luc 11
1.171.S dung vao ra nh phan tren uong da vao mang
.....................................................................................................478
1.172.Tom tat s khac nhau ga C va C++.....................479
CHNG 2%.GII THIEU TH VIEN CHUAN CAC
LP $A(U..............................................................%41
1.173.Tong quan ve STL..........................................................481
1.17.1.Gontaine,r...........................................................................&-2
1.17.2.blgorith1,...........................................................................&-2
1.17..Zterator................................................................................&-2
1.17.&.Gac tha'nh =haQn khac...................................................&-
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
Ngon ng ap trnh C c phat mnh va ca at an
au ten b [enni, ^itchie va c s dung trong he eu
hanh Lnux. C a ket qua cua mot qua trnh phat tren bat
au bang ngon ng B (c phat mnh b Ken )ho1=,on).
T ngon ng B a phat tren ngon ng C vao nam 1970.
He nam 1983, thanh ap mot uy ban e tao ra chuan
ANSI (b1erican Mational Ttan<ar<, Zntitute) nh ngha ngon ng
C. Oua trnh teu chuan hoa mat 6 nam. Chuan ANSI C a
c chap nhan vao thang 12 nam 1989. Teu chuan nay
cung c to chc teu chuan quoc te (ISO) chap nhan
va c go a C chuan. Ngay nay, tat ca cac trnh ben
dch ngon ng C/C++ eu tuan theo C chuan.
1.2. C F>U @ABC@ @ADE V>GS IJO@A
C thng c go a ngon ng may bac trung. Neu
nay khong co ngha a C t manh, va kho s dung hoac t
phat tren hn cac ngon ng bac cao nh a Basc hoac
Pasca. C co y tng nh a mot ngon ng bac trung b v
no tch hp tot nhat cac thanh phan cua ngon ng bac
cao ket hp v tnh mem deo cua ngon ng cap thap.
C cho phep ap trnh v bit, b?te va a ch. Ma nguon
cua ngon ng C cung tng thch v nheu chng trnh
dch, nheu he eu hanh khac nhau. V du ta co the de
1& ShaQn Z. MgoFn ng*N la"= trLnh G
dang chuyen o mot chng trnh C vet tren he eu
hanh DOS sang mot chng trnh C thc th tren 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"
Bng 1-1% &' t"( c)a C t"o*g th+ gi,i *g-* *g. l/0 t"1*h
Tat ca cac ngon ng ap trnh bac cao eu ho tr
kha nem keu d eu. Keu d eu nh ngha cac tap
ga tr ma mot ben co the u tr va tap cac phep
toan co the thao tac tren ga tr o. Keu d eu c ban
nhat a so nguyen, k t va so thc. Mac du C co nam
keu d eu c ban, nhng no khong pha a mot ngon
ng nh keu manh nh a Pasca. C cho phep chuyen o
qua a ga cac keu d eu v nhau. V du ta co the
tron an keu k t va keu so trong mot beu thc.
Khong gong nh ngon ng bac cao, C khong kem tra
cac o th gan thc th. V du C khong kem tra xem cac
ben cua mang co tran hay khong. Cac keu kem tra nay
a trach nhem cua ng ap trnh.
C khong yeu cau tng thch d eu chat che ga
o so va tham so. No v ngon ng bac cao yeu cau
Gh*ng 1. )o>ng 2uan 3eQ ngoFn ng*N G
14
keu d eu cua tham so pha cung keu d eu v o
so. C cho phep mot tham so co the co keu d eu bat
k, no co the chuyen o mot cach hp y sang keu cua
o so.
C cho phep thao tac trc tep tren bit, b?te, Ror< va con
tro, eu nay am cho C tng ng tot v ap trnh he
thong.
C co 32 t khoa (27 t chuan cua ^itchie va 5 c
bo sung t chuan ANSI) trong kh cac ngon ng ap trnh
bac cao co nheu t khoa hn v du v ngon ng BASIC
co khoang 100 t khoa.
1.3. C F>U @ABC@ @ADE SBW S>RO IJOWS
Nac trng chnh e phan bet ngon ng co cau truc
a ma nguon va d eu cha thanh ngan. No a kha
nang cha, an dau thong tn va cau enh cua chng trnh
e thc th mot tac vu ac bet nao o. Mot cach e
thc hen cha ngan o a dung chng trnh con co s
dung ben cuc bo. Bang cach s dung ben cuc bo, ta co
the vet chng trnh con v vay nhng s ken phat snh
ben trong chng trnh con nay khong co tac ong en cac
phan khac cua chng trnh. Kha nang nay cho phep chng
trnh de dang cha se cac oan ma trong chng trnh. Neu
phat tren mot ham co cha ngan, ta ch can bet ham
o am g, khong can bet ham o am nh the nao. Nh
rang, neu am dung qua nheu ben toan cuc se phat snh
nhng o khong mong muon.
Ngon ng ap trnh co cau truc cung cap kha nang
ap trnh a dang. No ho tr trc tep trong mot va cau
1+ ShaQn Z. MgoFn ng*N la"= trLnh G
truc ap: do-!hile, !hile, 2o". Trong ngon ng cau truc,
cam hoac han che s dung toan t goto.
Thanh phan co cau truc chnh cua C a ham, o a
chng trnh con oc ap cua C. Trong C, ham c xay dng
thanh mot kho. Ham c nh ngha va vet ma reng
e phuc vu mot nhem vu reng, v vay chng trnh c
cha nho thanh cac chng trnh khac oc ap. Sau kh tao
mot ham ta co the da vao o e am vec v nheu
tnh huong ma khong tac ong en nhng phan khac
cua chng trnh.
Mot cach khac e cau truc va cha ngan ma trong C
a dung kho enh. Kho enh trong C c at ga cap
dau ngoac nhon 34.
1.%. C>RO IJOWS SOT> XBGI S=DL@A IJK@= C
Ngon ng C co tat ca 32 t khoa. 27 t khoa c
nh ngha b phen ban goc, 5 t khoa c nh ngha
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
Bng 1-2. 92 t: 5h;a <'*h *gh=a t"o*g C chu>*
Tat ca cac t khoa cua C eu a ch thng,
khong nen s dung t khoa cho muc ch khac trong chng
trnh.
Gh*ng 1. )o>ng 2uan 3eQ ngoFn ng*N G
17
Mot chng trnh C bao gom mot hoac nheu ham.
Ham #ai*?@ uon c kha bao trong tat ca cac chng
trnh, o a ham au ten c go kh chng trnh bat au
thc th. Dang tong quat cua mot chng trnh C nh hnh 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
Hnh 1-3. CD*g tE*g AuFt c)a #Gt chHI*g t"1*h C%
Rat nheu chng trnh cha trong mot ;ile nguon. Tuy
nhen, kh chng trnh qua n, eu nay se ton nheu th
gan ben dch. T o, chng trnh C cho phep cha trong
nheu ;ile khac nhau va ap trnh ven co the ben dch
tng ;ile reng bet. Nem thuan ten cua ben dch reng
bet o a kh ta thay o ma nguon cua mot ;ile ta khong
1- ShaQn Z. MgoFn ng*N la"= trLnh G
pha ben dch a toan bo chng trnh.
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 dong au ten cua chng trnh kha bao th ven
chuan cua C, muc ch e than ham #ai*?@ s dung cac
enh 0"i*t2?@, getch?@. Dong th ba kha bao ham #ai*?@,
ay a em bat au cua chng trnh C. tat ca cac
chng trnh trong C eu bat au t em nay. Lenh
0"i*t2?@ n chuo van ban ra man hnh, enh getch?@ dng
chng trnh ng dung bam mot phm bat k e ket
thuc chng trnh.
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 keu d eu c s trong C, o a k t ?cha"@,
keu so nguyen ?i*t@, keu so thc dau phay ong ?2loat,
dou$le@ va keu d eu khong ga tr ?void@. Tat ca cac
keu d eu khac trong C eu da vao 5 keu d eu
nay. Kch thc va pham v cua cac keu nay phu thuoc
vao keu v x y va trnh ben dch. Tuy nhen trong tat
ca cac trng hp mot k t a 1 b?te. Kch thc cua mot
so nguyen phu thuoc vao o da t may. No v mo
trng 16 bit th so nguyen a 16 bit, o v mo trng 32
bit th so nguyen a 32 bit. Dang chnh xac cua mot so thc
dau phay ong phu thuoc vao s thet ap cua ap trnh
ven.
Keu void hoac a e kha bao ro rang mot ham
khong tra ve ga tr hoac e tao mot con tro tong quat.
1.+. BBM @ADE _ZQMO ]DE FZQGO SL \LT ($B]Z`^Z@A
I=Q B>\ZS T^HQ"
Ngoa tr keu void, tat ca cac keu d eu con a
eu co the co bo ng. S dung bo ng thay the y
ngha cua cua keu d eu c s e ap ng cac tnh
huong chnh xac hn. Co 4 bo ng sau: sig*ed, u*sig*ed,
lo*g, sho"t.
Bang sau et ke cac keu d eu cung 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*
Bng 2-1. CFc 5iPu d. li[u <H\c <'*h *gh=a $]i C chu>*
S khac nhau ga so nguyen co dau va khong dau
phu thuoc vao bit cao nhat cua so nh phan beu den so
nguyen o. Neu bit cao nhat =0 so nguyen dng, ngc a.
1.4. 6a@= ]>@= (I]Q@IZ`ZQJ"
Trong C, ten cua ben, ham, nhan hoac o tng do
ng dung at go a nh danh. Nnh danh bao gom nheu
k t ghep a, k t au ten pha a mot ch ca hoac a
mot dau gach no, cac k t tep theo pha a mot k t
so, ch ca hoac dau gach no. Mot so nh danh hp e
va khong hp e.
Hp e Khong hp 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 bat k, tuy nhen
khong pha tat ca cac t eu co ngha. Neu nh danh
dung e x y cac en ket ben ngoa, ch co 6 k t
au ten co ngha. Nnh danh nay go a nh danh ben
ngoa, bao gom ten ham, ben toan cuc cha se ga cac
;ile. Keu nh danh ben trong bao gom ten ham, ben, .
trong mot chng trnh. Keu nh danh nay co 31 k t co
ngha. Nnh danh cua o tng co phan bet ch hoa va
ch thng. COaNT, Cou*t va cou*t a ba nh danh phan
bet. Nnh danh khong c trung v t khoa va khong
trung ten v cac ham trong th ven chuan.
1.#. BZQR@ (V>JZ>VFQ"
Ben a mot v tr co ten trong bo nh c s dung
e g mot ga tr va co the thay o b chng trnh.
Tat ca cac ben pha c kha bao trc kh s dung.
Dang tong quat cua mot kha bao ben nh sau:
t60e va"ia$le_listN
Kha bao tren t60e pha a mot keu d eu hp e,
va"ia$le_list bao gom mot hoac nheu ten nh danh phan
bet b dau phay. V du mot va cach kha bao.
i*t iXbXlN
sho"t i*t siN
u*sig*ed i*t uiN
dou$le $ala*ceX 0"o2itX lossN
1.9.1. Khi gan gia tr cho bin
Cu phap:
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 bao bien
Ben c kha bao ta ba v tr: ben trong ham hoac
kho enh (ben cuc bo), trong nh ngha tham so ham
(tham so hnh thc) va ben ngoa cua tat ca cac ham
(ben toan cuc).
1.9.3. Bien cuc bo (oca! Variab!e "
La ben c kha bao ben trong ham hoac trong kho
enh. Ben cuc bo ch c tham cheu b nhng cau
enh ben trong ham (kho), cu the a ben trong kho enh
kha bao no. Ben cuc bo ch ton ta trong kho kha bao
no va no se t ong huy kh chng trnh thoat kho ham
hoac kho enh. Ben cuc bo pha c kha bao au 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
Ben s tren a ben cuc bo c kha bao trong kho
enh i2 va no ch c s dung trong kho enh i2. Cac
tham cheu ngoa kho enh nay (mac dau van con trong
ham) khong hp e.
Gh*ng 2. !ie>u th*c #H]=re,,ion% 2
Nem thuan cua kha bao ben cuc bo a bo nh
cua ben ch c cap phat kh can. Kha bao ben ben
trong ma enh gup ngan chan nhng tac ong khong
mong muon. Ta co the kh tao ga tr cho ben ta uc kha
bao. 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
Chng trnh tren se n ra man hnh 10 so 100, y do cau
enh b se khong co tac dung b kh go ham 2, b uon
c kh gan ga tr a 100.
1.9.#. Bien toa$n cuc (%!oba! Variab!e"
Ben toan cuc c s dung trong toan bo chng trnh.
Ben toan cuc se u tr ga tr suot chng trnh. Ta co
the kha bao ben toan cuc bang cach kha bao ben ben
ngoa tat ca cac ham. Mo beu thc eu co the truy
cap en ben nay. 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 ham #ai* va ham 2u*cB eu kha bao ben cou*t
va ca ha ham nay eu s dung no. Tuy nhen ham 2u*c2
kha bao mot ben cuc bo cou*t. Neu ben toan cuc va
cuc bo co cung ten, mo thao tac se thc hen tren ben
cuc bo va khong co tac ong nao tren ben toan cuc.
S dung ben toan cuc trong trng hp nheu ham
trong chng trnh s dung chung d eu. Tuy nhen ta tranh
dung ben toan cuc trong trng hp khong can thet b
v trnh ben dch se danh bo nh trong suot qua trnh thc
th cho ben toan cuc va s dung ben toan cuc am mat
tnh tong quat cua chng trnh. Hn na, s dung ben
toan cuc se am chng trnh thng gap o b v co tac
ong khong bet hoac khong mong muon en no.
1.1/. H>b@A (CB@\I>@I"
Hang a mot ga tr co nh ma chng trnh khong
Gh*ng 2. !ie>u th*c #H]=re,,ion% 24
the thay o c. Hang co the a keu d eu c s bat
k.
Hang k t c at ga cap dau nhay n v du dad%
Hang so nguyen a cac so nguyen thong thng nh
100, -10, . hang so nguyen co the vet d dang so he
16 hoac he 8. V du U7BU a so 10 he 16 (16) , UBU a so
10 he so 8 (8).
Kh vet ga tr cua mot hang, keu d eu nho nhat
se cha ga tr o. Tuy nhen o v so thc th hang so
thc bao g cung co keu dou$le.
Ne ch nh keu d eu cho hang ta them sau ga tr
o mot k t mo ta keu d eu. Cu the nh sau:
Keu d eu 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
Hang chuo a tap cac k t at ga cap dau nhay
kep. V du: Mthis is a te7tM. Mot so hang k t dung e
eu khen ma khong xuat hen tren man hnh.
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@
Bng 2-2. Mj 5( tx <sc $i[t
1.11. TB>W@ IDT (OHQJ>IBJ"
1.11.1. &oan t' gan
Cu phap <ten ben> = <beu thc>;
Trong o beu thc co the a mot hang, mot ben,
mot ham hoac a s ket hp cua cac thanh phan tren.
Nau ten, beu thc se c tnh toan, sau o chuyen o
keu beu thc cho phu hp v keu cua ben. Gan ga
tr nay cho ben.
1.11.1.1 (hu)e*n +o*i kie*u trong toan t' gan
Kh cac keu d eu cua ben va beu thc khac
nhau, xuat hen van e chuyen o keu. Trong cau enh
gan uat chuyen o thc hen nh sau: ga tr ben pha
phep gan se chuyen sang keu d eu cua ben. 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 dong 1, 8 bit cao cua so nguyen 7 b cat , ch
g a 8 bit thap va gan cho ch. Neu 7 nam trong pham v
U%%2VV th ch va 7 co cung ga tr, ngoa ra ga tr cua ch
se a ga tr cua 8 bit thap trong 7. Trong dong 2, 7 se
nhan phan nguyen cua 2. Trong dong 3, 2 se chuyen 8 bit
nguyen trong ch thanh 8 bit dang so thc. Ta dong 4,
chuyen ga tr nguyen sang ga tr thc.
Bang sau et ke cach chuyen o keu cua beu
thc sang keu cua ben.
OiPu $i+* OiPu $iPu thc 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*
Bng 2-3. O+t Aum chu6P* <Ei 5iPu d. li[u t"o*g 0hv0 gF*
C cho phep gan nheu ben cung ga tr v du muon
gan ga tr 0 cho ben 7, 6, 8 ta co the vet nh sau: 7 c 6 c
2- ShaQn Z. MgoFn ng*N la"= trLnh G
8 c U.
1.11.2. &oan t' ,o hoc
Bang sau et ke cac phep toan so hoc
ToF* t k *gh=a
S T":X t": #Gt *g-i
CG*g
Nh{*
Chia
e Chia lu6 dH
im#
T*g
Bng 2-4. CFc 0hv0 toF* sn hzc
No v phep cha, kh cha ha so nguyen th ket qua
se a so nguyen.
1.11.3. &oan t' t' +ong ta-ng.gia/
Toan t se t ong tang ga tr cua ben en
mot an, ngc a -- gam ga tr cua ben xuong mot
an. Ta co the at toan t tang /gam vao trc hoac
sau cua ben. Tuy nhen, trong mot beu thc se co s
khac nhau ga ha dang nay. V du: 7cBUN 6c 7 se cho ga
tr cua 6 a 11 v du tren tang 7 xong ro m gan cho 6. kh
ta vet 7 c BUN 6 c 7N 6 se nhan ga tr BU b v 7 gan
ga tr BU cho 6 xong m tang en B.
Th t u ten trong phep toan so hoc:
Cao *huti ++ - -
?T": #Gt *g-i@
e
Thu0 *huti + -
Gh*ng 2. !ie>u th*c #H]=re,,ion% 29
1.11.#. &oan t' 0uan he 1a$ !ogic
Trong ngon ng C, ga tr t"ue a ga tr khac U va
2alse a ga tr bang U. Cac phep toan quan he va ogc
thng c s dung chung v nhau. Ca phep toan quan
he va ogc co th t u ten thap hn toan t so hoc.
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
Bng 2-5. Phv0 toF* logic v Aua* h[
Th t u ten cua cac phep toan ogc va quan he:
Cao *huti !
L Lc K Kc
cc ^c
ff
Thu0 *huti ||
1.11.2. &oan t' bit
Toan t bit thc hen vec kem tra, thet ap hoac
ay mot bit trong mot b?te hoac mot t tng ng v
keu d eu cha" hoac i*t. Khong the dung toan t bit
cho keu d eu thc (2loat, dou$le, lo*g dou$le). Toan t
6 ShaQn Z. MgoFn ng*N la"= trLnh G
nay ap dung cho tng bit cua toan hang.
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
Bng 2-6. ToF* t $it
Toan t bit thng dung e ap trnh cho cac thet b,
trong o mo bit se anh dau mot trang tha nao o cua
thet b. No v cac phep toan ay bit, cac bit cuo cung
se c chen vao cac so khong. Trong trng hp so
nguyen co dau, bit dau se c bo qua. Chu y, mo an
ay tra se nhan so o cho 2 va ay pha se cha cho 2.
Bang sau the hen mot va v du ve toan t ay 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%
Bng 2-7. Nh{* v chia t"o*g toF* t <>6 $it
1.11.3. &oan t' 4
Cu phap:
70B | 702 i 709N
Gh*ng 2. !ie>u th*c #H]=re,,ion% 1
Neu 70B cho ga tr a ung, 702 se c tnh toan
va tra ve. Neu 70B sa, 709 se c tnh va tra ve.
1.11.5. &oan t' 6 1a$ toan t' 7
Con tro a a ch bo nh cua mot o tng nao
o. Ben con tro a ben c kha bao e g da ch
mot o tng. Phep toan f tra ve a ch bo nh cua
toan han. V du # c fcou*tN kh o no at trong # a ch
cua ben cou*t. Ne heu ro hn ta co the v du a ch
cua cou*t a v tr 2UU trong bo nh va no cha ga tr
BUU. Sau cau enh gan tren, # co ga tr a 2UU. Phep toan
tra ve ga tr cua ben co a ch c u tr trong con
tro. V du # cha v tr cua ben cou*t kh o A c #N A cha
ga tr c u trong ben cou*t (BUU). Trong trng hp nay
ta co the no, A nhan ga tr ta a ch #. Toan t f va
co th t u ten cao hn ca toan t so hoc. Ben g a
ch bo nh (con tro) c kha bao bang cach them
trc ten ben.
V du cha" chN OU ay ch khong pha a mot k t ma
no a mot con tro tro en k t. Keu d eu ma con tro
tro en c go a keu d eu c ban cua 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. &oan t' ,i9eo:
Tra ve o da bang b?te cua mot ben hoac mot
keu at trong dau ngoac n. V du sau cho bet kch thc
cua so thc 2.
2loat 2N
0"i*t2?MedMXsi8eo2?2@@N
Ne tnh kch thc cua mot keu, ta at keu o trong
dau ngoac n.
0"i*t2?MedMX si8eo2?i*t@@N
1.11.9. &oan t' ;au <ha*) (="
Toan t dau phay thng ket hp v nheu beu
thc. Thong thng toan t nay s dung chung v enh
gan. Ga tr cua enh gan a ga tr cua beu thc cuo
cung trong danh sach cac beu thc c ngan cach nhau
b dau phay.
V du 7 c ?6 c 9X 6 B@N kh o 7 se co ga tr a 4.
1.11.1>. &oan t' . 1a$ ?@
Cac toan t nay dung e truy xuat en cac thanh
phan trong cau truc. Cau truc a keu d eu bao go.
Cac toan t tren cung c dung e truy xuat en cac
thanh phan cua mot 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 xuat en cac thanh phan trong cau
truc tren ta dung: e#0%age, .Tuy nhen, neu dung con tro
en cau truc, e truy xuat en tng phan t ta dung cu
phap 0-Lage
1.11.11. &oan t' (" 1a$ AB
Toan t ?@ dung e tang th t u ten cua beu
thc con trong mot beu thc khac. Toan t gh xac nh
phan t cua mang. Kh a mot mang, beu thc ben
trong dau ngoac vuong se cung cap ch so cua mang.
1.11.12. Co 'u tieDn cua tat ca cac <he< toan
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
Bng 2-8. Th tx Hu ti* c)a toF* t t"o*g C
1.12. BZQMO I=DWS (E[HJQ\\ZB@"
Toan t, hang so, ben va ham a nhng thanh
& ShaQn Z. MgoFn ng*N la"= trLnh G
phan c ban tao nen beu thc. Mot beu thc trong C a
s ket hp hp e cua bon thanh phan tren.
1.12.1. &h' t' tnh toan
Trong mot beu thc co nheu beu thc con, trnh
ben dch se t ong sap xep e snh ra mot ma to u.
Ng ap trnh se khong bet c beu thc con nao thc
hen trc. V du 7 c 2B?@ 22?@N kh o, ta khong bet
ham 2B?@ hay 22?@ se go trc.
1.12.2. (hu)e*n +o*i kie*u trong bie*u th'c
Kh hang hoac ben co keu khac nhau c tron an
trong mot beu thc, tat ca se chuyen sang keu d eu
phu hp. Trnh ben dch se chuyen keu d eu cua tat
ca cac toan hang sang keu n nhat. Nau ten tat ca
cac ga tr keu cha" va sho"t i*t se t ong chuyen sang
keu i*t. Sau o neu toan hang nao co keu n hn th
beu thc se ay keu cua toan hang o. V du:
IF a* o0e"a*d is a FB@A ]BOVFQ
Gh*ng 2. !ie>u th*c #H]=re,,ion% 4
THN the seco*d is co*ve"ted to FB@A ]BOVFQ
LS IF a* o0e"a*d is a ]BOVFQ
THN the seco*d is co*ve"ted to ]BOVFQ
LS IF a* o0e"a*d is a `FB>I
THN the seco*d is co*ve"ted to `FB>I
LS IF a* o0e"a*d is a* O@\ZA@Q] FB@A
THN the seco*d is co*ve"ted to O@\ZA@Q] FB@A
LS IF a* o0e"a*d is FB@A
THN the seco*d is co*ve"ted to FB@A
LS IF a* o0e"a*d is O@\ZA@Q] Z@I
THN the seco*d is co*ve"ted to O@\ZA@Q] Z@I
Co mot trng hp ac bet: neu mot toan hang a
lo*g va toan hang con a a u*sig*ed i*t, va neu ga tr
cua u*sig*ed i*t khong the chuyen sang keu lo*g th ca
ha toan hang se chuyen sang keu u*sig*ed lo*g.
1.12.3. EF< kie*u
Ta co the bat buoc mot beu thc nao o sang mot
keu mong muon. Tnh huong nay go a ep keu. Dang
tong quat cua ep keu a: ?t60e@ e70"essio*N trong o
t60e a keu d eu can chuyen sang, e70"essio* a beu
thc can chuyen.
V du: thong thng beu thc 72 a keu so nguyen
neu 7 a so nguyen, neu muon 72 a mot keu so thc
ta dung beu thc sau: ?2loat@ 72;
1.12.#. Khoang trong 1a$ ;au ngoaGc +n
Ta co the them nheu khoang trong va dau ngoac
n e beu thc de oc va ro rang hn. V du 7cBU6-
?B2T7@N kh o ta co the vet 7 c BU 6 - ?B2T 7@N
Gam hoac tang dau ngoac n khong phat snh ra o
+ ShaQn Z. MgoFn ng*N la"= trLnh G
va am cham vec tnh toan. Do o ta s dung dau ngoac
n e am ro rang th t u ten cua cac phep toan
trong beu thc. V du: 7 c 6 9 9Y te#0 B2TN ta co
the vet 7 c ?6 9@ ?9Y te#0@ B2TN
1.12.2. Viet nhanh cua <he< toan gan
Kh vet 7 c 7 BUN ta co the vet 7 c BUN toan t c
thong bao cho trnh ben dch bet gan 7 bang ga tr 7
cong 10. Phep toan gan nhanh nay am vec tren tat ca
cac phep toan ha ngo. Tong quat, beu thc dang v c v
O e ta co the vet 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 phap:
i*t 0"i*t2?cha" 2o"#atX`@N
Ham n ra man hnh danh sach cac ga tr cung v
khuon dang d eu ra man hnh. 2o"#at ay co ha dang:
1. K t c n ra man hnh; 2. K t nh dang e n d eu
ra man hnh. K t nh dang bat au bang dau e theo sau a
mot k t eu khen. V du e n ra man hnh ga tr cua
ben nguyen 7 ta vet nh sau:
0"i*t2?Mgia t"i cua 7 laiedMX 7@N
Ne n ra man hnh ga tr cua beu thc thc 9%V Z
2
0"i*t2?Mgia t"i $ieu thucie2MX9%V Z 2@N
Ham 0"i*t2?@ tra ve ga tr a so k t c n ra
man hnh. Neu tra ve ga tr am, ham a b o. Ne
danh mot so v tr e n ga tr ta chen ga dau e va k
Gh*ng 2. !ie>u th*c #H]=re,,ion% 7
t eu khen mot so nguyen, so nguyen nay chnh a so
k t danh e n ra ga tr o.
1.13.1.1 Bang cac k t' +nh ;ang 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* ?eX 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"#
Bng 2-10. rst tm 2o"#at c)a h# 0"i*t2
1.13.1.2 JF nghKa cua cac k hieu
Ne n mot so nguyen ta dung nh dang ed hoac ei ha
dang nay a tng ng.
Ne n mot ga tr khong dau ta dung eu.
Ne n mot so thc dau phay ong keu 2loat ta dung
e2.
Ne n mot so thc dau phay ong theo k heu khoa
- ShaQn Z. MgoFn ng*N la"= trLnh G
hoc keu dou$le ta dung ee hoac e. So thc theo k heu
khoa hoc co dang nh sau: 7%ddddd-66. Neu muon hen k
heu theo dang hoa th dung e, va ngc a.
Ta co the dung k heu eg hoac e e thay the k heu
e2 hoac ee. Kh s dung k heu nay, trnh ben dch se t
ong chon keu the hen so thc sao cho co o da ngan
nhat. Neu muon dung k heu ta dung e va ngc 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 2c2BU@
0"i*t2?teg tX 2@N
getch?@N
4
Ket qua hen ra man hnh nh sau:
B BU BUU BUUU BUUUU BUUUUU BeUW BeUT BeUR BeUZ
Ne n mot so nguyen khong dau dang c so 8
hoac 16 ta dung k heu eo (ch o) hoac e7 tng ng. No
v he 16, neu muon dung cac k heu ch hoa ta dung k
heu e. V du sau n ra man hnh ga tr t 0 en 255 dang
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?tel*tX *u#@N
4
Gh*ng 2. !ie>u th*c #H]=re,,ion% 9
getch?@N
4
Ne n a ch cua mot ben ra man hnh ta dung k
heu e0, nh dang nay se n ra man hnh a ch trong may
cua ben.
Ne thong bao cho bet ham 0"i*t2 a n ra bao nheu
k t ta dung k heu e*. K heu e* se ta en ben c tro
b tham so tng ng so k t ma ham 0"i*t2 a n ra
man hnh. Xet 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 tren se n ra man hnh dong ch Mthis is a
testM va con so 4. Neu nay cho bet, trc kh gap k heu
e* ham 0"i*t2?@ a n ra 4 k t.
1.13.1.3 Ln /ot gia tr 1i +o rong cho tr'c
Ne n ra man hnh mot ga tr v o rong cho trc ta
them ga k t e va k heu nh dang mot so nguyen. So
nguyen nay chnh so v tr to theu e n ga tr ra man
hnh. Xet 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
Ket qua xuat hen nh sau:
BU%B29UYU
BU%B29UYU
UUUBU%B29UYU
1.13.1.# Ln /ot gia tr 1i +o chnh Mac cho tr'c
Ne n mot ga tr v o chnh xac cho trc ta s
dung nh dang 7%6 v 7, 6 a cac ga tr nguyen, y ngha
cua no phu thuoc vao keu d eu.
No v so thc, kh ta s dung nh dang e2, e, ee, 7
se xac nh so v tr e hen th so thc va 6 xac nh
so ch so sau dau thap phan. Neu khong co nh dang 6,
chng trnh se n 6 ch so sau dau thap phan. V du eBU%Y2
se n ra man hnh mot so thc co o rong bang 10, va so
ch so sau dau thap phan a 4.
No v keu chuo k t, 6 cho bet o rong n nhat
ma chuo co the hen th. V du eV%Ts se n ra man hnh
mot chuo k t co o rong a 5 va khong c vc qua
7. Neu chuo k t da hn o rong cc a th cac k t cuo
cung se b cat bt.
No v so nguyen, o chnh xac se ch ra so ch
so to theu se c hen th. Neu so ch so nho hn 6,
chng trnh se them vao trc cac so khong sao cho so
ch so bang 6. Xet 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
Ket qua nh sau:
B29%B29V
UUUUBUUU
This is a si#0l
1.13.1.2 (anh !eN cho cac gia tr
Ngam nh cac ga tr c vet t pha qua tra. Tc
a neu o rong cua nh dang n hn o rong cua d
eu th d eu se c vet t pha qua. Trong trng hp
nay, e vet d eu t ben tra qua ta them dau tr sau
dau e. Xet 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 cac kie*u ;'O !ieu khac
Co ha dang bo ngha cho phep ham 0"i*t2 hen th
so nguyen ngan va da. Cac bo ngha nay ap dung cho
cac nh dang i, d, u, o, 7. K heu l n so nguyen da, v du
eld n ra so nguyen keu lo*g i*t. K heu h, n so nguyen
ngan, v du ehu n ra so nguyen ngan. Bo ngha L ng
trc cac nh dang e, 2, g cho bet o a keu lo*g dou$le.
1.13.2. Ha$/ nha< ;'O !ieu t'$ ba$n <h/
&2 ShaQn Z. MgoFn ng*N la"= trLnh G
Cu phap:
sca*2?cha" co*t"ol_st"i*gX va"_list@N
Nhap mot ga tr t ban phm va gan ga tr o vao
mot ben, v du nhap mot ga tr t ban phm vao ben
nguyen 7:
sca*2?MedMX f7@N
Ham tra ve ga tr a so o tng c gan cho
ben, neu gap o ham tra ve ga tr a OF. Chuo eu
khen cho bet cac ga tr oc vao ben c tro b tham
so nh the nao. Chuo eu khen bao gom ba oa nh sau:
Nac ta nh dang
Cac k t trong
Cac k t khong pha a khoang trong
1.13.2.1 CaGc ta +nh ;ang
Nat trc dau e, thong bao cho ham sca*2?@ bet can
oc vao oa d eu nao. Nnh dang theo trat t t tra
qua pha tng ng v danh sach cac ben.
Ne oc mot so nguyen ta dung ed hoac ei. Ne oc
mot so nguyen d dang c so 8 hoac c so 16 ta dung
at ta eo hoac e7 tng ng. So he 16 co the vet
bang ch hoa hay ch thng.
Ne oc mot so thc beu den d dang k heu khoa
hoc hoac dang chuan ta dung k heu 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
Chng trnh tren oc vao ha so nguyen, so nguyen i
nhap vao theo c so 8, so nguyen b theo c so 16. Sau o
hen ra man hnh ga tr cua i va b dang thap phan.
1.13.2.2 Bang cac k t' +nh ;ang cho ha$/ ,can:("
Mj k *gh=a
ec rzc #Gt 5( tx
edC rzc #Gt sn *gu6* th/0 0h{*% i*tlo*g
eiC rzc sn *gu6* th/0 0h{*% i*tlo*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*tlo*g
e0 rzc #Gt co* t"}
e* Nh/* #Gt sn *gu6* l sn 5( tx <zc <H\c
eua rzc #Gt sn *gu6* 5h-*g duu% i*tlo*g
egh ~uvt #Gt t/0 5( tx t"o*g duu gh
ee rzc #Gt duu 0hq* t"#
Bng 2-11. rst tm 5hu-* dD*g h# sca*2?@
Ham sca*2?@ se ngng oc mot ga tr so neu xuat
hen mot k t khong pha so.
1.13.2.3 Coc t'$ng k t' rieDng biet
Ta co the dung at ta ec e oc tng k t reng
bet. Tuy nhen eu nay de gay ra nhng sa sot. Thong
thng, cac khoang trong, k heu xuong dong dung e
phan bet cac trng kh oc d eu. No v keu k t th
&& ShaQn Z. MgoFn ng*N la"= trLnh G
khong. V du:
sca*2?tececectX faX f$X fc@N
Kh nhap M7 6M uc o a a 7X $ a khoang trong va c
a 6.
1.13.2.# Coc /ot chuoPi k t'
Dung at ta es e oc mot chuo. Ham sca*2?@ oc
mot chuo cho en kh gap mot khoang trong au ten.
Cac k t a oc se c gan cho mang cac k t c tro
b con tro trong tham so va chuo nhan c se ket thuc
bang k t rong.
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
Ga s ta nhap Mhello !o"ldM, chng trnh ch n ra
dong MhelloM
1.13.2.2 Q' ;ung ta< ,can,et
Sca*set a tap cac k t c nh ngha trc. Kh
ham sca*2?@ x y tap sca*set, no ch nhap nhng k t
thuoc tap nay. K t c oc se c gan en mot mang
cac k t c tro b tham so cua tap sca*set tng ng.
Nnh ngha cac k t trong tap sca*set vao cap dau gh. Cu
the nh sau:
egh
Trong o a cac k t. Kh nhap d eu, ham
Gh*ng 2. !ie>u th*c #H]=re,,ion% &4
sca*2?@ bat au oc cac k t cho en kh bat gap mot k
t khong pha trong tap sca*set. Mang nay cha chuo
c ket thuc bang rong. Xet 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 nhap B29a$cdt6e, chng trnh se n ra B29 a$cd t6e.
B v t khong thuoc tap sca*set, do o ham sca*2 se
ngng oc vao ben st" kh gap ch t, cac k t con a se
c oc vao st"2.
Ne ch ra mot tap ao ngc, ta dung k heu . K
heu nay cho bet nhap nhng k t ma khong thuoc tap
sca*set. Ta co the tao ra mot tap cac k t en tuc bang
mot dau no v du nh ega-8h. Tap sca*set co phan bet
ch hoa va ch thng.
1.13.2.3 oai bo nh'Ong khoang trong khoDng caNn
thiet
Mot k t trong trong chuo eu khen am cho ham
sca*2?@ bo qua nhng khoang trong au in=ut ,trea1.
1.13.2.5 Rh'Ong k t' khoDng <hai !a$ khoang trong
trong chuoPi +ieNu khie*n
Mot k t khong pha trong trong chuo eu khen
am cho ham sca*2?@ oc va bo qua nhng k t nay trong
in=ut ,trea1. V du MedXedM ham oc vao mot so nguyen,
&+ ShaQn Z. MgoFn ng*N la"= trLnh G
oc va oa bo mot dau phay va oc mot so nguyen
khac.
1.13.2.8 &a <hai gi +en ha$/ ,can:(" +a chS
Tat ca cac ben trong ham sca*2?@ c s dung e
nhan ga tr pha g bang a ch. Neu nay co ngha
rang tat ca cac tham so pha a nhng con tro.
1.1%. C>CO =BTZ IJ>cS @A=ZQGX P>U V>UZ I>GH
1.1#.1. (aDu hoi traTc nghie/
C>CO 1. Ten nao at !>Z quy nh cua C:
a@ iai_Pt"i*h_Bac_2N $@ Nga6si*hN
c@ Noi si*hN d@Sv2UUU N
C>CO 2. Muc nao co cac Ten eu at YOW@A quy nh cua
C:
a@ 7BX -2N $@ 7BX 2N c@ CONSTX _29YN d@gBhX 72N
C>CO 3. Trong C, neu muon dung enh xoa man hnh Crscr
th pha kha bao the nao ngay sau phan teu e chng
trnh:
a@Ji*clude Kstdio%hL $@ Ji*clude Kco*io%hL
c@Ji*clude Kstdli$%hLN d@ 5h-*g 5hai $Fo g1N
C>CO %. Beu thc sau co keu d eu a g? Ga tr a bao
nheu?
i*t iN
2loat 2N
cha" chN
icBUN
2 c 9N
chcdAdN
2 c 2i-chN
i c 2ichN
ch c 2i2chN
Gh*ng 2. !ie>u th*c #H]=re,,ion% &7
C>CO ,. Cho bet cac beu thc sau: beu thc nao sa?
Beu thc ung co ga tr a bao nheu?
Ga s ta kha bao nh sau:
i*t icBUN
cha" chcdadN
Kh o cac beu thc sau: beu thc nao sa, beu
thc ung cho ga tr a bao nheu?
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. Vet chng trnh nhap vao mot tong so ten, bet
rang co ba oa menh ga ten a 100.000 VNN, 50.000VNN
va 10.000VNN. Cho bet tong so ten tren co t nhat a bao
nheu t t cac menh ga a bet.
C>CO 2. Vet chng trnh nhap vao so gay, n ra man hnh
so g, phut va gay theo nh dang hhi##iss.
C>CO 3. Nhap vao ba so thc, tm so n nhat cua ba so
o.
C>CO %. Nhap vao:
Lng ngay cong (LNC)
So ngay cong quy nh (NCOD)
So ngay a am (SNC)
Vet chng trnh tnh so ten ng (TL) bet rang TL =
SNCLNC. Neu SNC vt qua NCOD th so ngay vt nhan 2.
Gh*ng . GaFu le"nh #Ttate1ent% &9
C=DL@A 3. C>CO FQG@= (!I>IQXQ@I"
No mot cach tong quat th cau enh a mot phan
cua chng trnh ma no co the thc th. Mot cau enh ch
cho may bet mot hanh ong. Ngon ng C phan cau enh
thanh cac nhom sau:
Beu thc
Kho enh
Lenh a chon
Lenh ap
Lenh nhay
Cau enh a chon o a i2, s!itch; cau enh ap o
a !hile, 2o", do-!hile; cau enh nhay a $"ea5, co*ti*ue,
goto, "etu"*; nhan thng v enh goto. Beu thc bao
gom cac beu thc hp e. Kho enh a cac enh at
trong cap dau moc 34.
1.1,. 0=BRZ FQG@=
Kho enh a mot nhom cac enh n gan co quan
he v nhau va c co nh a mot n v. Kho enh c
at ga ha dau moc. Kho enh cung con c go a
cau enh phc hp.
1.1-. BZQMO I=DWS
Beu thc a mot cau enh n gan, ket thuc b
dau cham phay. 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
Mot beu thc eu ken ch cho ha ga tr hoac
ung hoac sa. Trong C, ga tr ung a mot ga tr khac 0
bao gom ca cac ga tr am va ga tr sa a mot ga tr
bang 0.
1.14. C>CO FQG@= FDd> S=Bd@
1.18.1. (aDu !enh i:
Dang tong quat cua mot beu thc eu ken nh sau:
i2?e70"essio*@ state#e*tBN
else state#e*t2N
Trong o state#e*tB va state#e*t2 co the a mot cau
enh n, mot kho enh, hoac khong co g. Menh e else
a tuy chon, co the co hoac co the khong.
Neu beu thc cho ga tr ung, state#e*tB se c
thc hen, ngoa ra state#e*t2 se c thc hen neu co
menh e else. Trong C, beu thc eu ken pha co keu
nguyen, k t, con tro hoac keu thc. 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?MCu*gM@N
getch?@N
4
Gh*ng . GaFu le"nh #Ttate1ent% 41
Chng trnh tren, cho phep nhap mot so t ban phm.
Neu so va nhap trung v so c snh ngau nhen th n
ra ket qua a ung. Chng trnh tren co s dung ham
"a*d?@. Ham nay snh mot so ngau nhen t 0 en ga tr
cc a cua keu so nguyen. Chng trnh co the sa a
cho ay u hn 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?MCu*gM@N
else 0"i*t2?MSai@N
4
1.18.2. (ac !enh i: !oNng nhau
Mot enh i2 co the c ong vao enh i2 khac ta
menh e i2 hoac else. Trong cac enh i2 ong nhau, menh
e else uon v enh i2 gan nhat trong cung mot 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
Menh e else cuo cung khong ket hp v i2?b@ ma
no ket hp v i2?i@. Menh e else ben trong ket hp v
i2?5@.
42 ShaQn Z. MgoFn ng*N la"= trLnh G
Trong ngon ng C ho tr 15 mc i2 ong nhau, thc te
cac chng trnh dch ho tr nheu hn. Tuy nhen neu dung
qua nheu enh i2 ong nhau se am xao tron y ngha
cua thuat toan. 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. (ac !enh i:?e!,e?i: !ieDn tuc
Dang tong quat 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
Neu ken c kem tra t au en cuo. Neu gap
eu ken nao ung trc ten th cau enh ket hp v
Gh*ng . GaFu le"nh #Ttate1ent% 4
no se c thc hen va bo qua cac phan con a. Neu
khong co eu ken nao ung cau enh cuo cung sau
menh e else se thc hen. 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.#. &oan t' 4
Cau enh i2 tng t nh toan t |. Ta co the s dung
toan t | e thay the cac enh i2. Dang tong quat cua
mot toan t | nh sau:
70"essio*B | 70"essio*2 i 70"essio*9
Ga tr cua mot toan t | c xac nh nh sau: au
ten tnh ga tr beu thc 1, neu co ga tr ung tnh ga
tr beu thc 2 va tra ve ga tr cua toan t |. Neu ga
tr beu thc 1 sa, tnh ga tr beu thc 3 va tra ve ga
tr cua toan t ? beu thc 1, 2 co the khong tra ve ga
tr nao. Beu thc 1 pha co mot ga tr cu the.
1.18.2. enh ,Uitch
Nay a cau enh a chon nheu nhanh. s!itch se
4& ShaQn Z. MgoFn ng*N la"= trLnh G
kem tra an c ga tr cua mot beu thc da vao danh
sach cac so nguyen hoac k t. Kh tm thay mot ga tr
nao, cau enh ket hp v no se c thc hen. Dang
tong quat cua enh 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
Beu thc pha a keu so nguyen hoac keu k t,
khong cho phep keu so thc. Ga tr cua beu thc se
c kem tra theo th t da vao ga tr cua cac hang
a ra trong menh e case. Kh tm thay mot ga tr thoa
man, cau enh ket hp se c thc hen cho en kh gap
enh $"ea5 hoac en cuo cau enh s!itch. Cau enh sau
de2ault (neu co) se c thc hen neu beu thc khong
trung v ga tr nao.
Trong C, enh s!itch co nheu nhat 257 enh case. Co 5
y can quan tam kh s dung enh s!itch:
1. Lenh s!itch khac enh i2, s!itch ch kem tra tnh
bang, trong kh enh i2 co the tnh toan mo keu beu thc
quan he va ogc.
Gh*ng . GaFu le"nh #Ttate1ent% 44
2. Khong co ha ga tr gong nhau nam trong enh
s!itch
3. Neu hang k t c s dung trong s!itch, no se t
ong chuyen sang so nguyen.
4. Neu muon vet nheu hang e ket hp v mot
cau enh, ta pha vet reng cac hang nay trong tng
menh e case
5. Cac cau enh trong tng menh e case a cac cau
enh bat ky, neu nheu hn mot enh ta khong can pha
them dau 34
Lenh s!itch thng c s dung e x y enh t
ban phm, chang han nh a a chon mot 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
Cau enh $"ea5 trong s!itch a tuy chon, no dung e
ket thuc cau enh trong menh e case. Neu bo qua cau
enh $"ea5, chng trnh se thc th nhng menh e case
tep theo cho en kh gap enh $"ea5 khac hoac cho en
het cau enh 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 tren mnh hoa ha van e:
Th nhat, ta co the co cac menh e case ma khong
ket hp v enh nao. Kh gap trng hp nay, chng trnh
se chuyen xuong menh e case tep theo. Trong v du tren,
ba menh e case se co mot cau enh a 2lagcUN $"ea5N
Th ha, neu khong co enh $"ea5 chng trnh se thc
th cac enh tep theo. Neu i c Y. cau enh 2lag c BN se
Gh*ng . GaFu le"nh #Ttate1ent% 47
thc hen va b v khong co enh $"ea5 nen cau enh
case tep theo se c thc hen. Kh o se go ham
e""o"?2lag@ v tham so c-B; nhng neu i c V enh e""o" se
thc hen v tham so -1.
1.18.3. enh ,Uitch !oNng nhau
Cac enh s!itch co the ong vao nhau, tc a
state#e*tBX 2X `X N co the a enh s!itch khac. Trong
trng hp nay cac hang ga tr xuat hen ta menh e
case ca trong va ngoa co the trung 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. enh !aG< :or
Dang tong quat cua enh ap 2o" nh sau:
2o"?i*itiali8atio*; co*ditio*; i*c"e#e*t) state#e*ts;
Lenh ap 2o" co nheu thay o so v cac ngon ng
ap trnh khac, y ngha chung cua vong for nh sau:
i*itiali8atio* a mot enh gan dung e kh gan ga tr
au cho ben eu khen ap; co*ditio* a mot beu thc
4- ShaQn Z. MgoFn ng*N la"= trLnh G
quan he cho bet kh nao thoat kho vong ap; i*c"e#e*t
nh ngha ben eu khen thay o nh the nao ta mo
an ap. Ba muc nay c phan bet nhau b dau N vong
ap 2o" tep tuc thc hen cho en kh eu ken sa th
dng. V du chng trnh sau n ga tr t 1 en 100 ra man
hnh.
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 vong ap nay, au ten 7 c gan ga tr 1 va
sau o c so sanh v ga tr 100. Neu 7KcBUU chng trnh
se go ham 0"i*t2; sau o 7 c tang en 1 va tep tuc
kem tra eu ken. Neu eu ken cha thoa man, tep tuc
go ham 0"i*t2. Oua trnh tren ap a cho en kh 7LBUU va
o chnh a em ket thuc vong ap. Trong v du nay, 7 a
ben eu khen ap, no c kem tra va thay o sau mo
an ap. V du:
2o"?7cBUUN 7^cWVN 7-cV@ 3
8 c 77N
0"i*t2?tThe sAua"e o2 edX e2tX 7X 8@N
4
Trong v du tren, ca ha cau enh tnh 7 bnh phng va
ham 0"i*t2 eu c thc hen cho en kh 7 c WV. Chu y,
vong ap thc hen v so am. Nau ten 7 c gan ga
tr 100 sau mo an ap se gam 5.
Trong vong ap 2o", eu ken uon c kem tra au
Gh*ng . GaFu le"nh #Ttate1ent% 49
chng trnh, eu nay co ngha a cac ma ben trong co
the khong c thc th neu eu ken 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 tren ch n ga tr BU cua ben 6 ra man hnh.
Cac enh trong vong ap 2o" tren khong bao g thc hen
b v 7 va 6 bang nhau kh vao vong ap.
1.19.2. Bien +o*i cua 1o$ng !aG< :or
S ben o vong ap 2o" se am tang sc manh, tnh
mem deo va tnh ng dung trong cac tnh huong ap trnh.
Mot ben o thng gap nhat o a s dung ha hay
nheu ben e eu khen vong ap.
2o"?7cUX 6cUN 76KBUN 7@3
6 c getcha"?@N
6 c 6 - wUwN
%
%
%
4
Dau phay dung e phan bet ha enh kh tao. Mo
an ap, 7 tang en 1 va ga tr cua 6 c thet ap b
ban phm. Mac dau 6 c nhap t ban phm, nhng 6 van
pha c gan ga tr =0 e ga tr cua 6 c xac nh
trc kh beu thc eu ken tnh toan. Neu khong nh
ngha trc co the vong ap se khong c thc hen.
Trong ba beu thc cua vong 2o", co the khong xuat
hen mot hoac ha hoac ca ba beu thc nay. V du nhap
vao mot so cho en kh nao so o n hn 10 th dng:
2o"?7cUN7KcBUN@ sca*2?MedMXf7@N
+6 ShaQn Z. MgoFn ng*N la"= trLnh G
V du tren khong xuat hen beu thc ta thanh phan
th ba. Ta co the vet a cau enh nay theo cach khac
nh sau:
2o"? N N @3
sca*2?MedMXf7@N
i2 ?7LBU@ $"ea5N
4
Kh o vong ap 2o" tren khong co beu thc nao
ben trong.
Vong ap 2o" cung co the khong co enh nao ben
trong, v du cu the nh sau: cho bet c so n nhat nho
hn so nguyen *.
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
Dang tong quat nh sau:
!hile?co*ditio*al@ state#e*tsN
Trong o state#e*ts co the a mot enh rong, mot
enh n hoac mot kho enh, v.v. co*ditio*al a mot
beu thc bat ky v ga tr ung a mot ga tr khac 0.
YU ngha, neu eu ken con ung th thc hen cac cau
enh. Neu eu ken sa, nhay en cau enh 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 tren, gan cho ben ch mot k t rong, sau o yeu
cau ng dung nhap vao mot k t. Neu ng dung
nhap vao mot k t khac k t A, chng trnh bat ng
dung pha nhap a cho en kh nhap ung k t A th ket
thuc.
Gong nh vong ap 2o", vong ap !hile cung kem tra
eu ken au vong ap. Neu nay co ngha a cac
cau enh trong vong ap se khong c thc hen neu
eu ken 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
Khong gong nh vong ap 2o", !hile, kem tra eu
ken au vong ap. Vong ap do-!hile kem tra eu
+2 ShaQn Z. MgoFn ng*N la"= trLnh G
ken cuo vong ap. Neu nay cho phep vong ap do-
!hile se thc hen t nhat a mot an. Dang tong quat
cua vong ap do-!hile nh sau:
do
3
state#e*tsN
4!hile ?co*ditio*al@N
Neu cau enh ch co mot enh n, ta co the bo qua
dau ngoac nhon. YU ngha: ap cac cau enh tren cho en
kh eu ken nhan ga tr sa. V du:
do3
sca*2?MedMXf*@N
4!hile ?*LBUU@N
Noan chng trnh tren cho phep nhap vao mot so
nguyen cho en kh nhan ga tr nho hn hoac bang 100.
Thong thng, ta s dung vong ap do-!hile va ket
hp v cau enh s!itch e duy tr s hoat ong cua 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 toan tren, s dung vong ap do-!hile a
mot a chon tot nhat b v ta mong muon cac cau enh
tren c thc hen t nhat a mot an.
1.2/. LQG@= @=>T^
1.2>.1. enh nha) return
Lenh "etu"* dung e thoat kho mot ham, no c
phan oa enh nhay b v no se tr ve ung v tr go
ham. Lenh "etu"* co the co tra ve mot ga tr hoac
khong, neu enh "etu"* co mot ga tr, ga tr o se a
ga tr cua ham. Trong C, nhng ham co tra ve ga tr,
neu khong tra ve ga tr nao th chng trnh se t ong
tra ve mot ga tr vo ngha. Dang tong quat cua enh
"etu"*.
"etu"* e70"essio*N
Beu thc ch xuat hen neu ham kha bao co ga
tr tra ve, trong trng hp nay ga tr beu thc a ga
tr tra ve cua ham. Ta co the dung nheu enh "etu"*
trong mot ham, tuy nhen ham se ngng kh gap mot enh
"etu"* sm nhat. Dau moc cuo ham gan gong nh enh
"etu"*.
1.2>.2. enh nha) goto
+& ShaQn Z. MgoFn ng*N la"= trLnh G
Lenh nhay goto t kh s dung trong cac tnh huong ap
trnh, b v neu s dung nheu enh nhay se am cho
chng trnh tr nen phc tap kho g ro. Thong thng ta
s dung enh nhay trong trng hp thoat kho nheu
vong ap ong nhau.
Dang tong quat cua cau enh nh sau:
goto la$elN
%
%
%
la$eli
state#e*tsN
Trong o, la$el a ten nhan. Ten nhan a mot nh
danh trong C, no co the c nh ngha trc hoac sau
enh goto. V du sau co tao ra mot vong ap n cac so t 1
en 10
c BN
loo0Bi
0"i*t2?Med MX7@N
7N
i2 ?7KBU@ goto loo0BN
V du tep theo se n ra man hnh so au ten co ba
ch so thoa tnh chat 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?BUUiBUb5 cc iii bbb 555@
goto 5etthucN
5etthuci
0"i*t2?MedededMXiX bX 5@N
getch?@N
4
1.2>.3. enh break
Lenh $"ea5 dung e ket thuc cau enh case trong
s!itch va dung e ket thuc cac vong ap ma khong can
pha kem tra eu ken. Kh gap enh $"ea5 trong vong ap,
vong ap se ket thuc ngay ap tc va chng trnh se
nhay en cau enh sau vong ap. V du: chng trnh sau se
ket thuc ta ga 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
Chng trnh tren ch n ra man hnh cac so t 0 en
10.
1.2>.#. enh countinue
Cau enh nay dung e eu khen chng trnh quay
ve au vong ap va thc hen cac vong ap tep theo.
V du: chng trnh sau n ra man hnh so c so khong
tam thng cua mot so nguyen dng *.
++ 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 hoi traTc nghie/
C>CO 1. Cho bet ga tr cua beu thc 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@ vi 7c3UX BX -BX 94%
d% 9K 2 ff W - V cBN
C>CO 2. Lenh nao sau ay n ra man hnh so n nhat ga
ha so thc 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. Kem tra neu ba so a, $, c eu n hn B th n so B,
chon enh nao:
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 ben nguyen. Sau kh thc hen cac enh:
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
Ga tr sau cung cua i a:
a% 2 $% 9 c% Y d% V
C>CO ,. Cho N a ben nguyen, sau kh thc hen cac enh:
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
Ket qua n en man hnh a:
a% Cha* $% Le c% So a# d% 5h-*g c; hi[* g1
C>CO -. Cho S va i a ben nguyen. Kh chay oan chng
trnh:
s c UN
2o"?icBN iKcBUN i@ s c s iN
0"i*t2?MedMX s@N
Ket qua n en man hnh a:
a% s c BB $% s c VV c% s c BUU d% s c BUB
C>CO +. Cho S, i va NLU a cac ben nguyen. Ne tnh S c N^,
chon cau nao:
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 ben keu nguyen. Kh chay oan chng
+- ShaQn Z. MgoFn ng*N la"= trLnh G
trnh:
S c UN i c BN
!hile ?i Kc W@ 3
Sic S iN
iic i 2N
4
Ga tr sau cung cua S a:
a% W $% Z c% BB d% U
C>CO #. Ga s S, i a cac ben nguyen. Kh chay chng
trnh:
S c UN i c BN
do3
Sic S i iN
iic i BN
4!hile ?iKY@N
Ga tr sau cung cua S a:
a% U $% BY c% BW d% 9U
1.21.2. Ba$i ta<
C>CO 1. Nhap bon so 7B, 72, 79, 7Y, tm so n nhat va so
nho nhat cua bon so o.
C>CO 2. Nhap mot ch ca, neu a ch thng th o
thanh ch hoa, ngc a, neu a ch hoa th o thanh ch
thng. V du: nhap A n ra a, nhap $ th n ra B.
C>CO 3. Nhap cac he so, ga va ben uan cac he
phng trnh sau theo quy tac Gra1er:

C>CO %. Nhap so thc 7 va tnh:
(Hng dan: dung ham e
7
va L*7, xet ba trng hp
Gh*ng . GaFu le"nh #Ttate1ent% +9
7cU, 7LU, 7KU).
C>CO ,. Nhap so thc 7 va tnh:
6 =
C>CO -. Nhap 7 a ga tr thc va tnh 6 theo cong thc:
C>CO +. Nhap ho ten mot chu ho, nh mc en hang
thang cua ho, ch so en ke thang trc va thang
nay. Hay tnh ten en cho mo ho, bet rang: Mo kR
trong khoang 100 co n ga a 550, 50 kR au ten tren
100 co n ga 1100, nhng kR tren 151 co n ga 1200.
C>CO 4. Nhap vao thang/nam cho bet thang co bao nheu
ngay. Nam nhuan a nam cha het cho 4 nhng khong cha
het cho 100 hoac cha het cho 400.
C>CO #. Nhap ngay/thang/nam, cho bet ngay o a ngay
th may trong tuan. Thuat toan Doomsday (ngay tan the)
e tnh ngay cua tuan nh sau: (ay ngay 19/9/2008 am v
du).
Bc 1: Lay ha so au cua nam cha d cho 4:
neu d 1: AD = 0
neu d 2: AD = 6
neu d 3: AD = 4
neu d 0: AD = 3
AD: a ga tr Doomsday cua nam. (20 % 4 = 0 -> AD = 3.)
76 ShaQn Z. MgoFn ng*N la"= trLnh G
Bc 2: Lay ha so cuo cua nam cha cho 12 ay phan
nguyen cho gan a, phan d cho gan b. (a = 08 / 12 = 0, b = 08
% 12 = 8.)
Bc 3: Nat c = b cha nguyen cho 4. (c = b / 4 = 2).
Bc 4: Nat s = a + b + c. (s = 0 + 8 + 2 = 10)
Bc 5: Nat t = s cha d cho 7. (t = s % 7 = 3)
Bc 6: Nat thu = t + AD. (thu = 3 + 3 = 6)
Bc 7: Tm ga tr Doomsday cua thang (MD) da vao bang
sau:
Than
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)
Bc 8: Nat thu = thu + ngay - MD. (thu = 6 + 19 - 5 = 20)
Bc 9: Trong kh thu < 0 tep tuc cong cho 7. (thu = 20).
Bc 10: thu = thu cha ay phan d cho 7. (thu = thu % 7 = 6).
Bc 11: Ngay cua tuan c xac nh nh sau: 0: chu
nhat; 1: th bay; 2: th ha; 3: th ba; .; 6: th sau. (Ngay
19/9/2008 a th sau).
C>CO 1/. Nhap ngay/thang/nam dng ch, o sang ngay
thang nam am ch.
C>CO 11. Nhap mot ky t bat ky, cho bet ky t o thuoc
oa nao: a ch hoa, a ch thng, a ch so hay cac
ky t khac.
C>CO 12. Nhap o da ba canh a, b, c. Cho bet a, b, c co
pha a ba canh cua mot tam gac khong; neu a ba canh
cua mot tam gac th cho bet o am tam gac g: eu,
Gh*ng . GaFu le"nh #Ttate1ent% 71
can hay tam gac thng?
C>CO 13. In bang ma ASCII thanh ha cot: Ma Ky t, yeu
cau hen th tng trang mot, (mo trang 22 dong) ro dng
a ch ta nhan Enter m hen trang ke tep, c the cho
en het.
C>CO 1%. Nhap mot so nguyen dng N. Tnh:

C>CO 1,. Nhap so n nguyen am bao sao cho n dng (neu
nhap n <= 0 th chng trnh pha bat nhap a), sau o tnh:
S1 = 1
2
+ 3
2
+ 5
2
+ 7
2
+...+ (2n+1)
2

C>CO 1-. Nhap mot so nguyen dng n. Tnh:
S4 = 1.2.3 + 2.3.4 + 3.4.5 +....+ n(n+1)(n+2)
C>CO 1+. Nhap mot so nguyen dng n. Tnh:

C>CO 14. Nhap n, k nguyen am bao pha dng va k<= n.
Tnh to hp chap k cua n theo cong thc:
C>CO 1#. Cho day Fbonac xac 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
Hay nhap so nguyen N>0 va tnh S= F
0
+ F
1
+ F
2
+...+ F
n.
C>CO 2/. Tm va n en man hnh tat ca cac so nguyen
trong pham v t 10 en 99 sao cho tch cua ha ch so cua
no th bang ha an tong cua ha ch so cua no. V du: so
N=36 co ha ch so a 3 va 6, va 3*6 = 2*(3+6). Tng t
o v so 44.
C>CO 21. Nhap N nguyen am bao n hn 1. Tnh tong cac
so e <= N. V du: neu N=5 th tong S=1+3+5 = 9, neu N=8
th S=1+3+5+7=16.
C>CO 22. Nhap mot so nguyen N, cho bet o a so
nguyen to hay khong.
C>CO 23. Nhap mot so nguyen N, n ra man hnh tat ca cac
so nguyen to nho hn hoac bang N
C>CO 2%. Nhap vao so ten g, a suat (%/thang), so
ten nhan c. Tnh so thang can g.
C>CO 2,. Nhap so ten g, a suat (%/thang), so thang.
Tnh so ten nhan c.
Gh*ng &. Mang 3a' chuo\i #brra? 8 Ttring%
7
C=DL@A %. $>T@A P>U S=OBfZ (AJJ>^ *
!IJZ@A"
1.22. 0=>WZ @ZQGX
Mang a tap hp cac ben co cung keu d eu va
c tham cheu thong qua ten chung. Mo phan t trong
mang c truy xuat thong qua ch so. Trong C, mang bao
gom cac v tr en tuc trong bo nh. Na ch thap nhat
tng ng v phan t au ten cua mang va a ch cao
nhat ng v phan t cuo cung. Mang co the co t
mot en nheu cheu. Mang thong dung nhat a mang
chuo k t ket thuc bang k t rong. Mang va con tro trong
C co quan he chac che v nhau.
1.23. $>T@A XBGI S=ZQ?O
Cu phap kha bao mang mot cheu nh sau:
t60e va"_*a#egsi8ehN
Trong o, t60e a keu d eu cua mang va chnh a
keu d eu cua mo phan t, si8e nh ngha kch thc
cua mang. V du e kha bao 100 phan t co ten a
$ala*ce co keu d eu a keu dou$le.
dou$le $ala*cegBUUhN
Ne truy xuat en mot phan t cua mang ta dung cu
phap sau:
va"_*a#egi*de7hN
V du e gan so B2%9Y vao phan t th 9 cua mang
$ala*ce, ta vet:
7& ShaQn Z. MgoFn ng*N la"= trLnh G
$ala*ceg2hcB2%9YN
Trong C, mang co ch so bat au t U, kh ta kha bao
cha" 0gBUhN mang p co 10 phan t bat au t U cho en 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
Chng trnh tren, gan cho 20 phan t cua mang 7 v
cac ga tr tng ng v ch so cua mang. Lu y, ch
so cua mang c tnh t U BZ.
Tong so bo nh (tnh theo b?te) cua mot mang c
tnh theo cong thc sau: to*gcsi8eo2?$ase t60e@ si8e o2
a""a6. Trong ngon ng C, khong kem tra cac ben cua
mang, ta co the vet d eu en tren cac phan t nam
ngoa pham v mang. V du oan chng trnh sau truy xuat
en cac phan t nam ngoa mang, nhng chng trnh van
khong bao o.
i*t cou*tgBUhX iN
2o"?icUN iKBUUN i@ cou*tgih c iN
Mang mot cheu c u tr en tuc tren bo nh
may tnh. V du:
cha" agThN
Hnh sau mo ta trang tha cua mang a trong bo nh.
Gh*ng &. Mang 3a' chuo\i #brra? 8 Ttring%
74
Phq* ti agUh agBh ag2h ag9h agYh agVh agWh
r'a chi BUUU BUUB BUU2 BUU9 BUUY BUUV BUUW
Hnh 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 snh mot con tro en phan t au ten
cua mang bang cach ch ten cua mang nhng khong co
ch so. V du cho mot mang:
i*t sa#0legBUhN
Ta co the snh ra mot con tro en phan t au ten
cua mang bang cach dung ten sa#0le. Noan chng trnh
sau se dung con tro 0 tro en phan t au ten cua
mang. Kh o, e truy xuat en phan t th i cua mang
sa#0le ta co the dung con tro 0 v cu phap sau
?0i@hoac 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 khong the g toan bo mang en mot ham, tuy
nhen ta co the g en ham mot con tro en mang
bang cach ch ra ten mang ma khong co ch so. V du
sau se g a ch cua mang i en ham 2u*cB?@
void #ai*?void@
3
i*t igBUhN
2u*cB?i@N
%
%
%
4
7+ ShaQn Z. MgoFn ng*N la"= trLnh G
Ne ham 2u*cB?@ nhan c tham so i nh tren, ta co
ba cach kha bao ham nh sau: dung con tro, dung mang
co kch thc va mang khong xac nh kch thc.
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 cach tren eu tao ra mot ket qua tng t.
1.2-. C=OBfZ _QRI I=OWS JBf@A (@OFF2IQJXZ@>IQ]
\IJZ@A"
Mot cach s dung cua mang mot cheu o a mang
cac k t ket thuc bang k t rong. Kh kha bao mot mang
cac k t, ta pha danh mot phan t cuo cung e gan
ga tr rong cho chuo. Nay a dau heu e trnh ben dch
bet het chuo.
Trong C co ho tr mot so ham e thao tac v chuo.
T* Chc **g
st"c06?sBX s2@ Co06 s2 vo sB%
st"cat?sBX s2@ hv0 chuyi s2 vo cuni chuyi sB%
st"le*?sB@ T"m vp <G di 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 &. Mang 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%
Bng 4-2. MGt sn h# th-*g d*g t"* chuyi
Tat ca cac ham nay eu c ca at trong th ven
Kst"i*g%hL. Chng trnh sau se mnh hoa cac ham tren
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 mang ha cheu a mang cua mang mot
cheu. Dang tong quat e kha bao mang ha cheu o a:
t60e a""a6_*a#egsi8eBhgsi8e2hN
Ne truy cap en phan t cua mang ha cheu, ta vet
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 ?tY@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. hnh sau mnh hoa ban chat cua mang ha cheu:
Mang ha cheu u tr ch so theo th t dong-cot,
ch so th nhat a dong, ch so th ha a cot. Neu
nay co ngha a: ch so ben pha nhat se tang nhanh
nhat. Ne u tr mang ha cheu ta can so b?te theo cong
Gh*ng &. Mang 3a' chuo\i #brra? 8 Ttring%
79
thc sau:
$6te c si8e o2 i*de7B si8e o2 i*de7 2 si8eo2?t60e@
Hnh sau the hen mang ha cheu trong bo nh
Kh mang ha cheu c s dung nh a tham so cua
ham, ch g con tro en phan t au ten. Tuy nhen,
tham so hnh thc cua ham e nhan c con tro ha cheu
pha kha bao t nhat a mot cheu ben pha nhat. V
du, e mot ham nhan c mang |10||10| ta pha kha bao
nh sau:
void 2u*cB?i*t 7ghgBUh@
3
% % %
4
Neu khong kha bao ch so ben pha nhat trnh ben
dch se khong bet kh nao chuyen sang dong khac.
Ne s dung mang chuo, ta s dung mang ha cheu
keu cha". Kch thc ben tra xac nh so chuo, kch
thc ben pha xac nh o da to a cua mot chuo. V
du:
cha" st"g9UhgRUhN
-6 ShaQn Z. MgoFn ng*N la"= trLnh G
Kh o kha bao 30 chuo k t, mo chuo co o da
to ta a 80. Ne truy cap en tng chuo trong mang ta
dung cu phap *a#egi*de7h. V du:
gets?st"g2Uh@N
Nhap ga tr vao chuo ta a ch th BZ. Cau enh
tren cung tng ng v enh 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 LN RU
cha" te7tgMAhgLNhN
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 tKMAN 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 bet, ten mang khong co ch so chnh a
con tro tro en phan t au ten cua mang. Ngc a,
kha bao mot con tro co the dung nh mot mang. V du:
Gh*ng &. Mang 3a' chuo\i #brra? 8 Ttring%
-1
cha" 0gBUhN
Kh o, cac cau enh sau a tng ng:
0 f0gUhN
hoac 0 cc f0gUhN V du:
i*t 0X igBUhN
0 c iN
0gVh c BUUN KcL ?0V@ c BUU
Tng t o v mang ha cheu:
i*t agBUhgBUhN
a c fagUhgUhN
agBhg2h c BUUN KcL ??i*t @aB2@ c BUUN
Tong quat, e truy cap en phan t bX 5 cua mang
ha cheu ta dung cong thc sau:
agbhg5h KcL ??$ase_t60e @a b"o!_le*gth 5@
1.2#. 0=LTZ A>W@ XBGI X>T@A
1.29.1. Khi gan /ang /ot chieNu
Dang tong quat e kh tao ga tr cho mang mot
cheu nh sau:
t60e a""a6_*a#egsi8eh c 3value_list4N
value_list a danh sach cac ga tr c ngan cach
nhau b dau phay va co cung keu d eu v d eu
cua mang. Ga tr au ten c at vao v tr au ten
cua mang, ga tr th ha at vao v tr th ha, van van.
V du sau kh gan cac ga tr cho m phan t au ten
cua mang.
i*t igBUh c 3BX2X9XYXVXWXTXRXZXBU4N
Kh o, igUh nhan ga tr B va igZh se nhan ga tr BU
cha" st"gZhcMI li5e CMN
Cau enh nay tng ng v cau enh sau:
-2 ShaQn Z. MgoFn ng*N la"= trLnh G
cha" st"gBBhc3dIdXd dXdldXdidXd5dXdidXd dXdedXd
dXdCdXdlUd4N
Mac dau chuo ch co 8 k t nhng ta van can co 9
v tr e u tr chuo nay b v co mot k t rong cuo
cung e thong bao cho trnh ben dch bet chuo a ket
thuc.
1.29.2. Khi gan /ang hai chieNu
Mang nheu cheu cung c kh gan nh mang 1
cheu bang cu phap 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 BUUsA"sgZhgUh a*d sA"sgZhgBh
4N
Tuy nhen , ta co the gan theo mot cach khac ro
rang hn.
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 &. Mang 3a' chuo\i #brra? 8 Ttring%
-
3BUX BUU4sA"sgZhgUh a*d sA"sgZhgBh
4N
1.29.3. Khi gan /ang khoDng kch th'c
Trong trng hp ta khong bet chnh xac thong tn can
gan cho mang, kh o ta khong the kha bao mot mang co
kch thc co nh. Trnh ben dch C cho phep ta gan ga tr
cho mang ma khong can xac nh kch thc. 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@
Chng trnh sau a mot ga1e n gan, mo phong
chng trnh ca"o. Ng ch se chen k t vao v tr trong
cua hnh ch nhat, may tnh se chen k t O. Chng trnh
ket thuc v 3 trang tha: neu co hang ngang, doc, cheo
chnh va cheo phu co cung k t ng ch thang may
tnh, ngc a neu toan k t O may tnh se thang, neu cac
o a c ap kn ma khong ben nao thang ha ben hoa.
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*eccww@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 &. Mang 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 wwN
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 hoi traTc nghie/
C>CO 1. Chon kha bao ung :
a% i*t AgBUhN
$% i*tgBUh AN
c% i*t AgB%%BUhN
d% i*t AgBXBUhN
C>CO 2. Cho kha bao:
2loat AgYhN
i*t iN
Ne nhap d eu cho A, chon cau nao :
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 bao ben:
i*t AgVhN
Chon enh ung:
a% AgBh c Y2N
$% Ag2h c -WN
c% A?9@ c WN
Gh*ng &. Mang 3a' chuo\i #brra? 8 Ttring%
-7
d% AgVh c BUN
C>CO %. Kha bao nao ung:
a% i*t Ag*hg#hN
$% i*t Ag2hg9hN
c% i*t AgB%%2XB%%9hN
d% i*t Ag9X 2hN
C>CO ,. Kh chay oan chng trnh:
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
Ket qua n ra ga tr cua S a:
a%U $% -Z c% 9 d% V
1.31.2. Ba$i ta<
C>CO 1. Nhap so t nhen * va mot day so thc 7
B
X
7
2
X %%%X 7
*
. Tm so n nhat va so nho nhat cua day.
Nem xem trong day co bao nheu so dng, bao nheu so
am, bao nheu so 0 ? Loa nao nheu nhat?
C>CO 2. Nhap mot day so nguyen 7
B
X 7
2
X %%%X 7
*
. In reng
cac so chan va cac so e, mo oa tren mot dong.
C>CO 3. Nhap mot so nguyen dng *, xay dng day so
nguyen 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 day 7 en man hnh.
C>CO %. Nhap mot day so x
1
, x
2
,..., x
n
. Tnh :

-- ShaQn Z. MgoFn ng*N la"= trLnh G
C>CO ,. Nhap mot day so bat ky 7
B
X 7
2
X%%%X 7
*
. In ao
ngc day o, v du cho day B V 9 R, n ra: R 9 V B. Sap
xep day tang dan, n day. Sap xep day gam dan, n
day.
C>CO -. Nhap ha day so bat ky 7
B
X 7
2
X%%%X 7
*
va 6
B
X
6
2
X%%%X 6
*
. Xay dng day th ba 8
B
X 8
2
X %%X 8
*
a tong cua
ha day tren (8
i
c 7
i
6
i
), n ba day en man hnh, mo day
tren mot dong.
C>CO +. Cho ha a thc:
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@
Nhap cac so t nhen * va #, cac he so a
i
va $
b
cua
ha a thc P
*
?7@ va ~
#
?7@, n bac va cac he so cua a
thc R?7@.
C>CO 4. Nhap 7 thc, * nguyen dng va mot mang cac he
so a
U
X a
B
X %%%X a
*
, ro tnh ga tr cua a thc:
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 #. Nhap mot day so bat ky 7
B
X 7
2
X%%%X 7
*
, cho bet
day co o xng khong?, day co ap thanh mot cap so
cong khong? V du day B 9 V Y V 9 B a o xng, day B 9
V T a mot cap so cong.
C>CO 1/. Nhap mot day so bat ky 7
B
X 7
2
X%%%X 7
*
, cho bet
Gh*ng &. Mang 3a' chuo\i #brra? 8 Ttring%
-9
day thuoc oa nao: tang, gam hay khong tang, khong
gam?
C>CO 11. Nhap mot day so nguyen dng 7
B
X 7
2
X%%%X 7
*
.
Tach day 7 thanh ha day: day A gom cac so chan, day B
gom cac so e, sap xep day A tang dan, day B gam
dan, n ha day A va B tren ha dong khac nhau. No ha day
A va B theo th t o thanh mot day duy nhat va gan tr
a vao day 7, n day 7.
V du nhap day 7c3VX TX UX 2X BX WX YX Z4 th day
Ac3UX 2X YX W4, day Bc3ZX TX VX B4, va 7c3UX 2X YX WX ZX
TX VX B4.
C>CO 12. Nhap ha so #, * va ha ma tran A
#X*
va B
#X*
. In cac
ma tran AX BX CcA2B va CcA-B en man hnh.
C>CO 13.
Nhap va n ma tran A
#X*
.
Tm so nho nhat va so n nhat trong ma tran .
Tnh tong cua tat ca cac phan t trong ma tran.
Nem trong ma tran co bao nheu so dng, bao nheu
so U, bao nheu so am.
C>CO 1%.
Nhap va n ma tran A
#X*

Tm va n so n nhat trong tng hang cua ma tran.
Tm va n so n nhat trong tng cot cua ma tran.
Tm va n so nho nhat tren ng cheo chnh cua ma
tran.
C>CO 1,.
96 ShaQn Z. MgoFn ng*N la"= trLnh G
Nhap va n ma tran vuong A
*X*
.
A co pha a ma tran o xng khong
A co pha a ma tran n v khong?
(A a o xng neu a
ib
ca
bi
v mo iXb cBX%%%X *. A a
ma tran n v neu tat ca cac phan t tren ng cheo
chnh eu bang B va cac phan t con a eu bang U).
Gh*ng 4. Gon tro #Sointer% 91
C=DL@A ,. CB@ IJBT (PBZ@IQJ"
Co ba do e s dung con tro: 1. S dung con tro
truyen tham so cho ham e u tr ket qua cua ben sau
kh thoat kho ham; 2. Cac con tro cap phat bo nh
ong; 3. Con tro co the ca then heu qua cua chng
trnh con.
Con tro a ac tnh manh nhat va cung nguy hem
nhat trong ngon ng C.
1.32. 0=>WZ @ZQGX SB@ IJBT
Con tro a mot ben u tr a ch bo nh. Na ch
nay a v tr cua o tng khac (chang han ben) trong
bo nh. V du, mot ben cha a ch cua mot ben khac,
ben au ten go a con tro tro en ben th ha.
1.33. BZQR@ SB@ IJBT
92 ShaQn Z. MgoFn ng*N la"= trLnh G
Dang tong quat e kha bao mot ben con tro:
t60e va"_*a#eN
t60e a keu d eu cua con tro, no co keu d eu
bat k. t60e nh ngha keu d eu ma no tro en, mo
con tro eu co the tro en v tr bat k trong bo nh.
1.3%. TB>W@ IDT IJQC@ SB@ IJBT
Co ha phep toan c ban o a phep toan ay a
ch (f) ay ga tr (), v du:
# c fcou*tN
Nat vao trong ben # a ch cua ben cou*t hay #
nhan a ch cua ben cou*t. Ne heu ro hn ta ay v du
cu the nh sau: ga s ben cou*t dung v tr trong bo nh
a 2UUU e u tr ga tr, va ga s ben cou*t co ga tr
a BUU, sau cau enh gan tren, # se co ga tr a 2UUU.
Toan t dung e ay ga tr cua ben co a ch u ta
con tro. V du:
A c #N
Lay ga tr cua ben co a ch nam trong #. Trong
trng hp nay # g a ch cua ben cou*t do o cau
enh tren se cho ga tr cua ben cou*t, va co ga tr a
BUU. Ca ha phep toan nay co o u ten cao hn cac phep
toan so hoc (tr phep toan tr mot ngo, o v phep
toan nay co cung o u ten).
Ta uon chac chan rang, con tro pha tro en mot
keu d eu hp e. V du neu kha bao con tro keu i*t,
trnh ben dch se heu hang mo a ch ma no u tr
pha a a ch cua ben keu i*t hoac no khong tro
en au. B v C cho phep ta gan mo a ch en ben
Gh*ng 4. Gon tro #Sointer% 9
con tro nhng no se khong cho ket qua mong muon. Xet 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
Chng trnh tren khong gan ga tr cua ben 7 cho 6.
B v 0 a mot con tro nguyen, ch co khoang ha hoac
bon b?te c chuyen sang 6.
1.3,. BZQMO I=DWS SB@ IJBT
Tong quat, beu thc con tro phu hp v quy uat
beu thc khac. Tuy nhen co va em can quan tam.
1.32.1. Vhe< toan gan
Nh nhng ben khac, ta co the dung con tro ben
pha cua phep toan gan. 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 eu tro en ben 7, a ch cua ben 7
c hen th en man hnh thong qua enh 0"i*t2?Me0M@
1.32.2. &oan t' ,o hoc treDn con tro
Co ha toan t so hoc s dung cho con tro, o a
phep cong va phep toan tr. Ga s 0B a con tro
nguyen cha a ch (co ga tr) a 2UUU va so nguyen
co o da ha b?te. Beu thc 0 cho ga tr cua 0 a 2UU2,
khong pha 2UUB, y do a mo an 0B tang, no se tro en
mot so nguyen ke tep trong bo nh, tng ng v vec
tang ha b?te. Neu nay cung tng t nh phep toan tr. Ta
cung co the cong hay tr con tro v mot so nguyen.
1.32.3. Qo ,anh con tro
Ta co the so sanh ha ben con tro v nhau, v du sau
kem tra con tro A co n hn con tro 0 hay khong.
Gh*ng 4. Gon tro #Sointer% 94
i2?0KA@ 0"i*t2?M0 co dia chi *ho ho* AM@N
Thong thng dung phep toan so sanh e kem tra
xem cac con tro co tro en mot o tng hay khong. 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 stac5gSIhN
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 mang co mo en he chac che v nhau,
v du:
cha" st"gRUhX 0BN
0B c st"N
Kh o chng trnh se at a ch cua st" vao ben
con tro 0B, e truy cap phan t th 5 cua st", co the vet
theo ha cach 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 bao thanh mang gong nh
nhng keu d eu khac. V du sau kha bao mot mang con
tro nguyen co kch thc 10.
i*t 7gBUhN
Ne gan a ch cua ben nguyen co ten a va" en
phan t th 3 cua mang 7 ta dung enh sau:
Gh*ng 4. Gon tro #Sointer% 97
7g2h c fva"N
Kh o e ay ga tr cua ben va", ta dung enh sau
v c 7g2hN
Ne g mot mang con tro en ham, ta kha bao ham
nh sau:
void 2u*cB?i*t 0gh@N
Kh o ham 2u*cB?@ nhan tham so a mot con tro, tro
en mang cac con tro nguyen. Thong thng mang con
tro thng dung e u tr cac con tro en chuo. V du:
cha" 0gBUhN
0gUh c MChuoi thu *hatMN
%
%
%
0gZh c MChuoi thu #uoiMN
V du:
Tao mot ham thong bao o v mot ma o cho
trc
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 dung con tro tro en mot con tro khac,
tnh huong nay go a tro gan tep. Ne kha bao con tro
nay ta dung cu phap nh sau:
t60e va"_*a#eN
9- ShaQn Z. MgoFn ng*N la"= trLnh G
i*t 7N
Kh o x a mot con tro en mot con tro so nguyen,
e truy cap en ga tr gan tep nay ta dung: 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 ben con tro cuc bo c kha bao, nhng trc
kh gan mot ga tr no se cha mot ga tr khong xac
nh. Ben toan cuc se t ong gan ga tr NaLL. Neu s
dung ben con tro kh cha xac nh cho no mot ga tr
hoac o tng, chng trnh se b o.
1.%/. CB@ IJBT =>UX
Gh*ng 4. Gon tro #Sointer% 99
Mot trong nhng van e phc tap nhat cua con tro
o a con tro ham. Tuy ham khong pha a mot ben
nhng no van co san mot a ch trong bo nh va co
the gan a ch nay cho con tro. Na ch nay a em
vao cua ham va no a a ch c s dung kh go ham.
Neu co mot con tro en ham, kh o ta co the go ham
thong qua con tro nay. Con tro ham cung co the tham ga
nh a mot tham so cua ham khac.
Ta co the nhan a ch cua ham bang cach s dung
ten ham ma khong co cac tham so. Xet 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?tAualt@N
else 0"i*t2?tNot Aualt@N
4
Kh go ham chec5 co ha con tro k t va mot con tro
ham. Ben trong ham chec5, cau enh ?c#0@?aX $@ thc
chat a go ham st"c#0 c tro b c#0 v ha tham so a
166 ShaQn Z. MgoFn ng*N la"= trLnh G
va $. No cung a mot cach go ham thong qua con tro.
Cach th ha nh sau:
c#0?aX $@N
Ta cung co the go ham chec5 bang cach s dung
trc tep ham 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?tAualt@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
Chng trnh sau kem tra mot chuo co pha a so hay
Gh*ng 4. Gon tro #Sointer% 161
khong? Neu a so th so sanh theo keu so, neu a chuo
so sanh theo dang chuo.
1.%1. C>RH H=>WI VBG @=LW YBG@A
1.#1.1. (a< <hat bo nh baWng ha$/ /a!!oc("
Cap phat ong a chng trnh se nhan bo nh kh
thc th, ham ho tr cho cap phat ong trong C a #alloc?@
(cap phat). Ham nay nam trong th ven stdli$%h%
Cu phap void #alloc?i*t si8e@
Ham #alloc se tra ve con tro keu void eu nay co
ngha a ta co the gan cho mo keu con tro, va con tro
nay tro en b?te au ten cua vung c cap phat, vung
nh nay a mot day cac b?te en tep nhau. Neu bo nh
khong u cap phat, ham cho con tro ga tr NaLL. V du:
Cha" 0N
P c #alloc?BUUU@N
Cap phat 1000 b?te en tuc trong bo nh, va 0 se tro
en b?te au ten trong 1000 b?te va cap phat. Trong v du
tren khong bat buoc con tro co keu g e nhan ga tr
tra ve cua ham #alloc. Con tro void se t ong chuyen
o keu cho phu hp.
1.#1.2. %iai <hong bo nh baWng ha$/ :ree("
Ham 2"ee?void *a#e@ ga phong con tro m c
cap phat b ham #alloc. Ham 2"ee nam trong th ven
stdio%h.
1.%2. $BGI \BR P>R@ YQ? PLWZ SB@ IJBT
1.#2.1. Xac +nh con tro tr'c khi ,' ;ung
162 ShaQn Z. MgoFn ng*N la"= trLnh G
Chu y trong qua trnh oc va gh d eu vao con tro.
Neu con tro cha xac nh th vec oc se cho mot ga tr
khong mong muon, neu gh co the ta se gh e en ma
hoac a d eu cua chng trnh. 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
Chng trnh tren se gan ga tr 10 vao mot v tr nao
o trong bo nh ma ta cha xac nh b v con tro 0 cha
bao g c gan mot ga tr cu the. Trong trng hp
chng trnh nho co the khong gay anh hng nheu, neu
chng trnh qua n, ga tr cua 0 co the a mot v tr
nao o cua d eu, he eu hanh, ma chng trnh.
1.#2.2. KhoDng neDn gan 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 ham 0"i*t2 khong n ga tr cua x no ch n
mot ga tr khong xac nh b v enh gan 0c7 a sa. Ne
sa o chng trnh nay, ta dung enh 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
Chng trnh tren dung con tro 0B e n cac k t cha
trong s ra man hnh. OU ay s ch gan cho 0B co mot an.
Vong ap au ten 0B tro en phan t au ten cua s.
Tuy nhen vong ap th ha 0B a tang en 1, do o no
khong tro en phan t nam ben tra nhat cua s v
vay st"c#0?sXMdo*eM@ khong cho ket qua chnh xac. Ne
khac phuc o tren ta a enh 0Bcs vao trong vong ap.
1.%3. C>CO =BTZ IJ>cS @A=ZQGX P>U V>UZ I>GH
1.#3.1. (aDu hoi traTc nghie/
C>CO 1. Cho bet ket qua hen ra man hnh
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 bet ket qua hen ra man hnh
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 bet ket qua hen ra man hnh
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*MX0@N
7 c 7 2N
0"i*t2?Medl*MX7@N
0"i*t2?Medl*MX0@N
C>CO %. Cho bet ket qua hen ra man hnh
i*t 0X agBUhN
%
%
%
2o"?i c UN i K BUN i@ agih c i BN
0 c fag9hN
0"i*t2?Medl*MX0@N
0 c 0 2N
0"i*t2?Medl*MX0@N
0 c 0 YN
Gh*ng 4. Gon tro #Sointer% 164
0"i*t2?Medl*MX0@N
1.#3.2. Ba$i ta<
C>CO 1. Nhap so t nhen *, cap phat cho con tro 0 * so
nguyen trong bo nh. Nhap day cac so nguyen vao 0. Tm
so n nhat va so nho nhat cua day. Nem trong day co
bao nheu so dng, bao nheu so am, bao nheu so U ? Loa
nao nheu nhat ?
C>CO 2. Cap phat bo nh va nhap mot day so bat ky
]
1
@ ]
2
@...@ ]
n
. In ao ngc day o, v du cho day B V 9 R, n ra:
R 9 V B. Sap xep day tang dan, n day. Sap xep day
gam dan, n day.
Gh*ng +. Ka'1 #Wunction% 167
C=DL@A -. H>UX (.O@SIZB@"
1.%%. 3>d@A IBM@A NO>WI SOT> XBGI =>UX
Dang tong quat cua mot ham:
"etu"*_t60e 2u*ctio*_*a#e?0a"a#ete" list@
3
$od6 o2 the 2u*ctio*
4
Keu tra ve co keu d eu bat k, ngoa tr keu
mang. Danh sach tham so cach nhau b dau phay. Ham
co the co tham so hoac khong. Tat ca cac tham so cua
ham pha c kha bao mot cach reng bet.
2?t60e va"BX t60e va"2X `X t60e va"N@%
Ne kha bao mot ham, ta dung khuon dang 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 ham, ta dung cu phap
2u*ctio*_*a#e?0a"a#ete"BX 0a"a#ete"2X `X 0a"a#ete"N@; Neu
ham khong co tham so hnh thc ta dung Fu*ctio*_*a#e?@N
1.%,. C>WS FO>GI H=>dX PZ SOT> =>UX
Mo ham a mot kho enh reng bet, ta khong the
truy cap b mot cau enh kho khac. V du nh nhay
t ham nay en ham khac. Ma tao nen than ham c
an dau o v nhng chng trnh khac ngoa tr ben cuc
16- ShaQn Z. MgoFn ng*N la"= trLnh G
bo hoac nhng d eu khac. No co the tac ong hoac
khong o v phan khac cua chng trnh. No cach khac,
ma va d eu trong ham nay khong the tng tac v
ben va ma trong ham khac. Ben nh ngha ben trong
ham go a ben cuc bo, va no se kh tao kh vao ham
va huy bo kh thoat kho ham. Ben cuc bo khong g
ga tr kh thoat kho ham. Trong C, khong cho phep nh
ham trong ham.
1.%-. T=>X \BR SOT> =>UX
Trong mot ham neu s dung tham so, no pha c
kha bao ben va nhan ga tr cua cac tham so. Cac ben
nay c go a tham so hnh thc. Ben nay gong nh a
ben cuc bo ben trong ham va c tao ra kh vao ham va
b huy kh thoat kho ham. 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. %oi ha$/ theo tha/ tr 1a$ theo tha/ chieu
Trong hau het cac ngon ng ap trnh, co ha cach
g tham so en chng trnh con:
1. G theo ga tr: sao chep ga tr cua tham so vao
tham so hnh thc cua chng trnh con. Trong trng hp
nay, mo thay o tham so hnh thc khong anh hng en
tham so.
2. G theo tham cheu: a ch cua tham so se c
sao chep en tham so hnh thc. Kh o, mo thay o tren
Gh*ng +. Ka'1 #Wunction% 169
tham so hnh thc 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?Med2cedMXtXsA"?t@@N
getch?@N
4
i*t sA"?i*t 7@3
7 c 7 7N
"etu"* 7N
4
Trong v du tren, ga tr cua tham so tcBU c sao
chep en tham so hnh thc 7. Kh gan 7c77 ch co ben 7
thay o trong kh o ga tr cua t van g nguyen.
Ne g mot tham cheu en ham ta s dung con tro.
Kh o a ch cua tham so se c truyen cho tham so
hnh thc. Neu trong ham co thay o ga tr cua tham so
hnh thc, se thay o ga tr cua 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 /ang +en ha$/
Kh g mang en ham, ta g a ch cua mang en
116 ShaQn Z. MgoFn ng*N la"= trLnh G
ham, trong trng hp nay mo thay o tren mang ben
trong ham se am thay o ga tr mang 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 en ham #ai* thong qua dong
enh DOS. Tham so nay c vet sau ten chng trnh. Co
ha tham so c xay dng san trong ham #ai*?@, o a"gv
va a"gc dung e nhan tham so t dong enh. a"gc cho
bet so tham so c g en ham #ai*?@ thong qua cau
enh va o a mot so nguyen, co ga tr t nhat a 1 b
v ten cua chng trnh a tham so au ten. Tham so a"gv
a mot con tro en mot mang con tro k t (mang cac
chuo). Tat ca cac tham so trong dong enh a chuo k t.
Cac so neu co se c chuyen o b ng dung. Dang
tong quat cua ham #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?tou 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 cua dong enh DOS cach nhau t nhat a
mot khoang trong. 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?tou #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 cach e thoat kho ham, thc hen en cau
enh cuo cung, hoac gap enh "etu"* au ten. Mot ham
co the cha nheu enh "etu"*.
Tat ca cac ham eu tra ve mot ga tr, ngoa tr
ham co keu void. Neu ham khong pha keu void ma ta
khong tra ve mot ga tr nao, chng trnh se tra ve mot
ga tr bat k nao o. Neu ham co tra ve mot ga tr
nao o, no co the tham ga vao beu thc. Ham co the
112 ShaQn Z. MgoFn ng*N la"= trLnh G
tra ve keu con tro, kh o kha bao keu d eu tra ve
pha ro rang, v du ta khong the tra ve keu con tro i*t
e tra ve keu con tro cha".
Thong thng co ba oa ham c ban.
1. Tnh toan va tra ve mot ga tr.
2. Ham thao tac tren thong tn va tra ve mot ga tr
cho bet thao tac co thanh cong hay khong.
3. Ham khong tra ve mot ga tr nao. Tat ca cac
ham khong tra ve ga tr eu pha kha bao keu void.
1.%#. 6QG NO^
Mot ham c go a e quy neu mot cau enh nao
o trong than ham go en chnh no. Kh go e quy, tap
tat ca cac ben cuc bo va cac tham so se c u tr
trong stac5, ma ham se thc th t nh stac5.
Go e quy khong pha a tao mot phen ban m
cua ham, ch co nhng ben a va ang hoat ong a
m, mo an tra ve trong go e quy, cac ben nay
se b huy kho stac5 va chng trnh quay a em go ham.
Cac ham e quy thng thc th cham hn cac thuat toan
tng ng khong e quy. Go e quy cung co kha nang
gay tran stac5. Nem thuan ten cua e quy a tao nhng
chng trnh n gan hn va ro rang hn, v du nh thuat
toan Auic5so"t kho ca at bang cach ap. Kh s dung
e quy pha co eu ken dng. 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 ngha mot ham co so tham so thay
o kh go ham, v du nh ham 0"i*t2. Ne nh ngha mot
ham theo dang nay ta them dau 3 cham vao sau tham so
cuo cung. V du:
i*t 2B?i*t aX i*t $X `@
Kh nh ngha ham, ta s dung cu phap tng t. Mot
ham s dung tham so ben o pha co t nhat mot tham
so thc s. V du vet ham tnh tong cac so nguyen cho
en kh gap 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 hoi traTc nghie/
C>CO 1. Cho bet ket qua tren man hnh
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 bet ket qua tren man hnh
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 bet ket qua tren man hnh
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 bet ket qua tren man hnh
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. Vet mot ham o mot so thap phan sang so nh
phan va ngc a.
C>CO 2. Vet ham o mot so thap phan sang he thap uc
phan va ngc a.
C>CO 3. Vet ham tnh x
n
11+ ShaQn Z. MgoFn ng*N la"= trLnh G
C>CO %. Vet ham Max, mn, trung bnh tm so n nhat cua
mot day so cho trc.
C>CO ,. Vet ham o ch hoa sang thng va ngc 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
Cau truc a tap cac ben c tham cheu thong qua
mot ten, cau truc cho phep ta g mo quan he thong tn
ga cac ben v nhau. Ben ben trong cau truc go a
thanh ven. Tat ca cac thanh ven cua cau truc co mo
quan he logic v nhau. Kha bao:
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 bao keu cau truc co ten a add, va ben cau
truc keu add co ten a add_i*2o". Ne kha bao mot ben
cau truc, ta co the kha bao trc tep trong uc kha bao
keu hoac co the kha bao reng bet theo cu phap sau:
st"uct Kst"uct*a#eL Kva"*a#eLN
Kh kha bao mot cau truc, trnh ben dch se cung cap
11- ShaQn Z. MgoFn ng*N la"= trLnh G
ay u bo nh cho cac thanh ven. Ta co the kha bao
nheu ben cau truc kh kha bao cau truc.
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 xuat en cac thanh ven cua cau truc:
Kva"*a#eL%K#e#$e"L
Ta co the gan cac cau truc cung keu cho nhau.
1.22.1. Yang cau truc
Cach thng dung v cau truc o a: mang cau
truc. Cach kha bao 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
Mang cau truc gong nh mang thong thng. Tc a
mo phan t cua mang a mot ben cau truc. Ta co the
truy xuat en tng thanh ven cau truc bang cu phap
st"uct_va"gi*de7h%K#e#$e"L%
1.22.2. %i cau truc +en /ot ha$/
Ta co the g tng thanh ven cua cau truc en
ham. Neu muon g a ch cua tng thanh ven en
ham, them toan t f.
Ta co the g toan bo cau truc en ham. Kh o
cach g tham so a theo tham tr. Mo thay o ben trong
cau truc se khong anh hng en ben ngoa ham.
1.22.3. (on tro cau truc
Kha bao:
st"uct *a#e va"N
Dung con tro cau truc e g cau truc en ham,
co the u g nhng thay o ga tr cua cau truc kh
thoat kho ham.
Neu g cau truc en ham trong trng hp n gan
t thanh ven chng trnh se g cau truc en stac5. Neu
cau truc qua nheu thanh ven hoac thanh ven co the
a mang hoac cac thanh phan c cap phat ong, kh
o co the gay tran stac5. Ne ga quyet van e nay ta
s dung con tro cau truc. Kh g con tro en cau truc,
ch co a ch cua cau truc g en stac5, eu nay
am cho ham thc th nhanh hn. Nem thuan th ha kh
ham can thc s tham cheu en cau truc that cua ben
cau truc. Ne ay a ch cau truc, ta dung toan f trc
126 ShaQn Z. MgoFn ng*N la"= trLnh G
ben.
Ne truy cap en cac thanh ven trong con tro cau
truc ta dung cu phap: 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 CLA 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 tKCLAN t@ N
4
1.22.#. Yang 1a$ cau truc beDn trong cau truc
Thanh ven cua cau truc co the a mot mang. V du
ta co cau truc sau:
st"uct 7 3
i*t agBUhgBUhN BU 7 BU a""a6 o2 i*ts
2loat $N
4 6N
Kh o e truy cap en phan t th 2, 3 cua thanh
ven a ta dung cu phap:
6%agBhg2h
Thanh ven cua cau truc co the a mot cau truc
khac. Xet 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 xuat en tng thanh ven cua cau truc theo th
t t ngoa vao trong. C cho phep co 15 mc cau truc
ong nhau.
1.22.2. &r'$ng bit
Trng bit cho phep ta truy xuat en tng phan t
theo bit, mot va y do e s dung trng bit a:
Neu bo nh b g han, ta co the u tr mot va
ben logic trong mot b?te.
Thong tn trang tha cua mot thet b truyen co the
ma hoa thanh mot hoac nheu bit trong mot b?te.
Mac dau cac tac vu nay co the thc hen c nh
vao toan t bit, tuy nhen s dung trng bit se thuan
ten hn. Kha bao 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 keu cua trng bit, le*gth a o da tnh theo
bit cua trng. Trng bit co o da bang 1 pha kha bao
a u*sig*ed. Trng bit thng s dung kh phan tch au
vao cua mot thet b phan cng.
1.,3. 0ZQMO O@ZB@\
u*io*s a mot v tr trong bo nh c cha se cho ha
hay nheu ben v nheu keu d eu khac nhau ta nheu
th em khac nhau. Kha bao keu u*io*s gong nh kha
bao keu cau truc. Dang tong quat 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 bao nay khong tao bo nh cho cac ben. Ta co
the kha bao ben hoac bang cach at ten cua no
cuo kha bao hoac s dung kha bao phan bet. Ne kha
bao ben keu u*io*s ta dung cu phap nh sau:
u*io*s u*i_t60e u*i_va"N
V du:
u*io*s u_t60e c*vtN
Trong ben c*vt ca ben nguyen i va ben k t ch
cung cha se mot vung nh, i ha b?te va ch mot b?te.
12& ShaQn Z. MgoFn ng*N la"= trLnh G
Kh kha bao mot ben u*io*s, chng trnh se cung cap
bo nh u e u tr ben co kch thc n nhat. Ne
truy cap vao thanh ven cua mot ben keu u*io*s ta dung
toan t cham ?%@ va toan t -L.
S dung keu u*io*s gup snh ra ma phu thuoc vao
may. B v trnh ben dch se kem tra kch thc that cua
cac thanh ven, do o ap trnh ven khong pha quan tam
en kch thc cua keu i*t, lo*g, v.v.
Thong thng keu u*io*s dung chuyen o keu d
eu, b v ta co the tham cheu en d eu ben trong
u*io*s theo nheu cach khac nhau. V du ta co the thao tac
tng b?te cua keu dou$le e thay o o chnh xac hoac
thc hen thao tac am tron.
Ne heu ro van chuyen o keu ta xet v du vet
mot so nguyen ngan en a. Th ven chuan khong nh
ngha ham vet mot so nguyen ngan vao a. Ta co the
vet mo keu d eu vao a bang ham 2!"ite?@. Tuy
nhen s dung keu u*io*s ta co the vet tng b?te vao
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@"
Keu et ke a tap cac hang so nguyen c at
ten. Keu et ke thng xuat hen trong cuoc song. V du
keu ten te My : 0e**6, *ic5el, di#e, Aua"te", hal2-
dolla", dolla". Keu et ke c nh ngha gong nh keu
cau truc. Cu phap kha bao nh sau:
e*u# e*u#*a#e 3e*u#list4
Ne kha bao ben keu 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 bao nh tren, ta co the vet:
#o*e6c*ic5elN i2 ?#o*e6ccdolla"@
Nem chnh cua keu et ke o a dung k heu a
den cho mot so nguyen. Mo k heu se cho ga tr n hn
nhng k heu ng trc no. Ga tr au ten bat au
bang 0. V du: 0"i*t2?Med edMX 0e**6X di#e@ se n ra man
hnh ga tr 0 va 2. Ta cung co the ch nh mot ga tr cu
the cho mot hoac nheu k heu, bang cach gan mot ga
tr nguyen sau k heu ta uc kha bao. V du:
e*u# coi* 30e**6X*ic5elXdi#eX
Aua"te"cBUUXhal2_dolla"Xdolla"4N
Kh o ga tr cua cac k heu nh sau:
Pe**6 U
*ic5el B
di#e 2
Aua"te" BUU
hal2_dolla" BUB
dolla" BU2
Kh s dung keu e*u# ta chu y mot so o sau:
#o*e6cdolla"N
0"i*t2?MesMX #o*e6@N
Hoac neu dung enh sau:
st"c06?#o*e6X tdi#et@N
B v dolla", #o*e6 ch a nhng ga tr nguyen co
ten, no khong pha a chuo. Ne hen cac ga tr cua
mot keu e*u# ra man hnh ta ch co mot trong ha cach nh
sau:
Cach 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
Cach 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@
Keu cau truc va keu u*io*s thng tao ra cac ben
co kch thc khac nhau va kch thc that cua ben phu
thuoc vao may. Toan t si8eo2 dung e tnh kch thc
that cua mot ben hoac mot keu gup oa tr ma
chng trnh phu thuoc vao may. Trong keu cau truc, kch
12- ShaQn Z. MgoFn ng*N la"= trLnh G
thc bao g cung n hn hoac bang tong kch thc
cua cac thanh ven. Toan t si8eo2 a mot toan t thc
hen ta th em thc th chng trnh, tat ca cac thong tn
ve kch thc cua mo ben ch c bet ta th em
ben dch. Neu nay cung rat co y ngha o v keu
u*io*s b v kch thc cua keu u*io*s uon bang hoac
n hn kch thc cua thanh ven n nhat.
1.,-. 0ZQMO ]B @ADLUZ ]OU@A Ya@= @A=i>
Ta co the nh ngha ten keu d eu m bang t
khoa t60ede2. Ta khong to ra mot keu d eu thc s ma
ch tao ra mot ten m cho keu d eu a ton ta. Cong
vec nay gup ta tao ra mot chng trnh phu thuoc vao
may tr nen kha chuyen (=ortable) hn va chng trnh de
oc hn.
t60ede2 t60e *e!*a#eN
t60e a keu d eu bat k, *e!*a#e a ten m cho
keu nay. V du:
t60ede2 i*t so*gu6e*N
Kh o so*gu6e* a ten khac cua keu i*t, e tao
mot ben keu i*t ta co the vet:
so*gu6e* *N
Luc nay keu so*gu6e* co the dung e nh ngha
keu khac, 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 hoi 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 bet mot th snh au hay rt trong ky th tuyen
snh, can bet cac thong tn sau:
Ho ten : ho va ten cua th snh
KV : th snh thuoc khu vc nao? ( 1, 2 hay 3 ).
NH : th snh thuoc nhom nao ? ( 1, 2, hay 3).
TD : tong dem ba mon th .
a) Hay nhap vao mot danh sach 100 th snh gom Ho
ten, KV, NH, TN. Xet xem Ket qua th snh nay au hay rt
da vao bang em chuan sau :
V du : Th snh Khu vc 1 , Nhom 2, co Tong em ?
17.5 th au, ngc a th rt.
b) In danh sach a sap xep theo trat t gam cua TN
en man hnh, gom cac muc Ho ten, KV, NH, TN va Ket qua
au, rt.
c) Ch n danh sach nhng ng au en man hnh
theo mau:
C>CO 2. Mo em M(x,y) trong mat phang 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
Vet chng trnh v cac yeu cau sau :
Tao mot ham nhap vao toa o cua ba em A, B, C.
Tao mot ham kem tra xem co mot cap em nao trung
nhau khong ?. Neu co th bat nhap a cho en kh c ba
em A, B, C phan bet.
Tao mot ham tnh o da cac canh AB, BC, AC theo
cong thc :
Neu A(x
a
,y
a
), B(x
b
,y
b
) th
Tao mot ham kem tra xem AB, BC, AC co pha a ba
canh cua mot tam gac khong? ( Hd : tong ha canh pha
n hn canh con a ).
Neu khong pha th n ra ch " Khong pha Tamgac" ,
ngc a th tnh va n den tch cua tam gac ABC en man
hnh theo cong thc Herong :
,
v P a na chu v tam gac : P = (AB+BC+AC) / 2 .
C>CO 3. Vet mot chng trnh C e thc hen cac yeu cau
sau :
Nhap so nguyen N ( 0<N<100) va mot danh sach N hoc
snh v cac thong tn ve: ho va ten, chuyen ban (A , B, C)
va cac em Toan, Van, Snh keu thc.
V mo hoc snh hay tnh em trung bnh nh sau :
DTB =(2*Toan+ Snh+Van)/4 neu em thuoc chuyen ban
A
Gh*ng 7. Kie>u Ttructure,@ cnion@ Hnu1erate 3a' c,erA[e;ine 11
=(Toan+2*Snh+Van)/4 neu em thuoc chuyen ban B
=(Toan+Snh+2*Van)/4 neu em thuoc chuyen ban C
Chuyen ban nao co nheu em co em trung bnh ? 5
nhat ?
C>CO %. Nhap so nguyen N ( 0<N<50 ) va N hoa n tnh
ten en, mo hoa n co ho ten chu ho, ch so en
ke thang trc (Socu), ch so en ke thang nay (Somo),
va nh mc (Dmuc) en hang thang cua ho.
Hay tnh ten en cho mo hoa n, bet rang:
Mo kw trong nh mc co n ga a 5,
100 kw au ten tren nh mc co n ga 8,
T kw th 101 tren nh mc tr en co n ga 10.
Tnh tong so ten thu c t tat ca cac hoa n.
Tm trong cac hoa n xem co ho nao ten a Tuan
khong ? Neu co th n en man hnh cac hoa n co chu
ho ten a Tuan gom cac thong tn ve Socu, Somo, Dmuc va
Ten en pha tra.
C>CO ,. Nhap mot danh sach N ng gom Ho ten, Chc vu
(GD, TP, PP, NV) va Mc ng thang (ML) .
Tnh Phu cap ng (PC) cho tng ng nh sau :
PC = 50% Mc ng thang neu chc vu a GD
= 40% " " " " TP
= 30% " " " " PP
= 20% " " " " NV
Tnh Thu nhap (TN) trong thang cho tng ng :
TN = Mc ng + PC
12 ShaQn Z. MgoFn ng*N la"= trLnh G
No ho ten cua mo ng ra ch thng het, reng
ch ca au t thanh ch hoa, chang han: Nguyen Th Loan.
Yeu cau phan nay vet thanh mot thu tuc.
In Ho ten, Chc vu, Mc ng, Phu cap va Thu nhap cua nhng
ng co thu nhap cao nhat en man hnh.
C>CO -. Vet chng trnh to chc u tr cac d eu
cac cau tren (cau 52 en cau 56) d dang mot tap tn.
Trong o, tao cac ham oc d eu t ;ile, gh d eu vao
;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
Mot trong nhng ham vao/ra n gan nhat a:
getcha"?@, oc mot k t t ban phm, va ham
0utcha"?@vet mot k t ra man hnh. Ham getcha"?@
ng dung go vao mot phm va tra ve ga tr cua phm
o, phm va nhan t ong hen en man hnh. Ham
0utcha"?@ vet mot k t en man hnh ta v tr con tro. Ha
ham nay c nh ngha trong th ven stdio%h Dang tong
quat cua ha ham nay nh sau:
i*t getcha"?void@
i*t 0utcha"?i*t c@
Ham getcha"?@ tra ve mot so nguyen. Tuy nhen ta
cung co the gan cho ben keu ch b v k t cha trong
b?te thap (b?te cao co ga tr bang 0). Ham getcha"?@ tra
ve ga tr OF neu xuat hen o.
Ham 0utcha"?@ nhan tham so a keu nguyen, tuy
nhen ta co the truyen tham so a k t, ch co b?te thap
m cha ga tr g en man hnh. Ham 0utcha"?@ tra ve
k t c vet, neu xuat hen o tra ve ga tr OF. OF a
mot 1acro co ga tr =-B. V du sau ay nhap vao mot k
t neu ch thng chuyen sang hoa, neu ch hoa chuyen
sang ch thng va n ra man hnh. Chng trnh ket thuc
neu nhap vao dau cham (%).
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. Yot 1an +eN 1i ha$/ getchar
Ham getcha"?@ c ca at theo cach ma cac k t
c go se nam trong vung em cho en kh bam phm
enter. Do o ta pha nhan phm enter trc kh muon g mo
th en chng trnh. Ham getcha"?@ cung ch nhan mot k
t ta th em no c go, trong kh trong vung em co
the co nheu hn mot k t, do o kh s dung ham nay
se gap nhng o ma ta khong bet ta sao.
1.28.2. Bien the* cua ha$/ getchar("
Ha ben the cua ham getcha"?@ o a ham:
i*t getche?@
i*t getch?@
Thong thng ha ham nay ca at trong th ven
co*io%h. Ham getch?@ ng dung nhan mot phm va
tra ve phm c nhan. Phm c nhan khong xuat hen
tren man hnh. Ham getche?@ tng t nh ham getch?@
nhng phm o xuat hen tren man hnh. Thong thng ta
s dung ham getch?@ e nhan mot phm, co the phm o
khong xuat hen tren man hnh nh phm enter, mu ten, .
Gh*ng -. Va'o0^a <*N lie"u 14
V du sau s dung ham getch?@ nhap mot k t va
hen ngay ap tc phm c go bang ch hoa neu nhap
vao ch thng va ngc a. Chng trnh ket thuc kh
ng dung bam 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
Ham gets?@ oc mot chuo k t nhap t ban phm va
at no vao a ch c tro b tham so. Ta co the go
cac k t t ban phm cho en kh gap phm enter. Lu y
chuo va nhap khong cha k t xuong dong, ta cuo
chuo chng trnh se t ong chen k t ket thuc chuo.
Dang tong quat cua ham nh sau:
cha" gets?cha" st"@
Trong o st" a mang hoac con tro en chuo k t,
ham nay tra ve chuo k t ma no oc c. V du chng
trnh sau oc mot mang cac k t va n o da ra man hnh.
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
Can than kh s dung ham gets?@ b v no khong
kem tra ben cua mang kh nhap d eu. Co the ng
dung nhap vao chuo co o da hn kha nang kh kha
bao.
Ham 0uts?@ vet mot chuo k t ra man hnh, sau kh
vet chuo xong con tro t ong xuong dong. Cu phap:
i*t 0uts?cha" st"@N
Ham 0uts?@ cung nhan dang c cac k t ac bet
nh ham 0"i*t2?@ v du nh dltd. Ham 0uts?@ ch hen th
chuo k t, d eu dang khac khong hen th c bang
ham nay. Ham 0uts?@ thc th nhanh hn ham 0"i*t2?@.
Ham tra ve OF neu gap 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 vet va tra ve ga tr am neu
xuat hen o. Chuo eu khen bao gom ha dang, keu k
t se c n ra man hnh va keu k t ac ta cach nh
dang s xuat hen cua tham so. Nac ta khuon dang bat
au bang dau e va theo sau a ma nh dang. So nh
dang bang so tham so xuat hen sau. Nac ta khuon dang
va tham so khp nhau theo trat t xuat hen.
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*
Bng 8-1. CFc 5( tx <ipu 5hiP* c)a h# 0"i*t2?@
Bo sung cac ten to trc k heu ac ta
-eg*hcode: quy nh o rong cua tham so
- egU*hcode: neu tham so cha u o da, them so
khong vao au
- eg7%6hcode: quy nh o chnh xac cua so thc
- eg-*hcode: canh e ben tra
- K heu J: trc 7 va n so he 16 theo dang U7, U. J
trc o, n so U au trc so he 8.
eglhcode: n ga tr a so nguyen da, code: u, o, 7, i, d
eghhcode: n ga tr so nguyen ngan, code u, o, 7, i, d
egLhcode: n ga tr keu 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 ga tr a gan thanh cong, neu xuat
hen o tra ve ga tr OF, chuo eu khen cho bet co
bao nheu ga tr c nhap.
Chuo eu khen bao gom ba oa sau:
Nac ta khuon dang
Cac k t trong
Cac k t khong pha khoang trong
Chuo ac ta bao gom cac k t trong bang 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*%
Bng 8-2. CFc 5( tx <ipu 5hiP* c)a h# sca*2?@
- Noc mot so: ed, ei, eo, e7: nhap so nguyen. Ham
ngng oc kh gap mot k t au ten khong pha so.
Gh*ng -. Va'o0^a <*N lie"u 19
- Noc mot so nguyen khong dau: eu
- Noc tng k t: ec
- Noc mot chuo es: ham ngng oc kh gap mot
khoang trong au ten, k t xuong dong, enter.
- Scanset: ch nhap nhng k t c nh ngha trong
tap sca*set, ngng oc kh gap mot k t au ten khong
co trong scanset.
- Mot k t khong pha a khoang trong: ham sca*2?@
se oc k t o va bo qua khong gan cho ben nao.
- Noc mot trng nhng khong gan cho ben nao: e
- Ne oc mot so nguyen da them l, e oc mot so
nguyen ngan them h, vao trc. Cac bo ngha nay c
s dung cho d, i, o, u, 7
- Ngam nh, 2, e, g se oc mot so thc. Neu them l,
ham sca*2 se oc mot so dou$le, neu them L, ham
sca*2?@ se oc mot so lo*g dou$le%
Gh*ng 9. Eoc0(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 thong ;ile trong C c thet ke e am vec v
nheu thet b bao gom thet b au cuo, o a, bang t.
Mo chuyen o he thong ;ile trong vung em vao cac
thet b ogc go a uong. Tat ca cac uong co cach hoat
ong nh nhau. B v uong oc ap v thet b, cung
mot ham ta co the vet t a, cung co the vet en
mot thet b khac v du nh co*sole. Co ha keu uong: van
ban va nh phan.
Luong van ban a cac k t. C chuan cho phep (nhng
khong yeu cau) mot uong van ban thanh tng dong,
mo dong ket thuc bang k t xuong dong.
Luong nh phan a chuo cac b?te, so k t c vet
c oc co cung so b?te v thet b.
1.32.2. Zi!e
Wile a mo th co tren a, ta co the ket hp uong
v ;ile bang thao tac m. Kh mot ;ile c m, thong tn
chuyen o qua a ga ;ile va chng trnh.
Trong ;ile ho tr kha nem v tr, kh mot ;ile c m
v tr con tro en au ;ile. Mo k t kh c vet/oc tren
;ile am cho con tro ;ile tang en mot v tr.
Ne ngat ket hp ga mot uong va ;ile ta s dung
enh ong tap tn. Kh ong mot tap tn, no dung neu co
se c gh en thet b, qua trnh nay am sach vung em
1&2 ShaQn Z. MgoFn ng*N la"= trLnh G
va no am bao rang khong co thong tn nao tnh c b
vet en a. Tat ca cac ;ile se c ong t ong kh
chng trnh ket thuc bnh thng, hoac gap enh tra ve
t ham #ai*?@ hoac enh e7it. Cac ;ile se khong c
ong kh chng trnh ket thuc bat thng, hoac b bo d.
Mo uong ket hp v ;ile co mot cau truc eu
khen c go FIL. Khong bao g thay o cau truc nay.
Muc ch chnh cua uong va ;ile a cung cap mot gao
den nhat quan. S dung uong at c tat ca cac thao
tac vao ra d eu. He thong se t ong chuyen o d
eu vao ra thanh uong e de quan 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. Eoc0(hi <*N lie"u treFn ;ile
1&
$egi**i*g o2 the 2ile%
"e#ove?@ "ases a 2ile%
22lush?@ Flushes a 2ile%
Bng 9-1. CFc h# t"* 2ile
Tat ca cac ham nay c nh ngha trong th ven
<stdio%hL. Con tro ;ile a mot con tro tro en cau truc
cua FIL, o a mot cau truc mo ta thong tn ve ;ile, bao
gom ten, trang tha va v tr hen ta cua ;ile. Kha bao FIL
02N
M mot ;ile:
02 c 2o0e*?cha" 2ile*a#X cha" #ode@N
M mot ;ile co ten a 2ile*a#e, v che o #ode.
2ile*a#e a ten ;ile va ng dan, #ode a oc hoac gh
keu van ban hay a nh phan. Neu 2o0e*?@ co o, tra ve
con tro NaLL
FIL 02N
02 c 2o0e*?Mtest%t7tMX M!M@N
Nong mot ;ile: i*t c 2close?02@N
Neu ong ;ile thanh cong, ham se tra ve mot ga
tr 0. ngoa ra ga tr khac 0
Vet mot k t vao ;ile: i*t c 0utc?i*t chX FIL 02@N
ch nh ngha keu i*t nhng ch co b?te thap m c gh
vao ;ile. Neu vet thanh cong, ham tra ve k t a vet,
neu khong tra ve ga tr OF.
Noc mot k t t ;ile: i*t getc?FIL 02@N tra ve mot
ga tr keu nguyen, tuy nhen k t c u b?te thap.
!?te cao se co ga tr = 0. Neu co o b?te cao co ga tr
khac 0. Kh gap cuo ;ile, ham tra ve ga tr OF. Tuy nhen,
1&& ShaQn Z. MgoFn ng*N la"= trLnh G
ham gap o cung tra ve ga tr OF.
V du ve ham 2o0e*?@, 2close?@, 0utc?@, getc?@ vet 2
chng trnh: tao mot ;ile t dong enh DOS (tng t nh copy
con). Hen no dung cua ;ile (tng t nh enh type trong DOS),
chng trnh sao chep mot ;ile.
Ta co the s dung ham 2eo2?@N e kem tra v tr cuo
;ile.
Ta co the thao tac ;ile v chuo k t: i*t c
20uts?cha" sX FIL 02@N gh mot chuo k t enh ;ile, ham
tra ve ga OF neu gap o.
Ham 2gets?cha" st"X i*t le*gthX FIL 02@N oc mot
chuo k t t ;ile cho en kh gap dong m hoac le*gth-B
k t c oc, chuo ket qua se ket thuc k t rong.
Ne xoa mot ;ile, "e#ove?cha" 2ile*a#e@N
Ham 2"e!i*d?FIL 02@N a con tro ;ile ve au ;ile 02.
Ham 2e""o"?FIL 02@N xac nh co hay khong mot
thao tac tren ;ile gap o.
Ham 22lush?FIL 02@N am sach uong ket hp 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. Eoc0(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%
Bng 9-2. The Legal &alues 2o" Mode
1.-%. `JQ>] P>U `jJZIQ
Cho phep oc va vet tren nheu keu d eu khac
nhau v nheu 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
Noc/gh d eu t ;ile, cou*t cho bet so ng, 2"ead?@
tra ve so o tng c oc, 2!"ite?@ tra ve so o
tng 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
Dch chuyen con tro ;ile en v tr *u#$6te tnh t o"igi*
O"igi* Mac"o Na#e
Begi**i*g o2 2ile SO_ST
Cu""e*t 0ositio* SO_CaR
*d o2 2ile SO_NC
Ne bet v tr hen ta cua con tro ;ile ta dung ham:
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
Noc/ gh d eu gong nh cac ham sca*2?@ va
0"i*t2?@.
1.-+. LOB?@A S=O>M@
1&+ ShaQn Z. MgoFn ng*N la"= trLnh G
Kh mot chng trnh thc th, co ba uong chuan t
ong m o a stdi*, stdout va stde"". B v cac uong
chuan nay a con tro ;ile nen cac ham tren ;ile eu co
the thc hen tren uong chuan. Kh s dung cac uong
nay ta khong can pha dung cac thao tac m, ong ;ile
thong thng.
Gh*ng 16. )ieQn ]* l? 3a' chu thch
1&7
C=DL@A 1/. TZQ?@ [DT F^W P>U S=OW
I=hS=
1.-4. k]Q`Z@Q
Dan hng Jde2i*e nh ngha mot nh danh va chuo
k t, chuo k t nay se thay the nh danh mo an xuat
hen trong ma nguon. Cu phap kha bao cua dan hng:
Jde2i*e #ac"o_*a#e cha"_seAue*ce
Chu y, ay khong co dau cham phay. Co the co
nheu dau trong ga nh danh va chuo k t. V du, muon
s dung t LFT thay cho ga tr B, va RIHT thay cho ga tr
U, ta co the kha bao ha dan hng Jde2i*e nh sau:
Jde2i*e LFT B
Jde2i*e RIHT U
Kh o cau enh sau se n ga tr U B 2 en man hnh.
0"i*t2?Med ed edMXRIHTX LFTX LFT B@N
Mot 1acro c nh ngha, no co the c s dung
a mot phan cua nh ngha 1acro khac. V du sau nh
ngha cac ga tr ON, TO va THRi
Jde2i*e ON B
Jde2i*e ONON
Jde2i*e ONTO
S thay the 1acro n gan a thay the nh danh bang
mot chuo k t ket hp v no, v vay neu muon nh
ngha mot o chuan ta co the nh ngha 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
Trnh ben dch se thc s thay the chuo Msta*da"d
e""o" o* i*0utl*M kh xuat hen nh danh _MS% Kh ben
dch, ham 0"i*t2?_MS@ thc s xuat hen a
0"i*t2?Msta*da"d e""o" o* i*0utl*M@N
Chuo van ban khong c thay the neu nh danh
at trong dau nhay kep. V du:
Jde2i*e this is a test
%%%
0"i*t2?MM@N
Khong n Mthis is a testM va n ra %
Neu chuo thay the nheu hn mot dong, ta co the
vet tep tren dong khac bang cach them dau \
($ac5slash) vao cuo dong.
Jde2i*e LON_STRIN Mthis is a ve"6 lo*g l
st"i*g that is used as a* e7a#0leM
Cac ap trnh ven thng s dung ch hoa e nh
ngha nh danh, trng hp nay se gup cho ng dung
oc chng trnh bet c rang o a mot 1acro c thay
the.
Thong thng cac 1acro c nh ngha au chng
trnh, hoac trong mot ;ile reng bet (v du ;ile %h).
Macro thng c s dung e nh ngha d,o 1a
thua"te (1agic nu1ber) xuat hen trong mot chng trnh. V du
ta co mot chng trnh nh ngha mot mang va co mot
va oan chng trnh truy cap en mang nay. Thay v ta vet
chnh xac kch thc cua mang b mot hang, ta co the
nh ngha kch thc b mot dan hng Jde2i*e va s
dung 1acro nay bat k kh nao can s dung kch thc cua
mang. Theo cach nay, neu muon thay o kch thc cua
Gh*ng 16. )ieQn ]* l? 3a' chu thch
1&9
mang, ta ch can thay o cau enh Jde2i*e va ben dch
a chng trnh. V du:
Jde2i*e MA_SI BUU
%%%
2loat $ala*cegMA_SIhN
%%%
2o"?icUN iKMA_SIN i@ 0"i*t2?te2tX $ala*cegih@N
%%%
2o"?icUN iKMA_SIN i@ 7 c $ala*cegihN
MA_SI nh ngha kch thc mang $ala*ce, neu kch
thc cua mang $ala*ce can thay o, ta ch can thay o
nh ngha cua MA_SI, tat ca cac tham cheu en kch
thc cua $ala*ce se t ong cap nhat.
1.38.1. Cnh nghKa Yacro giong ha$/
Dan hng Jde2i*e con co mot ng dung quan trong
khac o a ten 1acro co the co tham so. Mo an ten
1acro xuat hen, tham so a s dung trong nh ngha se
c thay the b tham so thc s tm thay trong chng
trnh. Dang nay ta con go a 1acro tng t nh ham. 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 chng trnh nay c ben dch, a trong nh ngha
1acro se c thay the v ga tr a -B va B. Dau ngoac
n bao quanh a e chac rang chng trnh am vec trong
mo trng hp. V du neu xoa dau ngoac n bao quanh a,
146 ShaQn Z. MgoFn ng*N la"= trLnh G
beu thc ABS?BU-2U@ se c chuyen o thanh -BU-2UKU |
-BU-2U i BU-2U. Trong trng hp nay se cho ket qua sa
yeu cau.
S dung 1acro gong ham thay the ham thc co mot
em thuan chnh a am tang toc o thc th cua
chng trnh b v khong co go ham. Tuy nhen, neu
kch thc cua 1acro n, no se tang kch thc cua
chng trnh en rat nheu b v co qua nheu ma trung
nhau.
1.-#. kQJJBJ
Dan hng Je""o" bat buoc chng ngng ben dch.
Muc ch chnh a dung cho g ro. Dang tong quat cua
mot dan hng Je""o" a:
Je""o" e""o"_#essage
e""o"_#essage khong c at ga cap dau nhay
kep. Kh dan hng Je""o" xuat hen, thong ep o se
hen th cung v nhng thong tn khac co the c nh
ngha b trnh ben dch. Thong thng dan hng nay
theo v cac dan hng ben dch co eu ken.
1.+/. kZ@SFO]Q
Dan hng Ji*clude ch dan cho trnh ben dch oc ;ile
nguon khac v ten cha trong dan hng Ji*clude. Ten
cua ;ile nguon co the at trong dau nhay kep (MM) hoac
dau om (KL). V du:
Ji*clude Mstdio%hM
Ji*clude Kstdio%hL
Ca ha eu ch dan trnh ben dch oc va ben dch
;ile teu e v cac ham th ven vao ra he thong.
Gh*ng 16. )ieQn ]* l? 3a' chu thch
141
Cac ;ile c chen co the co dan hng Ji*clude
ben trong, kh ta go a chen ong nhau. So cac mc ong
nhau ben o tuy theo trnh ben dch. Tuy nhen trong C
chuan quy nh co the co to a a 8 mc.
Ten ;ile co the at trong dau nhay kep hoac trong
cap dau om e xac nh cach thc tm kem. Neu at
trong cap dau om, chng trnh tm kem trong th muc c
nh ngha b trnh ben dch. Neu at trong dau nhay
kep, chng trnh tm kem trong th muc c ch ra ta uc
kha bao hoac trong th muc hen hanh.
Thong thng, ta s dung dau om e chen cac th
ven chuan va dau nhay kep e chen cac ;ile teu e do
ta vet ra.
1.+1. C=l I=a VZQC@ ]aS= SBW YZQ?O _ZQG@
Co mot va dan hng cho phep ta chon v tr ben
dch trong ;ile ma nguon. X y nay go a ben dch co
eu ken va c s dung rong ra trong cac phan mem
thng ma.
1.51.1. [i:= [e!,e= [e!i:= [en;i:
Dan hng nay cho phep ta dch eu ken mot oan
ma da vao ket qua cua beu thc hang. Cu phap:
Ji2 co*sta*t-e70"essio*
state#e*t
Je*di2
Neu hang theo sau Ji2 co ga tr ung th oan ma sau
o se c ben dch, ngoa ra bo qua oan ma o. Dan
hng Je*di2 anh dau ket thuc cua 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 MALZZ
0"i*t2?tCo#0iled 2o" a""a6 g"eate" tha* ZZ%l*t@N
Je*di2
"etu"* UN
4
Chng trnh nay se hen th thong ep en man hnh
b v MA L ZZ. Beu thc sau Ji2 pha c tnh toan ta
th em ben dch, do o no ch cha nhng nh danh
va hang a c nh ngha trc, khong c s dung
ben trong trng hp nay.
Dan hng Jelse gong nh menh e else trong C. V
du:
Si#0le Ji2Jelse e7a#0le%
Ji*clude Kstdio%hL
Jde2i*e MA BU
i*t #ai*?void@
3
Ji2 MALZZ
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 trng hp nay MA nh ngha KZZ, kh o ma sau
Ji2 khong thc hen va ma sau Jelse se c thc hen.
Dan hng Jeli2 gong nh Melse i2M tc a cac enh
i2 else en tuc nhau. Dang tong quat nh sau:
Ji2 e70"essio*
Gh*ng 16. )ieQn ]* l? 3a' chu thch
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 dung ACTI&_COaNTR e nh ngha k heu
ten te:
Jde2i*e aS U
Jde2i*e NLANC 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 NLANC
cha" cu""e*c6gh c t0ou*dtN
Jelse
cha" cu""e*c6gh c t2"a*ctN
Je*di2
Trong C chuan cho phep co 8 mc ong nhau, kh ong
nhau mo Je*di2, Jeli2, Jelse se ket hp v Ji2, Jeli2 gan
nhat. V du sau hoan toan hp e:
Ji2 MALBUU
Ji2 SRIAL_&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:
Mot cach khac e ben dch co eu ken o a
dan hng Ji2de2 va Ji2*de2 co ngha a di; <e;ine<e va di;
not <e;ine<e tng ng. Dang tong quat:
Ji2de2 #ac"o-*a#e
state#e*t seAue*ce
Je*di2
Neu #ac"o-*a#e a c nh ngha trc o bang
cau enh Jde2i*e, kho enh se c ben dch. Ca Ji2de2
va Ji2*de2 eu co the s dung Jelse va Jeli2. V du:
Ji*clude Kstdio%hL
Jde2i*e TC BU
i*t #ai*?void@
3
Ji2de2 TC
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
Chng trnh tren se n ra Hi Ted va RALPH *ot de2i*ed.
Ta co the ong cac dan hng Ji2de2 va Ji2*de2 8 mc
trong C chuan.
1.+2. kO@]Q`
Dan hng Ju*de2 ngha a dun<e;ineese xoa nh
Gh*ng 16. )ieQn ]* l? 3a' chu thch
144
ngha 1acro trc o, dang tong quat cua Ju*de2 nh sau:
Ju*de2 #ac"o-*a#e
V du:
Jde2i*e LN BUU
Jde2i*e ICTH BUU
cha" a""a6gLNhgICTHhN
Ju*de2 LN
Ju*de2 ICTH
at this 0oi*t $oth LN a*d ICTH a"e u*de2i*ed
Ca LN va ICTH c nh ngha cho en kh xuat hen
cau enh Ju*de2.
1.+3. ]Q`Z@Q]
Ta co the dung de2i*ed ket hp v Ji2 e xac nh
mot 1acro a c nh ngha hay cha. Dang tong quat
cua de2i*ed nh sau:
de2i*ed #ac"o-*a#e
Neu 1acro a c nh ngha, beu thc cho ga tr
ung, ngoa ra cho ga tr sa. V du e xac nh 1acro
MFIL c nh ngha hay cha ta co the dung mot trong
ha cach sau:
Ji2de2 MFIL
hoac:
Ji2 de2i*ed MFIL
Ta co the them dau ^ e phu nh menh e de2i*ed.
V du cau enh sau se c ben dch neu CBa cha c
nh ngha:
Ji2 ^de2i*ed CBa
0"i*t2?tFi*al ve"sio*^l*t@N
Je*di2
14+ ShaQn Z. MgoFn ng*N la"= trLnh G
1.+%. kFZ@Q
Dan hng Jli*e thay o no dung cua __LIN__ va
__FIL__, o a ha nh danh c nh ngha trc trong
trnh ben dch. Nnh danh __LIN__ cha so dong hen th
a ben dch. Nnh danh __FIL__ a chuo cha ten ;ile
nguon a va ang ben dch. Dang tong quat cua Jli*e:
Jli*e *u#$e" M2ile*a#eM
V *u#$e" a mot so nguyen dng bat ky va no a
ga tr m cua __LIN__, tuy chon 2ile*a#e a mot ten ;ile
hp e bat ky va no tr thanh ten m cua __FIL__.
Jli*e s dung trong cac tnh huong g ro chng trnh.
V du sau ch ra rang em dong se bat au bang BUU.
Cau enh 0"i*t2 se n ra ga tr BU2 b v no a dong th
3 cua chng trnh sau cau enh 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 toan t nay s dung v Jde2i*e. Toan t J (con
go a chuo hoa), a tham so vao dau nhay kep. Xet 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 thch
147
"etu"* UN
4
Toan t nay se ben dong:
0"i*t2?#5st"?I li5e C@@N
thanh dong:
0"i*t2?tI li5e Ct@N
Toan t JJ (con go a toan t ghep) ghep 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
Toan t nay se ben o:
0"i*t2?tedtX co*cat?7X 6@@N
thanh:
0"i*t2?tedtX 76@N
1.+-. C>WS X>SJB Ya@= @A=i> IJDLWS
C chuan nh ngha 5 1acro nh sau:
__LIN__
__FIL__
__CAT__
__TIM__
__STCC__
Macro __LIN__ va __FIL__ a c g theu trong
phan tren. Macro __CAT__ cha mot chuo co dang
1onth0<a?0?ear o a ngay chuyen o ;ile nguon thanh
ma.
14- ShaQn Z. MgoFn ng*N la"= trLnh G
Macro __TIM__ cha th gan ma chng trnh a c
ben dch. Th gan c beu den trong chuo
hour`1inute`,econ<.
Neu __STCC__ c nh ngha, trnh ben dch ch chap
nhan nhng ma C chuan ma khong cha bat ky mot m
rong khong chuan nao.
1.++. C=OW I=hS= IJB@A C S=O>M@
Chu thch bat au b cap dau va ket thuc b
cap dau . Khong co khoang trong ga ha dau va
dau . Trnh ben dch se bo qua tat ca cac van ban nam
trong k heu bat au va ket thuc chu thch. V du chng
trnh nay ch n ra dong ch hello tren man hnh:
Ji*clude Kstdio%hL
i*t #ai*?void@
3
0"i*t2?thellot@N
0"i*t2?tthe"et@N
"etu"* UN
4
Chu thch co the xuat hen tren nheu dong. V du:
this is a
#ulti-li*e
co##e*t
Chu thch co the xuat hen mo n trong chng trnh,
tuy nhen khong at chu thch vao ga nh danh va t
khoa. V du chu thch sau a hp e:
7 c BU add the *u#$e"s VN
Chu thch sau khong hp e b v no at vao ga t
khoa:
s!ithis !ill *ot !o"5tch?c@ 3 %%%
Gh*ng 16. )ieQn ]* l? 3a' chu thch
149
Chu thch trong C chuan khong ong nhau, ngha a chu
thch khong cha chu thch khac.
this is a* oute" co##e*t
7 c 6aN
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++ bat au nh a m rong phen ban cua C. M
rong cua C++ c e cap an au ten b !farne
Ttrou,tru= vao nam 1979 ta phong th nghem !ell trong
Murra? Kill, MeR ger,e?. Nau ten ong go ngon ng nay a C
v p #G Rith cla,,%. Nen nam 1983 o thanh ten a C++.
Mat dau C a mot trong nheu ngon ng yeu thch va
s dung rong ra o v cac nha ap trnh chuyen nghep
tren the g, nhng s phat mnh ngon ng C++ a can
thet b v mot yeu to chnh o a: o phc tap ngay
cang tang. Trong nheu nam, ap trnh may tnh a tr nen
rong hn va phc tap hn. Cho du ngon ng C a ngon
ng ap trnh rat tuyet v nhng no cung co nhng han
che. Trong C, mot chng trnh m rong t 25000 en
100000 dong ma no tr nen qua phc tap v vay rat kho
e heu het chng trnh. Muc ch cua C++ a khac phuc
tr nga nay. Ban chat cua C++ a cho phep ng ap
trnh heu ro va quan y c nhng chng trnh n va
phc tap hn.
Hau het cac bo sung c tao b Ttrou,tru= e C ho
tr ap trnh hng o tng. Ttrou,tru= phat beu rang
mot va at trng hng o tng cua C++ c ay t
ngon ng ap trnh khac o a ,i1ula+7. Do o C++ co ca
1+2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
ha phng phap ap trnh rat hu ch.
Kh C++ xuat hen an au ten, no a co ba an
sa o chnh. Lan sa o au ten vao nam 1985 va
an th ha vao nam 1990. Lan th ba xuat hen trong suot
qua trnh chuan hoa C++. Ban phat thao teu chuan au
ten c tao vao ngay 25-01-1994, trong ban thao nay,
cac to chc teu chuan a g a nhng at trng au
ten c nh ngha b Ttrou,tru= va bo sung mot va
ac em m. Ngay 14-11-1997 ban thao cuo cung a
c chap nhan va o a teu chuan C++ hen nay.
1.+#. 0=>WZ @ZQGX F>GH IJK@= =DLW@A YBRZ IDLd@A
Lap trnh hng o tng a cach rat hu ch e
tep can v cong vec ap trnh. Phng phap ap trnh a
thay o ot ngot t kh xuat hen may tnh. V du, kh may
tnh xuat hen an au ten, ap trnh c thc hen bang
cach bac/tat cac bit nh phan. Kh chng trnh n en,
xuat hen ngon ng a,,e1bler kh o ap trnh co the ga
quyet cac chng trnh n va phc tap hn bang cach s
dung cac k heu beu den cac enh cua may. Kh chng
trnh tep tuc n hn na, ngon ng ap trnh cap cao xuat
hen cung cap cho ng ap trnh nheu cong cu.
Nam 1960, xuat hen ngon ng ap trnh co cau truc.
Nen hnh cho oa ngon ng nay a PASCAL va C. Ngon ng
ap trnh co cau truc cho phep ta ap trnh de dang hn.
Nac em cua ngon ng co cau truc a tao ra cac chng
trnh con oc ap, ben cuc bo va nheu cau truc eu
khen. Mac dau ngon ng co cau truc a cong cu ap
trnh manh, tuy nhen no cung gap nheu han che kh
chng trnh qua n.
Gh*ng 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 1+
Lap trnh hng o tng g a nhng y tng tot
nhat cua ngon ng ap trnh cau truc va bo sung them
nhng kha nem m. Mot cach tong quat, mot chng
trnh c to chc theo ha cach: bao go ma hoac bao go
d eu. Neu dung ngon ng ap trnh cau truc, bao go
ma. V du mot chng trnh c vet b ngon ng C nh
ngha cac ham, cac ham nay hoat ong tren mo keu d
eu a s dung b chng trnh.
Lap trnh hng o tng hoat ong theo cach khac.
No to chc theo cach bao go d eu. Trong ngon ng
hng o tng, ta nh ngha d eu va chng trnh con
tac ong tren d eu o. Ne ho tr cho nguyen y
hng o tng, tat ca cac ngon ng ap trnh hng
o tng eu co ba ac em chung: bao go
(enca=,ulation), a hnh (=ol?1or=hir1) va ke tha (inheritance).
1.59.1. Bao goi (enca<,ua!ation"
Bao go a mot c che ghep d eu va ma v nhau
muc ch a g an toan o v cac can thep t ben
ngoa. Ma va d eu en ket v nhau tao ra mot o
tng. Ben trong o tng, ma va d eu co the a
=ri3ate hoac =ublic. Ma va d eu a =ri3ate ch co the
truy cap b mot phan khac trong o tng. Kh ma va d
eu a =ublic, nhng phan khac cua chng trnh co the
truy cap t ben ngoa o tng. Thong thng cac phan
=ublic cua mot o tng cung cap gao den eu khen
cac thanh phan =ri3ate cua o tng.
1.59.2. Ca hInh (<o!)/or<hi,/"
Trong ngon ng hng o tng co kha nem a
hnh. YU ngha cua no the hen b mot cau "mot gao
1+& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
den, nheu phng thc - one inter;ace@ 1ulti=le 1etho<,". Na
hnh a tnh chat cho phep mot gao den eu khen truy
cap en mot cac hanh ong chung. Hanh ong c xac
nh b cac tnh huong thc te. V du nh ta co mot chng
trnh nh ngha ba keu ,tack cha ba keu d eu so
nguyen, k t va so thc. Da vao tnh chat a hnh ta co
the nh ngha cac ten 0ush?@, 0o0?@ s dung cho ca ba
stac5 tren. Trong chng trnh ta co the nh ngha ba phen
ban khac nhau ng v mo keu nhng ten co the trung
nhau. Trnh ben dch se t ong chon mot hanh ong
ung da vao keu d eu a u tr.
Na hnh gup gam tnh phc tap bang cach cho phep
gao den trung ten c s dung e truy cap en p cac
hanh ong chung.
1.59.3. Ke th'$a (inheritance"
Ke tha a cach x y ma mot o tng co the
nhan nhng tnh chat cua mot o tng khac. V du nh
tao tau a mot phan cua tao, tao a mot phan cua tra
cay, tra cay a mot phan cua ng thc. Neu khong co
s phan oa th mo o tng c nh ngha ro rang cac
tnh chat cua no. Tuy nhen, thong qua cach phan oa mo
o tng ch can nh ngha cac tnh chat reng cua no.
1.4/. V>UZ P>R@ YQ? SL V>T@ C99
1.8>.1. Yot 1 ;u ch'ng trInh (\\
Ta bat au v mot chng trnh C++ n gan
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 ii KK tl*tN
"etu"* UN
4
Bat au chng trnh, ;ile teu e Kiost"ea#L se c
chen vao trong chng trnh (Kiost"ea#L gong nh Kstdio%hL
trong C). Chu y khong co phan m rong %h trong ;ile teu
e Kiost"ea#L. Dong tep theo chng trnh a:
usi*g *a#es0ace stdN
Thong bao cho trnh ben dch bet a s dung mot
khong gan ten std. Khong gan ten a mot ac trng m
bo sung vao C++. Khong gan ten tao ra mot vung kha bao
gup ta to chc mot chng trnh n. S dung usi*g thong
bao cho trnh ben dch bet ta muon s dung mot khong
gan ten std, ay a mot khong gan ten ma trong o toan
bo cac th ven chuan cua C++ c kha bao. Kh s dung
khong gan ten std, ta n gan hoa vec truy cap cac th
ven chuan. Dong tep theo:
i*t #ai*?@
Chu y danh sach tham so trong #ai*?@ a rong, eu
nay cho bet #ai*?@ khong co tham so. Trong C++, mot
ham khong co tham so ta e trong phan kha bao tham
so, khong can pha s dung void. Dong tep 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
Dong nay co ha ac em, th nhat hen th This is
out0ut. ra man hnh sau o a mot k t xuong dong. Trong
C++, KK co va tro m rong hn. No van a toan t ay
bit, nhng kh s dung trong tnh huong tren no a toan t
out=ut, cout a mot nh danh co chc nang en ket v
man hnh. Ta co the s dung cout v KK e hen th mo
d eu ra mang hnh. Chu y ta van co the s dung
0"i*t2?@ e n d eu ra man hnh. Nac em th ha a
chu thch. Trong C++ co ha cach chu thch khac nhau: chu
thch tren mot dong va chu thch ca oan van ban.
Dong tep theo nhac ng dung nhap vao mot so,
mot so nhap t ban phm c the hen trong cau enh
ci* LL i% Trong C++, LL van a toan t ay bit tuy nhen kh
s dung trong tnh huong tren no a toan t in=ut. Nnh
danh ci* thay the cho thet b vao chuan thong thng a
ban phm. Tong quat, ta s dung ci*LL e nhap vao ben
mot keu d eu c s ke ca chuo. Ta co the s dung
ham sca*2?@ e nhap mot ga tr thay the cho ci*. Dong
tep theo:
cout KK i KK t sAua"ed is t KK ii KK tl*tN
Ga s ta nhap i c BU kh o cau enh tren se n ra
man hnh BU sAua"ed is BUU sau o a mot dau xuong
dong. Dong nay mnh hoa cho van e a ta co the ket
hp nheu toan t KK tren mot dong. Dong cuo cung:
"etu"* UN
Tra ve ga tr 0 ta th em go chng trnh, trong
trng hp nay a he eu hanh. Ga tr 0 thong bao cho
he eu hanh bet chng trnh ket thuc bnh thng.
Gh*ng 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 1+7
1.8>.2. Yot cac nhIn gaNn guOi hn 1eN thao tac
1a$o ra
Nh a e cap trc o, kh s dung thao tac vao ra,
toan t KK va LL co kha nang quan y mo keu d eu
xay dng ben trong. V du sau nhap mot ga tr keu 2loat,
dou$le va mot chuo sau o hen ra man hnh.
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 thc th chng trnh nay, ga s ta nhap vao ga tr
chuo a this is a te7t, kh o chng trnh ch hen th
chuo this phan con a khong c hen th b v toan t
LL ngng oc kh xuat hen mot khoang trong.
Toan t vao/ra cung nhan dang toan bo cac k t
\ma a g theu trong chng 2, v du ta co the vet:
cout KK tAltBltCtN
1.8>.3. Khai bao bien cuc bo
Trong C++ ta co the kha bao ben cuc bo bat k
au trong kho enh, khong nhat thet pha au chng
trnh gong 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"gRUhNst" 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 bao ben au chng trnh hoac v
tr trc kh s dung. Tuy nhen kha bao ben gan v n
s dung nhat co the de g ro, tot nhat a nen kha
bao ngay v tr au ten trc kh s dung.
1.8>.#. Kie*u ;'O !ieu boo!
C++ nh ngha mot keu !oolean co ten a $ool u
tr ha ga tr a t"ue va 2alse. Tuy nhen C++ van g
quan em 0 a 2alse va khac 0 a t"ue.
1.41. $BC =K@= SOE \B PLWZ XBC =K@= =ZQG@ Y>dZ
Nh a e cap trc o, C++ a tra qua mot qua
trnh ten tren trong suot qua trnh phat tren va teu
chuan hoa. T o dan en s ra ha phen ban cua
C++. Phen ban au ten go a phen ban cu da vao
thet ke ban au cua !farne Ttrou,tru=, va phen ban th
ha a C++ chuan c tao ra b !farne Ttrou,tru= va hep
ho teu chuan ANSI/ISO. Ha phen ban nay tng t nhau,
tuy nhen phen ban C++ chuan cha mot va ca ten. S
Gh*ng 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 1+9
khac nhau chnh ga ha phen ban nay ha ac trng
khong gan ten va teu e keu m. Xet v du:

A* old-st6le C 0"og"a#%

Ji*clude Kiost"ea#%hL
i*t #ai*?@
3
"etu"* UN
4
Nay a chng trnh vet theo phen ban cu, chu y
rang ;ile teu e co phan m rong %h o v phen ban
m ta co oan chng trnh 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
Phen ban nay s dung ;ile teu e theo keu m va
co ch ra khong gan ten.
1.81.1. &ieDu +eN trong (\\
Nh ta a bet, kh s dung ham trong th ven ta pha
kha bao ;ile teu e bang cach s dung Ji*clude. Trong C+
+ chuan, teu e khong ch ra ten ;ile thay vao o no
dung nh danh chuan va nh danh nay se ket no v ;ile
teu e, do o teu e trong C++ chuan khong co phan
m rong. B v C++ c m rong t C do o ta co the
176 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
chen ;ile teu e trong C chuan v du nh Ji*clude Kco*io%hL.
Tuy nhen, C++ chuan cung nh ngha nhng ;ile teu e
m thay the nhng ;ile teu e nay. Cac ;ile nay co them
ten to McM trc mo teu e va bo phan %h, v du
K#ath%hL thay the bang Kc#athL. Tuy nhen ;ile teu e theo
cach cu c khuyen cao khong nen s dung.
1.81.2. KhoDng gian teDn
Kh ta chen mot ;ile teu e keu m vao chng trnh,
no dung ;ile o c cha trong khong gan ten std. Mot
khong gan ten n gan a mot vung kha bao. Muc ch
cua khong gan ten a nh v ten nh danh e tranh b
xung ot. Cac phan t kha bao trong khong gan ten nay
c phan bet kh kha bao trong khong gan khac. Nau
ten, ten cua cac ham th ven chuan c at vao
khong gan ten toan cuc.
1.81.3. a$/ 1iec 1i trInh bieDn ;ch cuO
Ca khong gan ten va teu e theo cach m a
nhng ac trng m c bo sung vao C++ trong qua trnh
chuan hoa. Trong kh cac trnh ben dch m co ho tr
nhng ac trng nay, con cac trnh ben dch cu th khong.
Trong trng hp nay, trnh ben dch se thong bao rat
nheu o. Kh o ta s dung teu e theo cach cu va bo
khong gan ten.
1.42. GZLWZ I=ZQGO FLWH IJB@A C99
Trong C++, e tao ra mot o tng ta pha nh ngha
dang tong quat cua no bang cach s dung t khoa
class, mot t khoa class tng t nh cu phap cua
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 stc5gSIhN
i*t tosN
0u$lici
void i*it?@N
void 0ush?i*t i@N
i*t 0o0?@N
4N
Lp co the cha nhng thanh phan reng (=ri3ate)
hoac cong kha (=ublic). Ngam nh, tat ca cac thanh nh
ngha trong p a =ri3ate, v du ben stc5 va tos a cac
ben =ri3ate. Neu nay co ngha a no khong c truy
xuat b nhng ham khong a thanh ven cua p (ay
a cach the hen tnh chat bao go trong ap trnh hng
o tng).
Ne tao nhng phan cua p a =ublic, ta pha kha bao
sau t khoa 0u$lic. Tat ca cac ben va ham nh ngha
sau t khoa 0u$lic co the truy cap b ham khac trong
chng trnh. Ve ban chat th nhng thanh phan con a
cua chng trnh truy cap mot o tng thong cac ham
=ublic cua no. Mac dau ta co the kha bao ben a =ublic,
tuy nhen tot hn het a ta han che cach truy cap cua no
bang cach kha bao no a =ri3ate va truy cap no thong
qua cac ham =ublic. T khoa 0u$lic theo sau b mot dau
ha cham (i).
Cac ham trong p go a ham thanh ven, d eu
trong p go ben thanh ven. Lu y a mot o tng
c tao t ha yeu to o a ma va d eu. Ch co
ham thanh ven m c quyen truy cap vao cac thanh
172 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
ven =ri3ate cua p o.
Kh a tao ra mot p, ta co the tao ra o tng cua
p o bang cach dung ten p. Thc te th ten p a
tao thanh mot keu d eu m. V du e tao ra mot o
tng #6stac5 thuoc keu stac5%
stac5 #6stac5N
Kh kha bao mot o tng, ta a tao ra mot the hen
cua p, trong v du tren #6stac5 a mot the hen cua
stac5. Ta cung co the tao mot o tng kh nh ngha p
bang cach at ten sau dau 4%
Tom a, trong C++, p tao ra mot keu d eu m
co the s dung e tao ra mot o tng. Do o, mot o
tng a mot the hen cua p. Cach kha bao mot 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 trong.
Trong p, cac ham thanh ven pha kha bao theo
nguyen mau, kh vet ma cho ham thuoc p o, ta pha
no cho trnh ben dch bet p ma ham o ben trong.
V du nh ngha ham 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 toan t phan ga pham v, trong v du
tren no no cho trnh ben dch bet ham 0ush?@ thuoc p
stac5. Trong C++, cac p khac nhau co the dung chung
mot ten ham, trnh ben dch se bet ham o thuoc p
nao nh toan t phan ga pham v.
Kh tham cheu en cac thanh ven t ma ben ngoa
p, ta s dung cu phap <ten o tng>.<thanh ven>.
V du:
stac5 stac5BX stac52N
stac5B%i*it?@N
Noan chng trnh tren tao ra ha o tng stac5B, stac52
va kh tao o tng stac5B. Lu y, ha o tng stac5B,
stac52 a ha o tng reng bet. Neu o co ngha a
kh tao stac5B khong co ngha a kh tao stac52. Ha o
tng nay ch mot mo en he o a cung ten p.
Ben trong mot p, mot ham thanh ven co the go
mot ham thanh ven khac hoac co the tham cheu trc
tep en d eu thanh ven ma khong can toan t
cham (%).
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 stc5gSIhN
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
Ket qua a: 9 B Y 2
Cuo cung, cac thanh ven =ri3ate cua mot o tng
ch c truy cap b cac ham a thanh ven cua mot
o tng. V du:
stac5B%tos c UN ""o"X tos is 0"ivate%
Se b o neu enh tren nam trong ham #ai*?@ b v
tos a ben =ri3ate.
1.43. H>UX I>TZ VBGZ (.O@SIZB@ OPQJFB>]Z@A"
Mot the hen cua kha nem a hnh o a cach s
dung ham ta bo. Trong C++, mot ham co the cha se v
nhau mot ten chung men sao khac nhau ve tham so.
Ne heu c tnh quan trong cua ham ta bo, ta xet
ba ham a$s?@, la$s?@, 2a$s?@ trong C. Mat dau ba ham nay
s dung ba ten khac nhau, nhng no co nhem vu gong
nhau o a ay ga tr tuyet o cua so nguyen, so
nguyen da, so thc keu dou$le. Neu nay am cho van
e phc tap hn so v thc te. Tuy nhen, trong C++ ta co
the s dung mot ten cho ba ham nay, chng trnh c
mnh hoa 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
Ket qua suat hen nh sau:
asi*g i*tege" a$s?@
BU
asi*g dou$le a$s?@
BB
asi*g lo*g a$s?@
Z
Chng trnh tren tao ra ba ham co cung ten, mo ham
tra ve mot ga tr tng ng v tham so. Trnh ben dch
bet ham nao se c go trong tnh huong cu the phu
thuoc vao tham so. Trnh ben dch khong phan bet c
ha ham khac nhau co cung ten, cung tham so nhng khac
nhau keu tra ve.
1.4%. TB>W@ IDT I>TZ VBGZ (OHQJ>IBJ OPQJFB>]Z@A"
Mot cach the hen khac cua a hnh o a toan t
ta bo. Nh ta a bet trong C++ ta co the s dung toan
t KK va LL thc hen thao tac vao ra. Ha toan t tren co
Gh*ng 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 177
the thc hen c thao tac m rong b v trong teu e
Kiost"ea#L a ta bo toan t nay.
1.4,. 0QR I=DU>
Ke tha a mot ac em chnh trong ap trnh hng
o tng. Trong C++ ke tha c ho tr bang cach cho
phep mot p nay sap nhap v mot p khac trong kha
bao. Ke tha cho phep tao ra mot cay phan cap d
chuyen t tong quat nhat en ch tet nhat. Cach x y
nay a au ten tao mot p c s (p nay nh ngha
cac thuoc tnh chung nhat cua tat ca cac o tng). Lp
ke tha t p c s con c go a p dan xuat. Mot
p dan xuat bao gom cac ac tnh cua p c s va bo
sung cac at tnh reng cua p dan xuat. V du sau tao
cac p khac nhau e phan oa cac toa nha.
Nau ten, xay dng p $uildi*g. Lp nay nh a p
c s e dan xuat ra ha p khac.
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
Tat ca cac toa nha eu co ba ac em chung, o
a so phong, so tang va tong den tch. Bay g ta co
the nh ngha keu rong hn $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 bao tong quat cho mot p ke tha:
class de"ived-class i access $ase-class 3
// $od6 o2 *e! class
4
access ay a tuy chon, neu xuat hen no ch
nhan 3 ga tr a 0u$lic, 0"ivate, 0"otected. V du tren ke
tha theo dang 0u$lic. Neu o co ngha a cac thanh
ven =ublic cua p c s se a thanh ven =ublic cua p
ke tha. Chng trnh sau ay mnh hoa tnh ke tha. No tao
ra ha p dan xuat cua $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
Ket qua xuat hen tren man hnh 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"
Mot thao tac rat thng gap trong ap trnh hng o
tng o a kh tao cac o tng trc kh s dung. V
du nh o tng stac5, trc kh s dung ta pha thet ap
tos bang 0. Neu nay c thc hen bang ham i*it?@. V
thao tac kh tao thng xuyen s dung nen C++ cho phep
o tng c kh tao kh no c kha bao. Thao tac kh
tao t ong nay c thc hen thong qua cach s dung
cua ham cau t.
1-2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Ham cau t a mot ham ac bet no a thanh ven
cua mot p va co cung ten v p. V du:
This c"eates the class stac5%
class stac5 3
i*t stc5gSIhN
i*t tosN
0u$lici
stac5?@N co*st"ucto"
void 0ush?i*t i@N
i*t 0o0?@N
4N
Cau t stac5?@ khong tra ve mot ga tr ro rang.
Trong C++ ham cau t khong tra ve ga tr nao. Ham
stac5?@ co ma nh sau:
stac5ws co*st"ucto" 2u*ctio*
stac5iistac5?@
3
tos c UN
cout KK tStac5 I*itiali8edl*tN
4
Thong ep Stac5 I*itiali8ed ch e mnh hoa trong v
du tren, trong thc te rat nheu ham cau t khong vao
hoac ra bat k d eu nao. No ch n gan a thc hen
cac thao tac kh tao. Mot cau t se t ong thc hen
kh mot o tng c tao.
Ngc a v cau t a huy t. Trong rat nheu tnh
huong, mot o tng can mot va hanh ong kh huy
bo. No tng cuc bo se c tao kh vao cac oan ma
va huy bo kh thoat kho cac oan ma. No tng toan
cuc se huy bo kh ket thuc chng trnh. Kh o tng huy
bo, huy t cua no neu co se t ong thc hen. Co
nheu do e s dung huy t, v du nh ga phong vung
Gh*ng 11. )o>ng 2uan 3eQ ngoFn ng*N la"= trLnh GOO 1-
nh a c cap phap trc o hoac co the ong mot
;ile a m. Huy t co cung ten v cau t nhng pha
at trc o mot dau . V du p stac5 cung v cau t
va huy t:
This c"eates the class stac5%
class stac5 3
i*t stc5gSIhN
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*
stac5iistac5?@
3
cout KK tStac5 Cest"o6edl*tN
4
Gong nh cau t, huy t khong co ga tr tra ve. V
du sau a phen ban ca ten cua p stac5 nh a e
cap v du trc:
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 stc5gSIhN
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*
stac5iistac5?@
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
Ket qua hen th tren man hnh 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 tat ca 63 t khoa nh c nh ngha trong C++
chuan the hen trong bang 11.1. C++ a ngon ng co
phan bet ch hoa va ch thng, tat ca cac t khoa
trong C++ a ch thng.
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
Bng 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
Dang tong quat cua mot chng trnh 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 hau het cac d an n, tat ca cac kha bao
p eu at trong ;ile teu e va c chen vao mo
1o<ul. Nhng cac to chc chng trnh tong quat van thc
hen theo dang tren.
Gh*ng 12. $= 3a' .oi t*ng #Gla,, 8 hbfect% 1-7
C=DL@A 12. LLWH P>U YBRZ IDLd@A (CF>\\
>@] OVmQSI"
1.4#. LLWH
Lp c tao bang t khoa class. Mot kha bao p
nh ngha mot keu d eu m en ket ma va d eu.
Keu d eu nay c s dung e kha bao cac o tng
cua p o. Kha bao p tng t nh kha bao cu phap
kha bao cau truc:
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 tuy chon, neu xuat hen no se kha
bao o tng cua p o. access-s0eci2ie" ac ta truy
cap va a mot trong ba t khoa: 0u$lic, 0"ivate, 0"otected.
Kha bao 0"ivate a ngam nh, ngha a ham va d
eu khong co ac ta truy cap no se a =ri3ate. Ta co the
thay o ac ta truy cap bat c uc nao ben trong kha
bao 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 nhen, e de dang oc chng trnh, ta nen nhom
cac thanh ven co cung at ta truy cap a v nhau.
Ham kha bao trong p c go a ham thanh ven.
Ham thanh ven co the truy cap en bat k thanh ven
nao trong p ke cac cac thanh phan =ri3ate. Ben ben
trong p c go a ben thanh ven hoac d eu thanh
ven.
1.#/. !Dd FZQC@ NO>@ AZDE> FLWH P>U YBRZ IDLd@A
Trong C++, va tro cua cau truc c m rong, o a
cach tao khac cua p. Trong thc te, s khac nhau ga
p va cau truc em duy nhat a tnh chat ngam nh,
tat ca cac thanh ven trong cau truc ngam nh a =ublic
va trong p a =ri3ate. Tat ca cac tnh chat con a th p
va cau truc a tng ng. Trong C++ cau truc nh ngha
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' .oi 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
Chng trnh tren se hen th Hello the"e^ tren man
hnh. Cau truc #6st" co the vet d dang 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 thac mac v sao C++ a co ha t khoa tng
cng nh vay, s d tha nay co mot va do nh sau:
Th nhat: tang kha nang s dung cua cau truc.
Trong C, cau truc a ong go d eu do vay bo sung
them ham thanh ven ch a them mot bc nho.
Th ha: b v cau truc va p co en quan, ta co
the de dang chuyen mot chng trnh C sang C++.
Th ba: cung cap ha t khoa e nh ngha p e
ng dung co the t do phat tren chng trnh hn.
196 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
1.#1. !Dd FZQC@ NO>@ SOT> I>GH =LdH P>U FLWH
Gong nh cau truc, u*io* cung co the s dung e
tao p. Trong C++, u*io* co the cha ca ben va ham
thanh ven va no cung co the co cau t va huy t.
Trong C++, u*io* van g cac ac trng trong C, ac trng
quan trong nhat a tat ca cac thanh ven eu cha se
mot vung nh. Gong nh cau truc, ngam nh a tat ca
cac thanh ven cua u*io* a =ublic va hoan toan tng
thch v C, v du sau cho ta cach hoan o v tr ha b?te cua
mot so nguyen:
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' .oi 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
Gong nh cau truc, kha bao u*io* nh ngha mot p
ac bet. Do o cac nguyen y bao go van c duy tr.
Co mot va han che kh s dung unon trong C++:
Th nhat: u*io* khong c phep ke tha trong cac
p hay no khong the a p c s. Mot u*io* khong co
ham thanh ven ao.
Th ha: mot u*io* khong the co thanh ven a o
tng ta bo toan t c
Th ba: khong co o tng nao a thanh ven cua
u*io* neu o tng o co cau t hoac huy t.
1.91.1. H< naGc ;anh (anon)/ou, union,"
Co mot keu ac bet cua keu u*io* trong C++ go
a hp nac danh. Hp nac danh khong co ten keu va o
tng kh kha bao. Thay vao o, hp nac danh thong bao
cho trnh ben dch bet cac ben thanh ven cha se mot
vung nh, va cac ben nay c tham cheu trc tep
khong thong qua toan 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 thay cac ben thanh ven c tham cheu gong
nh ben cuc bo thong thng. Xa hn na o a no co
cung pham v nh mo ben cuc bo khac ben trong cung
mot kho. Neu nay suy ra rang ten cua cac thanh ven
hp nac danh khong c trung v cac nh danh khac
trong mot pham v.
Hp nac danh ngoa nhng han che cua keu u*io*
con co mot so han che sau: cac thanh ven ben trong
ch a d eu, khong co ham thanh ven; khong cha
cac ac ta truy cap 0"ivate va 0"otected; cac hp nac
danh toan cuc pha kha bao a static.
1.#2. H>UX I=>C@ I=ZQG@
Ta co the cho phep mot ham khong pha thanh ven
cua mot p truy cap vao cac thanh ven =ri3ate cua p
bang cach s dung 2"ie*d. Mot ham a than then co
the truy cap tat ca cac thanh phan =ri3ate va =rotecte<
cua mot p. Ne kha bao mot ham than then, ta chen
t khoa 2"ie*d trc kha bao ham trong p. Xet v du sau:
Gh*ng 12. $= 3a' .oi 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 tren, ham su#?@ khong pha a thanh ven
cua p #6class, tuy nhen no van co the truy cap vao
cac thanh ven =ri3ate. Chu y, kh go ham su#?@ ta khong
can co toan t cham (%) b v no khong pha a ham
thanh ven nen khong can ch ra ten o tng.
Mac dau khong co kh kha bao ham su#?@ a than
then, tuy nhen co mot va tnh huong can pha s dung
ham than then. Th nhat ham than then rat co ch kh
19& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
ta bo cac toan t. Th ha, ham than then tao ra cac
keu ham vao/ra de dang. Th ba, ham than then ap
ng mot so trng hp nh ha hoac nheu p co cha
cac thanh ven en quan en phan khac cua chng trnh.
1.#3. LLWH I=>C@ I=ZQG@
Ta co the cho mot p a than then v p khac.
Trng hp nay, p than then va tat ca cac ham
thanh ven cua no co the truy cap en cac thanh ven
=ri3ate c nh ngha trong p khac. 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' .oi t*ng #Gla,, 8 hbfect% 194
Trong v du tren, p Mi* co the truy cap en cac
ben =ri3ate a va $ c kha bao ben trong p T!o&alues.
Kh mot p a than then v p khac no ch truy
cap en ten c nh ngha ben trong p khac, no
khong ke tha p o va thanh ven cua p au khong
pha a thanh ven cua p than then. Lp than then t
kh c s dung trong cac tnh huong ap trnh.
1.#%. H>UX I@FZ@Q
Ham inline a mot ac trng quan trong ngon ng C++.
No thng c s dung v p. Ta co the tao ra mot
ham ngan ma no khong thc s c go, hay ma cua no
c m rong tren mot dong ta em go ham. Cach x
y nay gong nh 1acro trong C. Ne tao ham nay, ta them
t khoa i*li*e trc kha bao ham. 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 trnh ben dch se chen than ham #a7?@ vao
ngay v tr go ham, kh thc hen chng trnh co ma tng
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 ham inline thng c s dung a do tnh heu
qua cua no, b v ham inline khong co c che go ham
thong thng do o se thc hen nhanh hn. Tuy nhen ham
inline se am cho chng trnh co kch thc n hn b v s
trung hp cua ma. Thong thng ta ch s dung ham
inline trong trng hp than ham ngan.
1.9#.1. Cnh nghKa ha$/ Ln!ine trong /ot !<
Ta co the nh ngha ham inline trong kha bao p (tc
a ta vet ma trc tep cua ham trong kha bao p). Kh
ham nh ngha ben trong kha bao p, no se t ong tao
ra mot ham inline. Ta khong can chen t khoa i*li*e trc
kha bao ham. Chng trnh sau nh ngha ham i*it?@ va
ham sho!?@ trong kha bao 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' .oi t*ng #Gla,, 8 hbfect% 197
"etu"* UN
4
Trong v du tren, ham i*it?@ va ham sho!?@ a ham
inline b v no c nh ngha ben trong p. Cau t va
huy t cung co the a ham inline.
1.#,. C>RO IDT SBW I=>X \BR
Ta co the truyen tham so en ham cau t. Nhng
tham so nay gup kh tao mot o tng kh no c tao.
Ne tao cau t co tham so, ta ch can bo sung tham so
vao kha bao cau t. Kh nh ngha than cau t, ta dung
cac tham so nay e kh tao cac cho o tng. 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 ngha cau t #6class?@, cac tham so i, b
dung e gan ga tr cho a, $. Cach tao cau t co tham so
thng c s dung trong cac tnh huong ap trnh. Chu y,
cau enh:
#6class o$?9X Y@N
Co the thay bang cau enh:
#6class o$ c #6class?9X Y@N
19- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
V du sau, kha bao mot p u tr thong tn cua th
ven sach. Chng trnh co s dung cau 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 CHCOC_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 CHCOC_OaT@N
$B%sho!?@N
$2%sho!?@N
"etu"* UN
Gh*ng 12. $= 3a' .oi t*ng #Gla,, 8 hbfect% 199
4
1.92.1. (au t' /ot tha/ ,o
Neu cau t co mot tham so, co ba cach e g ga
tr kh tao en cau 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
Cau enh:
o$ c ZZN
Co the c thay bang:
o$?ZZ@N
Hoac:
o$ c ?ZZ@N
1.#-. T=>U@= PZQC@ Ii@= SOT> XBGI FLWH
1.93.1. ]'O !ieu tha$nh 1ieDn tKnh
Kh chen trc ben thanh ven mot t khoa static,
ta bao cho trnh ben dch bet rang ch co mot ben ton
ta va tat ca cac o tng cua p se cha se ben nay.
Tat ca cac ben ,tatic c kh tao bang 0 trc kh o
tng au ten c tao. Kh kha bao mot d eu ,tatic
266 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
trong mot p, ta khong cap phat bo nh cho no. Thay vao
o ta pha cap phat bo nh cho no ben ngoa p. Ne
am eu nay, ta kha bao a ben ,tatic bang cach s
dung toan t pham v e xac nh p ma cha no. Ne
heu ro hn, ta xet 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
Ket qua hen th tren man hnh nh sau:
This is static ai B
This is *o*-static $i B
This is static ai 2
Gh*ng 12. $= 3a' .oi 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 bao ben a ben trong va ben
ngoa p sha"ed. B v kha bao a ben trong p khong
thc s tao ra mot vung nh.
Mot ben ,tatic ton ta trc kh mo o tng cua p
c tao. 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 ben c kha bao ,tatic va =ublic, no co the
c truy cap trc tep trong ham #ai*?@, a ton ta trc kh
cac o tng nh ngha.
Mot cach s dung ben thanh ven tnh a cung cap
cach eu khen truy cap e cha se ta nguyen c s
dung b tat ca chng trnh. V du, ta tao ra nheu o tng
va gh cac o tng nay vao ;ile. Ro rang ch co mot
o tng c gh vao ;ile ta mot th em. Trong trng
262 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
hp nay ta kha bao mot ben tnh cho bet kh nao th ;ile
ang dung hoac ang ro. Mo o tng trc kh gh d
eu vao ;ile se kem tra trang tha cua ;ile nay. 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
Mot cach s dung ben thanh ven tnh o a theo
do so ng cac o tng ang ton ta. V du:
class Cou*te" 3
0u$lici
Gh*ng 12. $= 3a' .oi 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
Ket qua xuat hen tren man hnh 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
Ben cou*t se tang kh mot o tng c tao, va
gam kh mot o tng b huy bo. Theo cach nay, ta co
the theo do c cac o tng hen ta cua mot p.
1.93.2. Ha$/ tha$nh 1ieDn tKnh
26& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Ham thanh ven cung co the kha bao a tnh, co
mot so han che kh s dung ham thanh ven tnh. No ch
co the truy xuat trc tep en cac thanh ven tnh cua
p. Ung dung chnh cua ham thanh ven tnh a x y
cac ben thanh ven tnh trc kh cac o tng c tao.
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 uat chung, cau t cua mot o tng se
c go kh mot o tng c tao va mot huy t cua
o tng thc hen kh mot o tng b huy bo.
Chnh xac, mot ham cau t cuc bo se c thc hen
kh xuat hen cau enh kha bao. Ham huy t cua o
tng cuc bo se c thc th theo trat t ngc a cua
ham cau t. No tng toan cuc thc th cau t trc kh
Gh*ng 12. $= 3a' .oi t*ng #Gla,, 8 hbfect% 264
thc th ham #ai*?@. Cau t toan cuc thc hen theo th t
kha bao cua no ben trong mot ;ile. Huy t se thc hen
theo th t ngc a sau ham #ai*?@ ket thuc. 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
Ket qua hen th tren man hnh:
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, tuy theo trnh ben dch ma ta co the thay
hoac khong ha dong cuo cung.
1.#4. TB>W@ IDT H=>C@ AZ>TZ H=>dX PZ
Nh a e cap toan t ii en ket ten p v cac
thanh ven e thong bao cho trnh ben dch bet thanh
ven o thuoc p nao. Tuy nhen toan t phan ga
pham v con co cach s dung khac o a cho phep truy
cap en ten trong vung ma an dau b mot kha bao cuc
bo co cung ten. V du xet oan chng trnh sau:
i*t iN glo$al i
void 2?@
3
i*t iN local i
i c BUN uses local i
%
%
%
4
Cau enh i c BU tham cheu en ben cuc bo i, tuy
nhenn ham 2?@ co the truy cap en ben i toan cuc bang
cach ch trc i mot toan 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' .oi t*ng #Gla,, 8 hbfect% 267
Ta co the kha bao mot p trong mot p, eu nay
se tao ra p ong nhau. Tuy nhen trong thc te t kh ta s
dung tnh huong nay.
1.1//. LLWH SOdS VBG
Ta co the nh ngha mot p ben trong ham. 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 mot p nh ngha ben trong ham, no ch c
bet ben trong ham o. Co mot va han che kh s dung
p cuc bo. Cac ham thanh ven cua p cuc bo pha
nh ngha ben trong kha bao p; p cuc bo khong c
s dung hoac truy cap en cac ben cuc bo cua ham ma
co kha bao p cuc bo (ngoa tr p cuc bo co ben
tnh); khong nh ngha ben tnh trong p cuc bo.
1.1/1. GLTZ XBGI YBRZ IDLd@A YQR@ =>UX
26- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
No tng c g en ham gong nh nhng keu
d eu khac. No tng g en ham hoat ong theo c
che truyen tham so theo tr (b? 3alue). Neu nay co ngha
a sao chep mot phen ban cua o tng g en ham.
Cau ho at ra a co hay khong phen ban sao chep nay
thc hen cau t va huy t hay? Xet 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' .oi 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
Ket qua tren man hnh 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 ham huy t nhng ch co mot
ham cau t c thc th. T ket qua tren man hnh ta
thay cau t khong thc hen kh sao chep o e g en
o$. Neu cau t c go kh g en ham, se thc th cac
hanh ong kh tao, eu nay am thay o trang tha cua
o tng. Tuy nhen o v huy t van thc hen bnh
thng, eu nay cung gong nh a ga phong cac ben
cuc bo trc kh thoat kho ham.
1.1/2. TJ>T PQ? XBGI YBRZ IDLd@A
Mot ham co the tra ve mot o tng. 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 mot o tng tra ve b mot ham, mot o
tng tam th c tao ra e u tr ga tr tra ve. Sau kh
ga tr c tra ve, o tng se t ong huy bo. Van
e ay a huy bo o tng nay co the phat snh ra
mot so tac ong khong mong muon. V du neu o tng
c tra ve b ham co mot huy t ma ga phong
vung nh a cap phat ong, bo nh nay se b ga
phong ngay ca kh o tng nhan ga tr tra ve van ang
s dung chung. Ne khac phuc eu nay, ta se s dung
toan t ta bo nhng phan sau.
1.1/3. G>W@ XBGI YBRZ IDLd@A
Ga s co ha o tng cung keu, ta co the gan
o tng nay cho o tng khac. Kh o d eu ben
pha phep gan se sao chep en d eu ben tra phep
gan. 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' .oi 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
Chng trnh tren se hen th ga tr ZZ. Ngam nh tat
ca d eu c sao chep t o tng nay en o tng
khac bang cach sao chep tng bit mot. Tuy nhen ta co
the ta bo toan t gan e thc hen cong vec nay.
Gh*ng 1. Mang@ con tro@ tha1 chieu 3a' toan 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 phep nh ngha mang cac o tng.
Cu phap kha bao va s dung mang cac o tng hoan
toan gong v keu d eu khac. V du chng trnh sau s
dung mang 3 o tng:
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
Chng trnh tren se hen th cac so B 2 9 en man
hnh.
Neu trong p co nh ngha mot cau t co tham so,
ta co the kh tao mo o tng trong mang bang cach
ch ra danh sach cac ga tr kh tao gong nh kh tao
21& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
mang cac keu d eu khac. Tuy nhen dang chnh xac
cua danh sach ga tr kh tao phu thuoc vao so ng
tham so trong cau t. No v cau t co mot tham so,
kh tao gong nh mang thong thng. 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
Chng trnh tren se hen th cac so B 2 9 ra man hnh.
Cu phap kh tao v du tren a dang vet tat, vet ay
u th cau enh kh gan ga tr tren a:
cl o$g9h c 3 cl?B@X cl?2@X cl?9@ 4N
Trong trng hp cau t co ha tham so tr en, ta
pha s dung cu phap kh gan ga tr ay 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. Mang@ con tro@ tha1 chieu 3a' toan 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: dang vet ngan khong s dung c trong tnh
huong tren.
1.1>#.1. &ao /ot /ang co khi tao 1a$ khoDng
Trng hp ac bet neu ta muon tao mot mang va
kh gan ga tr va khong kh gan cho mot mang o
tng. Xet 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 ay ham cau t can mot tham so, eu nay co
ngha a tat ca cac mang kh kha bao can pha kh gan
ga tr. Kh o cau enh:
cl agZhN e""o"X co*st"ucto" "eAui"es i*itiali8e"s
21+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Se bao o b v cl ch co mot cau t co tham so,
e ga quyet van e nay ta kha bao them mot cau t
khong 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 cau enh sau a hp e:
cl aBg9h c 39X VX W4N i*itiali8ed
cl a2g9YhN u*i*itiali8ed
1.1/,. CB@ IJBT YBRZ IDLd@A
Trong C++ cho phep con tro en o tng. Kh o e
truy cap en cac thanh ven cua p ta s dung toan t
mu ten (-L) thay cho toan t dau cham (%). 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 bet, kh mot con tro tang no se tro en
Gh*ng 1. Mang@ con tro@ tha1 chieu 3a' toan t* ca= =ha= bo"
nh .o"ng 217
phan t ke tep. Tong quat, phep toan con tro so hoc
en quan en keu d eu c s. Ouy uat nay cung ung
cho o tng. V du, chng trnh sau mnh hoa con tro truy
cap en tat ca cac phan t cua mang sau kh a gan
phan t au ten:
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 gan thanh ven =ublic cua mot o tng
en con tro va sau o truy cap en thanh ven nay bang
cach s dung 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 gan con tro en con tro khac ch kh
no cung keu. V du:
*t 0iN
loat 02N
Trong C++, cau enh sau a khong hp e
i c 02N e""o" -- t60e #is#atch
1.1>2.2. (on tro thi,
Kh mot ham thanh ven c go, no t ong g
mot tham so an a mot con tro en o tng go (o
tng ma cha ham c go). Con tro nay go a con tro
this. Ne heu this, xet 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. Mang@ con tro@ tha1 chieu 3a' toan 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
Ben trong ham thanh ven, thanh ven cua p co
the truy cap trc tep ma khong can ch ra o tng va
p. Trong ham ham 0!"?@ cau enh:
$ c $aseN
No tng ket hp v $ se c gan ga tr cha
trong $ase, tuy nhen ta cung co the vet a d dang sau:
this-L$ c $aseN
Con tro this tro en o tng ma go 0!"?@, v du
0!"?@ a c go b o tng 7, kh o this cung tro
en 7. Vet cau enh ma khong co this thc ra a cach
vet tat. Sau ay a ham 0!"?@ c vet ay 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 van e can u y: ham than then khong
pha a thanh ven cua p do o ta khong s dung con
tro this cho ham thanh ven; ham thanh ven tnh cung
khong c s dung con tro this.
1.1>2.3. (on tro +en kie*u ;aPn Muat
Tong quat con tro khong the tro en o tng khac
keu. Tuy nhen co mot ngoa e trong tnh huong nay o
a con tro p c s co the tro en o tng cua p
dan xuat. Ga s co ha p go a B va C, C c dan
xuat t p B, trong tnh huong nay con tro keu B co
the tro en mot o tng co keu C.
Mac dau con tro p c s tro en p dan xuat
nhng ngc a th khong c. Con tro keu C khong the
tro en o tng keu B. Hn na ta ch co the truy cap
vao nhng thanh ven a c ke tha t p c s (Tuy
nhen ta co the ep con tro keu c s thanh con tro keu
dan xuat va truy cap toan bo cac thanh ven 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. Mang@ con tro@ tha1 chieu 3a' toan 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 cap c cac thanh ven cua p dan xuat
t con tro p c s, ta s dung cau enh:
access *o! allo!ed $ecause o2 cast
??de"ived @$0@-Lset_b?RR@N
cout KK ??de"ived @$0@-Lget_b?@N
Chu y rang phep toan so hoc tren con tro co en
quan en keu d eu c s. Do o con tro keu c s tro
en keu dan xuat, tang/gam con tro khong tro en o
tng tep theo cua p dan xuat thay vao o no se tro
en nhng v tr ma no cho a cua p c s. Neu nay
tat nhen se cho ket qua khong chnh xac. 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 +en tha$nh 1ieDn cua !<
C++ cho phep snh ra mot con tro ac bet tro en
thanh ven cua p khong can the hen thanh ven trong
p o. Con tro en thanh ven khong gong con tro
thong thng trong C++, no ch cung cap mot a ch
o;;,et cua thanh ven trong p o. Con tro en cac thanh
ven cua p khong thc s a mot con tro, do o cac
toan t cham (%) va mu ten (-L) khong the ap dung. Ne
truy cap en cac thanh ven cua p ta s dung toan t
con tro thanh ven % 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. Mang@ con tro@ tha1 chieu 3a' toan 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 cliidataN data #e#$e" 0oi*te"
i*t ?clii2u*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 ham #ai*?@, chng trnh tao ra ha con tro thanh
ven data va 2u*c (chu y cach kha bao mo con tro). Kh
kha bao con tro thanh ven, ta pha ch ra p va toan t
phan ga pham v. Chng trnh cung tao ra ha o tng o$B
va o$2. Nh a mnh hoa, con tro thanh ven cung co the
tro en d eu hoac ham. Tep theo, chng trnh se nhan
a ch cua val va dou$le_val. Na ch ay ch a a
ch o;;,et cua cac thanh ven trong p o. Tep theo hen
th ga tr thanh ven val thong qua con tro data va thc
hen ham dou$le_val?@ thong qua con tro 2u*c.
Kh truy cap vao thanh ven cua mot o tng bang
o tng ta s dung toan t %, tuy nhen kh truy cap
thanh ven cua o tng bang con tro o tng ta s
dung toan 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 cliidataN data #e#$e" 0oi*te"
i*t ?clii2u*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-Ldata KK t t KK 02-Ldata KK tl*tN
cout KK tHe"e the6 a"e dou$ledi tN
cout KK ?0B-L2u*c@?@ KK t tN
cout KK ?02-L2u*c@?@ KK tl*tN
"etu"* UN
4
Nh rang, tro en thanh ven cua mot p khac
v tro en the hen cua thanh ven trong mot p. Xet
oan chng trnh sau:
i*t cliidN
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 that s cua o%val trong bo nh,
con d a a ch o;;,et trong cua val trong o tng.
Tong quat, toan t tro en thanh ven ch ap dung
trong mot va tnh huong ac bet. No khong pha a cach
Gh*ng 1. Mang@ con tro@ tha1 chieu 3a' toan t* ca= =ha= bo"
nh .o"ng 224
s dung teu beu trong ap trnh hen ta.
1.1/-. T=>X S=ZQRO
C++ cha mot ac trng en quan en con tro go a
tham cheu. Ve ban chat tham cheu a mot con tro an.
Co ba cach s dung tham cheu: 1. Tham so cua ham; 2.
Ga tr tra ve cua mot ham; 3. Tham cheu oc ap.
1.1>3.1. &ha/ chieu +en tha/ ,o
Co ha cach g tham so en ham o a go theo ga
tr va go theo tham cheu. Go theo ga tr a sao chep tham
so ro g en ham, go theo tham cheu a g a cua
tham so en ham. Ngam nh C++ go theo ga tr, tuy
nhen cung co ha cach e go theo tham cheu. Nau ten
ta co the g mot con tro en tham so. Th ha ta s dung
tham cheu tham so. Ne heu ro hn ta bat au v v du
go bang tham cheu bang cach s dung 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 chng trnh tren, *eg?@ se nhan tham so a mot
con tro so nguyen, do o *eg?@ pha c go mot cach ro
rang v a ch cua 7. Va toan t pha c s dung
e truy cap en ben c tro b i.
Ne tao ra mot tham cheu tham so, ta at trc tham
so mot dau f. V du kha bao ham *eg?@ bang tham cheu
tham so nh sau:
void *eg?i*t fi@N
Kh o i chnh a ten khac cua ben ma c go b
ham *eg?@. Mo thao tac tren i thc te a thao tac tren
ben c go b ham *eg?@. D thuat ng k thuat, i
a mot con tro an t ong tham cheu en tham so c
s dung trong cac go ham *eg?@. Ben i a c tao a
tham cheu, do o khong can thet pha ap dung toan t
. Thay vao o mo an i c s dung no se tham cheu
an en tham so va mo thay o tren i eu tac ong en
tham so. Hn na, kh go ham *eg?@ khong can thet pha
ch trc ten tham so toan t f, trnh ben dch se t
ong thc hen vec nay. V du sau a phen ban khac cua
v du tren:
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. Mang@ con tro@ tha1 chieu 3a' toan 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 tao ra mot tham cheu tham so, no t ong tham
cheu en (tro en) tham so c s dung e go ham. Do
o trong chng trnh tren, cau enh ic-i thc s tac ong
en 7 khong pha a ban sao cua 7. V vay khong can pha
ap dung toan t f en tham so. Ben trong ham, tham
cheu tham so c s dung trc tep ma khong can pha
s dung toan t . Tong quat, kh gan mot ga tr en
tham cheu, ta thc s gan ga tr o en ben ma tham
so tro en.
Ben trong ham ta khong the thay o nhng g ma
tham cheu tro en. Cu the cau enh i ben trong ham
ch tang ga tr cua ben c s dung e go ham *eg?@
en ch khong tro en phan t tep theo. V du: xay dng
ham s!a0?@ e trao o ha ben:
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
Ket qua hen th en man hnh 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/ chieu ;en +oi t'ng
Kh mot o tng g en ham, tao ra mot ban sao
cua o tng o. Kh ham ket thuc, huy t cua ban sao
o se c go. Co mot va tnh huong ta khong muon
huy t thc hen kh ket thuc ham, kh o ta g o
tng bang tham cheu. Kh g o tng bang tham cheu,
khong tao ra s sao chep o tng. V vay se khong co
huy t nao thc hen kh ket thuc ham. 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. Mang@ con tro@ tha1 chieu 3a' toan 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
cliicl?@
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
Ket qua xuat hen nh sau:
Co*st"ucti*g B
-BU
Cest"ucti*g B
Ta thay ch co mot go ham huy t. Neu go
ham theo tr, tao ra ha o tng trong ham *eg?@ va huy
t se thc hen ha an kh thoat kho ham.
Truy cap cac tham ven cua p trong ham *eg?@ ch
dung toan t cham khong dung toan t -L.
Kh g en tham so bang tham cheu, nh rang mo
thay o cua o tng ben trong ham tac ong en o
tng c s dung e go ham.
G nhng o tng nho bang tham cheu nhanh hn
a g theo ga tr. Cac tham so thng g en stack.
That vay, o tng n se mat so ng ang ke chu k
26 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
cua CPU e ay va ay ra t ngan xep.
1.1>3.3. &ra 1eN /ot tha/ chieu
Mot ham co the tra ve mot tham cheu. Neu nay
co tac ong cho phep ham c s dung ben tra cua
phep gan. 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 wwN assig* to s0ace a2te" Hello
cout KK sN
"etu"* UN
4
cha" f"e0lace?i*t i@
3
"etu"* sgihN
4
Chng trnh nay thay the khoang trong ga ha t
Hello va The"e bang mot k t . Kh o no hen th
HelloThe"e. Ta xem no thc hen nh the nao. Nau ten
ham "e0lace?@ c kha bao va tra ve tham cheu en
mot k t. Kh vet ma ham "e0lace?@, no tra ve tham
cheu en phan t cua s c ch ra b tham so i. Tham
cheu nay sau o c s dung trong ham #ai*?@ e gan
bang k t .
Chu y cuo cung o a kh tra ve mot tham cheu
a o tng c tham cheu khong nam ngoa pham v sau
kh ket thuc ham.
1.1>3.#. &ha/ chieu +oc !a<
Gh*ng 1. Mang@ con tro@ tha1 chieu 3a' toan t* ca= =ha= bo"
nh .o"ng 21
Ta co the kha bao tham cheu nh a mot ben thong
thng, thao tac nay go a tham cheu oc ap. Kh tao
mot tham cheu oc ap, ta tao ra mot ten khac cho ben
o tng. Tat ca cac tham cheu pha c kh gan kh
c tao. 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
Ket qua hen th tren man hnh nh sau:
BU BU
BUU BUU
BZ BZ
BR BR
Tham cheu oc ap t kh c s dung trong cac tnh
huong ap trnh b v cung mot o tng co ha ten khac
nhau se am cho chng trnh on xon.
1.1>3.2. &ha/ chieu +en /ot kie*u ;aPn Muat
Tham cheu mot p c s co the c s dung e
22 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
tham cheu en o tng cua mot p dan xuat. Ung
dung thong dung nhat trong trng hp nay a tham so
trong ham. Tham so tham cheu en mot p c s co the
nhan c mot o tng cua p c s va cac keu o
tng khac dan xuat t p c s.
1.1>3.3. Han che cua tha/ chieu
Co mot va han che kh s dung tham cheu. Ta khong
the tham cheu en mot tham cheu khac. No cach khac,
ta khong the ay a ch cua mot tham cheu. Khong the
tao ra mang cac tham cheu. Khong the tao ra con tro tham
cheu. Khong the tham cheu en trng bit.
Ben tham cheu pha c kh gan kh kha bao tr
kh no a thanh ven cua mot p, tham so cua mot ham
hoac ga tr tra ve. Khong co tham cheu rong.
1.1/+. TB>W@ IDT S>RH H=>WI YBG@A
C++ cung cap ha toan t cap phap bo nh ong o
a *e! va delete. Toan t nay dung e cap phap va ga
phong vung nh ta th em thc th chng trnh. Trong C+
+ cung ho tr ha ham #alloc?@ va 2"ee?@ e thc hen ha
thao tac tren. Tuy nhen ha toan t *e! va delete co
nheu em thuan hn.
Toan t *e! cap phap vung nh va tra ve con tro
bat au ta vung nh o. Toan t delete ga phong
vung nh a c cap phap b toan t *e! trc o.
Cu phap cua ha toan t nh sau:
0_va" = *e! t60eN
delete 0_va"N
Neu nh toan t *e! khong thc hen c no tra ve
Gh*ng 1. Mang@ con tro@ tha1 chieu 3a' toan t* ca= =ha= bo"
nh .o"ng 2
mot ngoa e $ad_alloc. Ngoa e nay c nh ngha trong
teu e K*e!L. Ng ap trnh pha quan ngoa e nay va
a ra hanh ong tng ng. Neu ta khong bat ngoa e
nay, chng trnh se ket thuc. Trong mot so trnh ben dch
cu, neu toan t *e! khong thc hen c, tra ve mot
con tro rong. 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
Chng trnh nay gan 0 en a ch cua bo nh hea=
va vung nh nay pha u n e u tr so nguyen. Sau
o gan bo nh nay ga tr BUU va hen th no dung o
en man hnh. Cuo cung ga phong bo nh a cap
phat. Neu trnh ben dch ca at theo cach tra ve *ull kh
khong thc hen c ta pha thay o a chng trnh nay.
Toan t delete pha s dung ket hp v toan t
*e!. Neu s dung delete v mo keu con tro khac chng
trnh se gap nhng o rat nghem trong v du treo may.
2& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Mac dau *e! va delete thc hen gong nh ham
#alloc?@ va ham 2"ee?@, tuy nhen no co nheu em
thuan ten hn: th nhat toan t *e! co the cap phat bo
nh u cho o tng khong can pha s dung toan t
si8eo2?@. Th ha toan t *e! t ong tra ve keu con tro
phu hp v keu d eu, ta khong can ep keu gong
nh ham #alloc?@. Cuo cung ca *e! va delete eu co the
ta bo.
1.1>5.1. Khi gan cho bo nh +aO ca< <hat
Ta co the kh tao cho bo nh a cap phat mot va
ga tr bang cach at ga tr kh tao sau ten keu trong
cau enh *e!. Cu phap:
0_va" = *e! va"_t60e ?i*itiali8e"@N
Tat nhen ga tr kh gan pha tng thch keu d
eu v keu ma a c cap phat. V du chng trnh sau
n ra mot so nguyen a c kh tao v ga 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. Mang@ con tro@ tha1 chieu 3a' toan t* ca= =ha= bo"
nh .o"ng 24
4
1.1>5.2. (a< <hat /ang
Ta co the s dung *e! e cap phat cho mang, cu
phap:
0_va" = *e! a""a6_t60e gsi8ehN
si8e a so phan t trong mang. Ne ga phong vung
nh nay, ta s dung cu phap:
delete gh 0_va"N
V du sau se cap phat mot mang 10 so nguyen:
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
Han che cua vec cap phat bo nh cho mang a ta
khong the dung kh gan cac ga tr trong uc kha bao.
1.1>5.3. (a< <ha< cho +oi t'ng
Ta co the cap phat ong cho o tng bang toan t
2+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
*e!. Kh o mot o tng c tao ra va mot con tro en
o tng o se c tra ve. No tng c cap phat
ong gong nh mo o tng khac cung keu. Kh c
tao, cau t cung thc hen, kh ga phong huy t cung
thc hen. V du sau tao mot p $ala*ce en ket ten ng
v so ta khoan cua ho, ben trong ham #ai*?@ cac o
tng c cap phat ong:
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. Mang@ con tro@ tha1 chieu 3a' toan 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 cha o tng, nen ta dung toan
t mu ten e truy xuat cac thanh ven. No tng cap
phat ong cung co cau t va huy t, cau t cung co
the co tham so. V du sau a phen ban khac cua v du
trc:
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 cap phat mang cac o tng, nhng co
mot chu y. Mang cap phat b toan t *e! khong the
co kh gan ga tr, ta pha chac rang neu p co cau
t th pha co mot cau t khong tham so. Neu ta khong
am eu nay, trnh ben dch se khong tm c cau t
nao phu hp kh co gang cap phat cho mang va no se
khong ben dch chng trnh. V du sau se cap phat cho
$ala*ce mot mang va no se go cau t khong 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. Mang@ con tro@ tha1 chieu 3a' toan 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
Ket qua xuat hen tren man hnh 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*
Mot do e s dung dang delete gh e ga phong
o tng o a ham huy t se thc hen cho mo o
tng.
1.1>5.#. RothroU
Trong C++ chuan, ta co the co toan t *e! tra ve
*ull thay v nem ra mot ngoa e kh khong cap phat c
bo nh. Dang toan t *e! nay rat co ch kh ben dch
chng trnh cu trong mo hnh m. Rat co kh ta thay the
ham #alloc?@ bang toan t *e! (kh cap nhat ma nguon
t C sang C++). Khuon dang cua toan t *e! nh sau:
0_va" c *e!?*oth"o!@ t60eN
0_va" a ben con tro keu t60e, toan t *e! theo dang
nay se tra ve ga tr *ull neu khong cap phat c bo
nh, kh o ta co the chuyen ma cu sang dang m ma
khong can pha quan ngoa e. Ne s dung tuy chon
*oth"o! ta pha chen teu 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. Mang@ con tro@ tha1 chieu 3a' toan 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. ]ang ,aT< Me< cua neU 1a$ ;e!ete
Co mot dang ac bet cua toan t *e!, go a dang
sap xep dung e thc hen mot cach khac e cap phat
bo nh. No rat co kh ta bo toan t *e! trong mot
va trng ac bet. Dang tong quat:
0_va" = *e! (locatio*) t60eN
locatio* a a ch tra ve b *e!, kh s dung dang
cap phat bo nh nay ta pha s dung toan t delete
tng ng.
Gh*ng 1&. Ka'1 tai bo"i@ cau 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
Ham ta bo a qua trnh s dung cung mot ten cho
ha hay nheu ham. C che hoat ong a mo dang ham
cung ten pha khac nhau ve keu tham so hoac so ng
tham so. Ch co thong qua s khac nhau nay trnh ben
dch bet ham nao se c go trong cac tnh huong a ra.
V du chng trnh sau ta bo ham #62u*c?@ bang cach s
dung keu khac nhau cua 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
Chng trnh sau ta bo ham #62u*c?@ bang cach s
dung so tham so khac 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"* ibN
4
Chu y ha ham ch khac nhau ve keu d eu tra
ve khong the ta bo. V du oan chng trnh sau a khong
hp 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%
Trng hp keu kha bao cua ha ham khac nhau,
nhng thc te no gong nhau. V du nh oan ma sau:
void 2?i*t 0@N
void 2?i*t 0gh@N e""o"X 0 is sa#e as 0gh
Lu y rang trnh ben dch heu 0 gong nh 0gh, do o
mac dau kha bao xuat hen khac nhau nhng thc te a
nh nhau. V e o nen chng trnh tren gap o.
1.1/#. T>TZ VBGZ =>UX S>RO IDT
Ham cau t co the ta bo, thc te tnh huong nay
s dung rat nheu co 3 do e ta bo ham cau t:
Gh*ng 1&. Ka'1 tai bo"i@ cau t* ,ao che= 3a' tha1 ,o ngaQ1
.nh 2&4
mem deo; cho phep kh gan va khong kh gan mot
o tng kh tao va nh ngha cau t sao chep.
1.1>9.1. &ai boi ha$/ cau t' +e* ch'ng trInh
/eN/ ;eo
Ta muon tao mot p ma co ha hay nheu cach tao
nen o tng. Trong trng hp nay ta pha s dung cau
t ta bo. No tang tnh mem deo cua chng trnh b v
ng dung t do chon cach tot nhat e tao ra mot o
tng. V du xet 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 tedecedecedtX 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 tt KK da6N
cout KK tt 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?tBU222UUBt@N
o$B%sho!_date?@N
o$2%sho!_date?@N
"etu"* UN
4
Trong chng trnh tren, ta a kh tao mot o tng
cua p date bang ha cach: hoac s dung ba so nguyen
hoac s dung chuo Mdd##6666M. Ly do thong dung nhat
e s dung ta bo cau t a cho phep mot o tng
c tao bang cach s dung nheu phng phap khac nhau.
1.1>9.2. (ho <he< khi gan 1a$ khoDng /ot +oi
t'ng
Mot do thong dung na e ta bo cau t o a
cho phep kh gan hoac khong mot o tng. 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 tai bo"i@ cau 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 tren, ca ha cau t a can thet. Cau t
ngam nh c s dung e tao mang o2Th"ee khong co
kh tao va mang cap phat ong. Cau t co tham so
c go e tao ra mang cac o tng o2T!o.
1.11/. C>RO IDT \>B S=QWH
Mot trong nhng dang quan trong cua cau t ta bo
a cau t sao chep. Nnh ngha mot cau t sao chep gup
ta tranh c tnh huong ma co the xuat hen kh mot o
tng c s dung e kh tao o tng khac.
Kh mot o tng c s dung e kh tao mot o
tng khac, C++ se sao chep tng bit d eu cua o
tng nay en o tng ka. Do o co mot ban sao gong
het cua o tng dung e kh tao c tao ra trong o
tng ch. Mac dau eu nay a thoa an cho nheu
trng hp va chnh xac nhng g ma ta muon xay ra. Tuy
nhen co mot va tnh huong ma cach sao chep tng bit
khong thc hen. V du p #6class cap phat bo nh cho
mo o tng kh no c tao, ga s A a mot o tng
cua p o. Neu nay co ngha a A a c cap phat
bo nh. Ga s A c s dung e kh gan B:
M6class B c AN
Neu sao chep tng bt, B se a mot ban sao chnh xac
cua A. Neu nay ngha a B s dung cung bo nh ma A
a s dung thay v cap phat reng cho no. Ro rang ay
a ket qua khong mong muon. V du p #6class bao gom
mot huy t ga phong vung nh, kh o cung mot vung
nh se c ga phong ha an kh A va B b huy bo. Van
Gh*ng 1&. Ka'1 tai bo"i@ cau t* ,ao che= 3a' tha1 ,o ngaQ1
.nh 2&9
e neu tren se xuat hen trong ha tnh huong: 1. Kh tao
sao chep o tng e g en tham so cua ham; 2. Tao ra
mot o tng tam th e tra ve ga tr cho ham. Ne
ga quyet van e nh a trnh bay tren, C++ cho phep
ta tao ra mot cau t sao chep, va trnh ben dch se s
dung e kh gan mot o tng khac. Kh ton ta mot
cau t sao chep, sao chep tng bit se b bo qua. Cu phap
cua cau t sao chep:
class*a#e ?co*st class*a#e fo@ 3
$od6 o2 co*st"ucto"
4
Trong o o a tham cheu cua o tng ben ve pha
cua thao tac kh gan. Cau t sao chep co the co nheu
tham so, nhng bat buoc tham so au ten pha a mot
tham cheu cua o tng. Chu y, C++ nh ngha ha tnh
huong phan bet ma ga tr cua o tng nay chuyen
qua o tng khac. Th nhat a gan o tng. Th ha a
kh gan ga tr. va xuat hen trong 3 cach:
- Kh mot o tng kh gan mot o tng khac, v
du nh uc kha bao
- Kh sao chep mot o tng e g en ham
- Kh tao ra mot o tng tam th (v du e am ga
tr tra ve cho mot ham)
V du, mot p co ten a #6class, 6 a mot o tng
cua #6class mo cau enh sau ay eu thc hen thao tac
kh gan:
#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 ay tao ra mot cau t sao chep. Chng trnh
tao ra mot mang so nguyen tranh c tnh huong b tran
ben mang. Bo nh cho mo mang c cap phap b
toan t *e! va con tro en vung nh nay c duy tr ben
trong mo o tng:
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 tai bo"i@ cau 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 dung e kh gan 7 bang cau
enh:
a""a6 7?*u#@N i*vo5es co06 co*st"ucto"
Cau t sao chep se c go, bo nh cho mang m
c cap phat va u tr trong 7%0 va no dung cua *u#
c sao chep en mang cua 7. Trong tnh huong nay 7 va
*u# co mang cha cung ga tr, nhng mo mang co v tr
khac nhau trong bo nh (*u#%0 va 7%0 khong tro en cung
mot bo nh). Neu khong co cau t sao chep, ngam nh
se kh gan o tng 7 bang cach sao chep tng bit mot
cua *u# vao 7 va ket qua a 7%0 va *u#%0 cung cha se
242 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
mot bo nh. Lu y a cau t sao chep ch thc hen kh
co s kh gan. V du chng trng sau khong go cau t sao
chep:
a""a6 a?BU@N
%%%
a""a6 $?BU@N
$ c aN does *ot call co06 co*st"ucto"
Trong tnh huong tren, $ c aN thc hen toan t gan.
Neu c khong ta bo, se thc hen thao tac sao chep tng
bit mot. Do o trong mot va tnh huong ta can pha ta
bo toan t c.
1.111. TKX Ya> S=l SOT> XBGI =>UX I>TZ VBGZ
Nh a e cap trong chng 5, ta co the nhan a ch
cua mot ham. Mot trong nhng do e thc hen eu
nay a gan a ch cua mot ham cho mot con tro va go
ham thong qua con tro nay. Neu ham khong ta bo, qua
trnh nay thc hen bnh thng. Tuy nhen neu ham ta bo
ta can them mot va thao tac na. Ne heu v sao ta xet
cau enh gan a ch cua ham #62u*c en con tro 0:
0 c #62u*cN
Neu ham ta bo, trnh ben dch khong bet phen
ban nao cua ham se c gan cho 0. Cau tra phu
thuoc vao cach kha bao cua #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 tai bo"i@ cau 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 ay co ha phen ban cua ham #62u*c?@, ca ha
eu tra ve keu nguyen nhng phen ban au ch co
mot tham so va phen ban con a co ha tham so. Trong
chng trnh, 20 a con tro tro en ham ma tra ve mot so
nguyen va co mot tham so. Kh 20 nhan a ch cua ham
#62u*c?@, C++ se s dung thong tn nay e chon phen
ban #62u*c?i*t a@ cua ham #62u*c?@. Kh 20 c kha bao:
i*t ?20@?i*t aX i*t $@N
Luc nay 20 se nhan a ch phen ban #62u*c?i*t aX
i*t $@ cua ham #62u*c?@. Tong quat kh gan a ch cua
mot ham ta bo en con tro ham. Phu thuoc vao cach
kha bao con tro ham ma trnh ben dch se chon phen
ban ham tng ng. Kha bao con tro ham pha gong duy
nhat mot phen ban cua cac ham ta bo.
1.112. TDU _=BW> BPQJFB>]
Kh m tao ra C++, yeu cau pha kha bao t khoa
ove"load trc cac ham ta bo. Neu nay a o th va
khong c s dung hoac ho tr. That vay no cung
khong co san trong C++ chuan. Tuy nhen b v co the
xuat hen mot va chng trnh C++ c vet phen ban
24& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
cu, do o ta cung nen bet ove"load c s dung nh the
nao. Cu phap:
ove"load 2u*c-*a#eN
2u*c-*a#e a ten ham can ta bo, cau enh nay
pha c at trc kha bao ta bo. V du ta no cho trnh
ben dch phen ban cu bet rang mnh se ta bo mot
ham go a test?@:
ove"load testN
1.113. T=>X \BR =>UX @A>?X Ya@=
C++ cho phep gan mot ga tr ngam nh kh khong
co tham so tng ng ch ra trong go ham. V du kha
bao ham #62u*c?@ nhan mot tham so a keu dou$le v
ga tr ngam nh a U%U
void #62u*c?dou$le d c U%U@
3
%%%
4
Ham #62u*c?@ co the go mot trong ha cach, v du:
#62u*c?BZR%29Y@N 0ass a* e70licit value
#62u*c?@N let 2u*ctio* use de2ault
L go au ten g ga tr BZR%29Y en d, cach go
th ha truyen ga tr U cho d.
Mot trong nhng do e C++ cung cap tham so ngam
nh b v no cung cap nheu cach khac nhau e ng
ap trnh quan chng trnh tot hn. Ne quan nheu tnh
huong khac nhau, mot ham thng co nheu tham so hn
yeu cau. That vay, kh ng dung tham so ngam nh, ta
ch can ch ra tham so co y ngha trong tnh huong chnh
xac, khong nhat thet pha ch het nhng tham so khong
Gh*ng 1&. Ka'1 tai bo"i@ cau t* ,ao che= 3a' tha1 ,o ngaQ1
.nh 244
can thet khac. Mot v du the hen tnh huong nay a ham
xoa man hnh. Thong thng man hnh co 25 dong, kh xoa
man hnh thc chat ta xoa 25 dong nay va a con tro ve
au dong. Tuy nhen se co mot va keu man hnh ma
co so dong khac 25. Kh o ta dung tham so ngam nh
cho ham xoa man hnh a 25, trong trng hp khac ta m
ch ra so dong 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
Mot v du khac cua tham so ngam nh a s dung
nh a mot c e thong bao cho ham s dung a tham so
trc o. V du ham i0uts?@ t ong thut au dong mot
chuo van ban v so k t cho trc.
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
Mac dau phen ban ham nay khong co g sa nhng,
nhng ta co the cung cap tham so ngam nh cho tham ben
i*de*t e thong bao cho ham i0uts?@ thuc vao au dong
v tham so i*de*t a go an trc. 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
Ket qua xuat hen tren man hnh 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 tao ham co tham so ngam nh, ta u y rang ga
tr ngam nh pha c ch ra duy nhat mot an va ngay
Gh*ng 1&. Ka'1 tai bo"i@ cau t* ,ao che= 3a' tha1 ,o ngaQ1
.nh 247
ta th em kha bao. Neu ta co ch ra tham so ngam
nh ta v tr nh ngha ham, chng trnh se bao o. Ta co
the ch ra tham so ngam nh khac nhau cho ham ta bo.
Tat ca cac tham so ay ga tr ngam nh pha c
kha bao ben pha nhat trong danh sach cac tham so. V du
nh ngha ham i0uts?@ nh the nay a khong hp e.
void i0uts?i*t i*de*t c -BX cha" st"@N
V tham so ngam nh vet trc tham so thong
thng.
Ta co the s dung tham so ngam nh cho cau t. V
du p cu$e duy tr mot bo ba ga tr cac so nguyen. Ham
cau t cua no thet ap cac ga tr trong bo ba ngam
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"* 768N
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 em thuan kh s dung tham so ngam nh
a: khong can pha nh ngha mot cau t khong tham
so. Th ha a ta khong can pha ch cac ga tr cu the
trong uc kha bao o tng.
1.113.1. &ha/ ,o ngaN/ +nh ,o 1i tai boi
Trong mot va tnh huong, tham so ngam nh co the
c s dung nh a dang vet tat cua ham ta bo. Lp
cu$e nh tren a mot v du. Tnh huong khac, ga s ta
muon tao ra ha phen bang cua ham st"cat?@ chuan.
Phen ban au ten hoat ong gong nh st"cat?@ va ghep
toan bo no dung cua mot chuo vao cuo chuo khac.
Phen ban th ha ay mot tham so th ba ch ra so k t
can ghep. V du ta nh ngha ha ham #6st"cat?@ nh sau:
void #6st"cat?cha" sBX cha" s2X i*t le*@N
void #6st"cat?cha" sBX cha" s2@N
Phen ban au se chep le* k t t chuo s2 vao
cuo chuo sB. phen ban ha chep toan bo k t cua s2
vao cuo sB. Ro rang ta khong can thet pha nh ngha
ha phen ban nay, ta co the s dung tham so ngam nh
trong tnh huong tren.
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 tai bo"i@ cau 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 tao ra tnh huong ma trnh ben dch khong
bet chon ga ha hay nheu ham ta bo. Kh eu nay
xay ra ta go a s nhap nhang. Trnh ben dch co s nhap
nhang a o va no se khong ben dch. 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 tNu*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 vay no co the nhan tham so
hoac 2loat hoac dou$le. Kh go ham #62u*c?BU%B@, khong
xuat hen s nhap nhang b v hang BU%B c heu a
keu dou$le, nhng kh go ham #62u*c?BU@ xuat hen s
nhap nhang b v trnh ben dch khong bet chuyen BU
sang 2loat hay dou$le.
V du khac the hen s nhap nhang:
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 nhap
nhang. Kh go ham #62u*c?@ v so nguyen RR, trnh ben
Gh*ng 1&. Ka'1 tai bo"i@ cau t* ,ao che= 3a' tha1 ,o ngaQ1
.nh 2+1
dch se khong bet go ham nao v RR khong bet chuyen
sang keu cha" hay u*sig*ed cha".
Mot cach khac e snh ra s nhap nhang o a s
dung tham so ngam nh trong ham ta bo. Xet 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"* ibN
4
OU ay, dong au ten go ham #62u*c?@ v ha tham
so do o khong xuat hen s nhap nhang. Kh go ham
#62u*c?@ v mot tham so, trnh ben dch se khong bet
go ham nao tng ng.
Mot cach khac e snh ra nhap nhang o a ham ta
bo v tham cheu, 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 chng trnh, ham nay khong c
ta bo b v no ch khac nhau tham cheu cua tham
so.
Gh*ng 14. )oan t* tai bo"i 2+
C=DL@A 1,. TB>W@ IDT I>TZ VBGZ
Trong C++, ta co the ta bo rat nheu toan t v vay
no co the thc hen nheu thao tac ac bet en quan
en p. V du p stac5 co the ta bo toan t tang()
e thay the cho phng thc 0ush?@ va toan t gam (--)
e thay the cho phng thc 0o0?@. Kh mot toan t ta
bo, no khong am mat y ngha goc cua no, thay vao
o no m rong pham v ng dung cua cac o tng.
Kha nang ta bo toan t a ac trng rat hu ch
cua C++. No cho phep tch hp ay u cac keu p m
vao mo trng ap trnh. Sau kh ta bo toan t, ta co
the s dung o tng trong beu thc gong nh cac d
eu c s trong C++.
Ta bo toan t bang cach tao ra mot ham, mot
ham toan t nh ngha hoat ong ma toan t ta bo
se thc hen. Ham toan t co the a thanh ven hoac
khong cua mot p.
1.11,. T>dB XBGI =>UX IB>W@ IDT I=>U@= PZQC@
Cu phap:
"etu"*-t60e class-*a#eiio0e"ato"J?a"gu#e*t-list@
3
o0e"atio*s
4
Thong thng ham toan t tra ve mot o tng
cua p ma no thao tac tren o, tuy nhen keu tra ve
a keu hp e bat k, J a toan t can ta bo, v du neu
ta bo phep toan ta vet o0e"ato". Kh ta bo toan t
mot ngo, a"gu#e*t-list e trong. Kh ta bo toan t ha
2+& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
ngo, a"gu#e*t-list se nhan mot tham so. V du sau tao
mot p co ten a loc, u g ga tr knh o va v o.
No ta bo toan t cong ().
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 thay rang o0e"ato"?@ ch co mot tham so va
Gh*ng 14. )oan t* tai bo"i 2+4
toan hang ben tra phep cong se g en ham thong qua
con tro this. Toan hang ben pha chnh a tham so o02.
Thong thng ham toan t ta bo tra ve mot o tng
thuoc p o, v vay ta co the vet cau enh sau:
?o$Bo$2@%sho!?@N dis0la6s outco#e o2 o$Bo$2
Trong tnh huong nay, o0Bo02 se tao ra mot o tng
trung gan va no se ton ta cho en kh ham sho!?@ ket
thuc.
Ta co the t do thc hen mo thao tac trong ham toan
t, thong thng ta chon toan t e ta bo phu hp v
ng canh. V du tep theo bo sung ba toan t vao 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. )oan t* tai 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 trat t ben trong phep toan tr, toan hang
ben tra se tr cho toan hang ben pha. B v o tng
ben tra se snh ra go ham, do o d eu trong o02 se
a d eu b tr va this a d eu tr.
Trong C++, neu phep toan c khong ta bo, no se t
ong tao ra mot phep gan ngam nh cho tat ca cac p.
Phep gan ngam nh a thc hen sao chep tng thanh
ven theo tng bit. Bang cach ta bo c, ta co the nh
ngha ro rang nhng g ma phep gan thc hen. Trong v
du tren, cac ham o0e"ato" tra ve this a o tng phat
snh ra go. Ta co the thc hen nheu phep gan cung
mot uc, v du nh sau:
o$B c o$2 c o$9N #ulti0le assig*#e*t
Ham o0e"ato"?@ khong nhan tham so, b v a
toan t mot ngo.
1.112.1. &ao /ot ;ang tieNn to 1a$ hau to cua
toan t' ta-ng= gia/
Trong v du tren ch co ch co dang ten to cua
phep toan c ca at, tuy nhen trong C++ cho phep ta
ca at ha dang phep toan ten to va hau to cua ha
phep toan t ong tang/gam. Ne am eu nay ta pha
nh ngha ha phen ban cua ham o0e"ato"?@. Mot dang
a nh ngha v du tren, mot dang na nh ngha nh
sau:
2+- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
loc o0e"ato"?i*t 7@N
Neu ng trc toan hang, ham o0e"ato"?@ se
c go, neu ng sau toan hang, ham o0e"ato"?i*t
7@ c go va 7 co ga tr U.
Nay a dang tong quat cho ha phep toan tang/gam
dang ten to va hau 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. &ai boi treDn toan t' 1iet taTt
Ta co the ta bo mo phep toan ngan cua C++ v du
nh c, -c, c, . v du the hen ta bo cho phep toan 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 mot trong nhng toan t dang nay, nh
rang ch ta bo ket hp mot phep gan v mot toan t
Gh*ng 14. )oan t* tai bo"i 2+9
khac.
1.112.3. Han che cua toan t' tai boi
Co mot va han che kh ap dung ta bo cac phep
toan. Ta khong the thay o quyen u ten cua cac phep
toan. Ta khong the thay o so toan hang cua mot phep
toan (tuy nhen ta co the chon hoac bo qua mot toan
hang). Ngoa tr mot va trng hp at bet, ta khong
c nh ngha tham so ngam nh cho cac phep toan.
Cuo cung nhng phep toan % ii % | khong c ta bo.
Ngoa tr phep toan gan, cac phep toan con a co
the c ke tha b p dan xuat. Tuy nhen p dan
xuat hoan toan co the ta bo mo toan t (bao gom ca
cac toan 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 mot toan t cho p bang cach s
dung ham khong pha a thanh ven, thng a ham than
then cua p. Do khong pha a thanh ven cua p nen
no khong co con tro this. V vay mot ham toan t ta
bo than then pha g tham so ro rang. Ngha a neu
mot ham than then ta bo mot toan t ha ngo pha
nhan ha tham so va mot ngo pha co mot tham so. Kh
ta bo mot toan t ha ngo s dung ham than then,
toan hang ben tra se g en tham so au ten va toan
hang ben pha g en tham so th ha. Trong v du sau
ham o0e"ato"?@ c tao d dang ham than then.
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. )oan t* tai bo"i 271
latitude c o02%latitudeN
"etu"* thisNi%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 mot va han che kh s dung ham toan t than
then. Th nhat ta khong the ta bo cac phep toan c ?@
gh -L. Th ha kh ta bo cac phep toan tang gam ta pha
s dung tham cheu.
1.113.1. Q' ;ung :rien; +e* tai boi \\ 1a$ ??
Neu muon s dung ham than then e ta bo toan
t tang/gam ta pha g toan hang a mot tham cheu
b v ham than then khong 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. )oan t* tai bo"i 27
--o$2N
o$2%sho!?@N dis0la6s BB 2B
"etu"* UN
4
Neu muon ta bo dang hau to cua phep toan
tang/gam bang cach s dung ham than then, ta ch ra
mot tham so nguyen 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$/ toan t' thaDn thien bo* ,ung tnh
/eN/ ;eo
Trong nheu trng hp ta co the s dung ham toan
t than then hay ham toan t thanh ven e ta bo
mot phep toan. Trong mot so trng hp, tot nhat a
nen s dung ham toan t thanh ven. Tuy nhen co mot
tnh huong ma trong o ta bo bang cach s dung ham
toan t than then am tang tnh mem deo cua phep
toan ta bo.
V du xet p CL nh ngha mot ham thanh ven
o0e"ato"?@ e cong o tng cua p o v so
nguyen. V du o tng co ten a O$ thuoc p CL, kh o
beu thc sau a hp e:
O$ BUU valid
Trong tnh huong nay O$ snh ra go ham, nhng eu
g xay ra v beu thc:
BUU O$ i*valid
Trong tnh huong nay so nguyen xuat hen ben tra
va no khong the go ham toan t do o trnh ben dch
khong thc hen cau enh nay. Ne ga quyet tnh huong
nay ta s dung ham toan t than then. Kh o ca ha
27& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
toan hang eu c g ro rang en ham toan t. V
vay o$becti*tege" va i*tege"o$bect, ch n gan a ta
bo ham nay ha an:
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. )oan t* tai 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 tren toan t *e! va delete. Ta co
the am eu nay neu muon s dung mot va phng
phap cap phap bo nh ac bet. V du ta muon cap phat
cho mot chng trnh ma s dung bo nh ao tren a kh
bo nh hea= a het. Dang chung e ta bo toan 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 keu nh ngha kha nang u tr cua vung
nh c cap phat (si8e_t thng a keu so nguyen
khong dau), si8e cha so b?te can thet e u tr cac
27+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
o tng a c cap phat. Ham ta bo *e! pha tra ve
con tro en bo nh a cap phat hoac nem mot ngoa e
$ad_alloc neu ham cap phat gap o. Kh cap phat mot
o tng bang toan t *e! (hoac ham do ng dung nh
ngha hoac khong) cau t cua o tng se c go t
ong.
Ham delete nhan con tro en vung nh can c
ga phong, sau o no ga phong bo nh a cap phat
trc o cho he thong. Kh mot o tng b ga phong,
ham huy t se t ong thc hen. V du sau ay se ta
bo toan t *e! va delete bang cach dung ham cap phat
bo nh trong th ven chuan 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. )oan t* tai 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
Ket qua xuat hen tren man hnh 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 toan t *e! va delete toan cuc
bang cach ta bo nhng toan t nay ben ngoa tat ca
cac p. Kh toan t *e! va delete c ta bo toan cuc
toan t ngam nh se b bo qua va toan t m se c
s dung cho tat ca cac yeu cau cap phat. Tong quat, kh
toan t *e! va delete xuat hen au ten chng trnh dch
se kem tra xem co hay khong no nh ngha reng cho p
o. Neu co, phen ban nay se c s dung, neu khong
C++ se s dung nh ngha toan cuc. Xet 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. )oan t* tai 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. &ai boi toan t' neU 1a$ ;ete!e cho /ang
Ta co the cap phat bo nh cho mang cac o tng,
bang cach ta bo toan t *e! va delete theo dang 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 cap phat cho mot mang, ham cau t cho mo o
tng trong mang se t ong c go. Kh ga phong mot
mang, ham huy t cho mo o tng se c go. Ta
khong can cung cap ma ro rang cho hanh ong nay.
Chng trnh sau se cung cap va ga phong mot o tng
va mot mang cac o tng keu 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. )oan t* tai 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. &ai boi <hieDn ban nothroU cua neU 1a$
;e!ete
Gh*ng 14. )oan t* tai bo"i 2-
Cu phap:
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
Keu *oth"o!_t nh ngha trong K*e!L%
1.114. T>TZ VBGZ XBGI P>UZ IB>W@ IDT Y>eS VZQGI
1.118.1. &ai boi treDn AB
Trong C++, gh c co nh a toan t ha ngo, do o
dang tong quat cua ham thanh ven o0e"ato"gh?@ nh sau:
t60e class-*a#eiio0e"ato"gh?i*t i@
3
% % %
4
Tham so khong bat buoc a keu i*t, tuy nhen ham
o0e"ato"gh?@ thng pha cung cap ch so, v vay tham so
2-& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
keu i*t thng c s dung.
Cho o tng co ten a O, beu thc:
Og9h
Chuyen sang go ham ta bo toan t a:
O%o0e"ato"gh?9@
Ga tr beu den ch so se c g en ham
o0e"ato"gh?@. Con tro this se tro en O, ay a o tng
phat snh ra go ham.
Trong chng trnh sau, at60e kha bao mot mang ba so
nguyen. Ham cau t cua no kh tao mo thanh ven
cua mang mot ga tr. Ham ta bo toan t o0e"ato"gh?@
se tra ve ga tr cua mang v ch so c truyen 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 thet ke ham o0e"ato"gh?@ sao cho no co
Gh*ng 14. )oan t* tai bo"i 2-4
the s dung c ben pha va ben tra phep toan gan.
Ne am eu nay ta cho ga tr tra ve cua ham
o0e"ato"gh?@ a mot tham cheu. 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 ham o0e"ato"gh?@ tra ve mot tham cheu en
mot phan t cua mang c ch so b i, do o no co
the c s dung ben tra phep gan.
Mot em thuan e ta bo toan t gh a cho
phep ta ca at cach truy cap en phan t cua mang an
toan hn. Nh ta a bet, trong C++ ta co the truy xuat en
nhng phan t nam ngoa ben kha bao mang. V du sau
bo sung chc nang kem tra ben mang.
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 chng trnh tren kh cau enh:
o$g9h c YYN
thc th, o ben mang se xuat hen b ham
o0e"ato"gh?@ va chng trnh nay se ket thuc trc kh no
am hong mot chng trnh nao o.
Gh*ng 14. )oan t* tai bo"i 2-7
1.118.2. &ai boi treDn ("
Kh ta bo toan t go ham ?@, thc te ta khong tao
ra cach m e go ham. Nung hn a ta tao ra mot ham
toan t ma co the g en en ham so tham so bat k.
V du cho mot ham toan t ta bo kha bao nh sau:
dou$le o0e"ato"?@?i*t aX 2loat 2X cha" s@N
va mot o tng O thuoc p nay. Kh o cau enh:
O?BUX 29%9YX thit@N
Chuyen sang go ham
O%o0e"ato"?@?BUX 29%9YX thit@N
Tong quat kh ta bo toan t ?@, ta nh ngha cac
tham so g en ham. Kh s dung toan t ?@ trong chng
trnh, cac tham so hnh thc ch ra se c sao chep vao
tham so thc. No tng ma phat snh ra go ham (v du
O) c tro b con tro this.
V du ta bo toan 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
Ket qua xuat hen tren man hnh nh sau:
BU 2U
T R
BB BB
Chu y rang, kh ta bo toan t?@, ta co the s dung
mo keu tham so va tra ve mo keu d eu.
1.118.3. &ai boi treDn ?@
Toan t con tro hay con go a toan t truy cap
thanh ven c co nh a toan t mot ngo kh ta bo.
Gh*ng 14. )oan t* tai bo"i 2-9
Dang tong quat nh sau:
o$bect-Lele#e*tN
OU ay o$bect a o tng phat snh ra go ham
ta bo toan t. Ham o0e"ato"-L?@ pha tra ve mot con
tro o tng cua p ma ham o0e"ato"-L?@ ang hoat
ong tren o. ele#e*t a mot va thanh ven co the truy
cap c ben trong o tng.
Chng trnh sau mnh hoa ta bo toan t -L bang cach
the hen s tng ng ga ha cach s dung o$%i va o$-
Li kh ham 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
Ham o0e"ato"-L?@ pha a thanh ven cua p ma
no ang am vec.
1.118.#. &ai boi treDn toan t' ;au <ha*)
Ta co the ta bo toan t dau phay (X). Dau phay
a toan t ha ngo va gong nh tat ca cac toan t ta
bo khac, ta co the tao ra mot ta bo dau phay thc th
mo hoat ong ma ban muon. Tuy nhen neu ta muon toan
296 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
t dau phay hoat ong gong nh dang chuan th phen
ban ca at pha bo qua tat ca cac ga tr cua cac
toan hang ngoa tr ga tr ben pha nhat. Ga tr ben
pha nhat se a ga tr tra ve cua toan t dau phay.
Nay a cach thc dau phay am vec gong nh ngam
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. )oan t* tai 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
Ket qua hen th tren man hnh 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 mot p ke tha p khac, cac thanh ven cua
p c s se a thanh ven cua p dan xuat. Lp ke
tha s dung khuon dang kha bao sau:
class de"ived-class-*a#e i access $ase-class-*a#e 3
$od6 o2 class
4N
Trang tha truy cap vao thanh ven p c s ben
trong p dan xuat c xac nh b access. Nac ta acess
se a mot trong ba t khoa sau: 0u$lic, 0"ivate, 0"otected.
Neu khong ch ra access, ga tr ngam nh cua access a
0"ivate. Neu p dan xuat a mot cau truc, ngam nh
cua access a 0u$lic.
Kh ac ta truy cap cho mot p c s a 0u$lic, tat
ca cac thanh ven 0u$lic cua p c s a thanh ven
0u$lic cua p dan xuat va tat ca cac thanh ven
0"otected cua p c s a thanh ven 0"otected cua p
dan xuat. Trong tat ca cac trng hp, thanh ven 0"ivate
cua p c s van duy tr tnh chat 0"ivate va cac thanh
ven cua p dan xuat khong the truy cap c. V du sau
o tng co keu de"ived co the truy cap trc tep vao
thanh ven 0u$lic cua 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 tha bang cach s dung
0"ivate, tat cac thanh ven 0u$lic va 0"otected cua p c
s tr thanh thanh ven 0"ivate cua p dan xuat. Neu
nay co ngha a no van co the truy cap b thanh ven
cua p dan xuat nhng khong the truy cap b nhng
phan trong chng trnh khong pha a thanh ven cua cua
p c s hoac cua p dan xuat. V du chng trnh sau se
khong ben dch b v ca ha phng thc set?@ va sho!?@
tr thanh 0"ivate cua 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 khoa 0"otected trong C++ cung cap them tnh mem
deo trong c che ke tha. Kh mot thanh ven cua p
c kha bao a 0"otected, nhng thanh ven nay se
khong c truy cap b cac thanh phan khong pha a
thanh ven. Tuy nhen co s khac nhau rat c ban trong
vec ke tha.
Nh a e cap tren, thanh ven 0"ivate cua p c
s khong the truy cap b phan khac cua chng trnh ke
ca p dan xuat. Tuy nhen thanh ven 0"otected co cach
thc truy cap khac. Neu p c s c ke tha a 0u$lic,
kh o thanh ven 0"otected cua p c s tr thanh
thanh ven 0"otected cua p dan xuat va do o no co
the truy cap trong p dan xuat. Bang cach s dung
0"otected, ta co the tao ra thanh ven cua p c s a
0"ivate nhng van co the c ke tha va truy cap b
29+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
mot p dan xuat. V du:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0"otectedi
i*t iX bN0"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 5cibN 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 tren, $ase c ke tha b de"ived bang
ac ta 0u$lic va b v i va b a c kha bao 0"otected,
ham set5?@ cua p dan xuat co the truy cap chung.
Neu i va b c kha bao a 0"ivate trong p $ase, kh o
de"ived khong the truy cap en no va chng trnh khong
ben dch.
Kh mot p dan xuat c s dung nh mot p c
s cho p dan xuat khac, mo thanh ven 0"otected cua
Gh*ng 1+. Ke th*'a 297
p c s ban au ma c ke tha (chang han 0u$lic)
b p dan xuat au ten cung co the c ke tha nh
a 0"otected mot an na b p dan xuat th ha. V du
chng trnh sau a hp e va de"ived2 co the truy cap 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 ibN 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 nhen neu $ase c ke tha a 0"ivate, kh o
tat ca cac thanh ven cua $ase se tr thanh thanh ven
0"ivate trong p de"ivedB, eu nay co ngha a no khong
the truy cap b de"ived2 (tuy nhen i va b van co the truy
cap b de"ivedB). Tnh huong nay mnh hoa b chng trnh
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 ibN 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 tha mot p c s bang ac ta
0"otected. Kh o tat ca cac thanh ven 0u$lic va
0"otected cua p c s tr thanh thanh ven 0"otected
cua p dan xuat. V du:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
class $ase 3
0"otectedi
i*t iX bN0"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 ibN 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 phep mot p dan xuat ke tha nheu
p c s, v du sau de"ived ke tha 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 cau ho at ra trong phan nay: th nhat kh
nao th cau t huy t cua p c s, p dan xuat c
go. Th ha co bao nheu tham so c g en ham cau
t cua p c s.
1.122.1. Khi na$o ha$/ cau t' 1a$ hu) t' +'c
th'c thi
Ta co the cho phep p c s, p dan xuat hoac ca
ha cha cau t hoac huy t. Ta can pha bet ro th t
thc th cua nhng ham nay kh mot o tng cua p
dan xuat c tao va b huy. Xet 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
Chng trnh tren ch n gan a tao va huy bo o
tng o$ cua p dan xuat. Kh thc th, chng trnh tren se
xuat hen:
Co*st"ucti*g $ase
Co*st"ucti*g de"ived
Cest"ucti*g de"ived
Cest"ucti*g $ase
Nh ta thay, au ten cau t cua p c s se c
thc hen tep theo a cau t cua p dan xuat, sau o
huy t cua p dan xuat se thc hen va cuo cung
en huy t cua p c s. T ket qua tren ta co the
tong quat hoa nh sau: kh o tng cua p dan xuat
c tao, neu p c s co cha cau t no se c go
au ten sau o a cau t cua p dan xuat. Kh o
tng cua p dan xuat b huy bo, huy t cua no se
c go trc sau o a huy t cua p c s neu no
ton ta.
Trong trng hp a ke tha (o a mot p dan
xuat a p c s cua p khac) quy uat chung c ap
dung nh sau: cau t se c thc hen t p ban au,
huy t thc hen theo trat t ngc 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
Ket qua hen tren man hnh 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 uat tong quat nay cung ap dung trong trng
hp ke tha nheu 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
Ket qua hen tren man hnh 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 thay, cau t c go t p c s en p
dan xuat va cac p c s se theo trat t t tra qua
pha. Huy t se c go theo cheu ngc a.
1.122.2. %i tha/ ,o +en cau t' cua !< c ,
Trong trng hp cau t cua p dan xuat can mot
hay nheu tham so, ta co the truyen tham so theo cach
thong thng. Tuy nhen ta g bao nheu tham so en cau
t cua p c s, ta co the s dung dang kha bao m
rong cau t cua p dan xuat:
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 en $aseN a ten cua p c s
c ke tha b p dan xuat. 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 tren, cau t cua de"ived c kha bao co ha
tham so hnh thc 7 va 6. Tuy nhen ham cau t de"ived?@
ch s dung mot tham so 7, 6 c g cho ham cau t
$ase?@. Tong quat, cau t cua p dan xuat pha kha
bao ca tham so ma no yeu cau.
V du sau the hen ke tha nheu 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 rang tham so cua cau t p c s c g
da vao tham so cua cau t p dan xuat. Do o, tham
ch cau t p dan xuat khong s dung tham so ta van
kha bao nhng tham ma cau t p c s yeu cau. Trong
tnh huong nay, tham so g en p dan xuat se g
Gh*ng 1+. Ke th*'a 67
en p c s. V du trong chng trnh sau, cau t p
de"ived khong co tham so nhng $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
Ham cau t p dan xuat co the s dung mo tham
6- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
so ma no kha bao ngay ca kh tham so o c g en
p c s. V du oan chng trnh sau a hoan toan hp 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 76N cout KK tCo*st"ucti*g de"ivedl*tN
4
4N
Cuo cung, kh g tham so en cau t cua p c
s, tham so co the bao gom mo beu thc hp e.
1.123. C=B H=QWH IJO^ S>GH
Kh mot p c s c ke tha a 0"ivate, tat ca
cac thanh ven 0u$lic va 0"otected cua p c s tr
thanh thanh ven 0"ivate cua p dan xuat. Tuy nhen,
trong mot so tnh huong ta muon kho phuc mot hoac
nheu thanh ven a ke tha ve cach truy cap ban au.
V du ta nuon cho phep mot thanh ven 0u$lic cua p c
s a thanh ven 0u$lic cua p dan xuat trong trng
hp ke tha 0"ivate. Trong C++, co ha cach e am am
eu nay. Th nhat ta co the s dung t khoa usi*g.
Cach th ha s dung kha bao truy cap ben trong p dan
xuat. Kha bao truy cap hen ta ang c ho tr b C++
chuan nhng no khong c tan thanh. Neu nay co ngha
a no khong c s dung cho ma m. Dang tong quat:
$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 tha a 0"ivate b p
de"ived, thanh ven 0u$lic b c chuyen thanh thanh ven
0"ivate cua p de"ived, tuy nhen kh vet:
$aseiibN
nh a kha bao truy cap d teu e 0u$lic cua
de"ived, b c kho phuc a thanh 0u$lic.
Ta co the s dung kha bao truy cap e kho phuc
quyen truy cap thanh ven 0u$lic hoac 0"otected. Tuy nhen
ta khong the tang hoac gam trang tha truy cap thanh
ven. V du mot thanh ven c kha bao a 0"ivate trong
p c s ta khong the tao 0u$lic trong p dan xuat (neu
C++ cho phep eu nay no se huy bo c che bao go).
Chng trnh sau se mnh hoa kha bao truy cap. Chu y
cach kha bao truy cap e kho phuc b, seti?@, geti?@ sang
trang 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 BUNillegal $ecause i is 0"ivate i* de"ived
o$%b c 2UNlegal $ecause b is #ade 0u$lic i* de"ived
o$%5 c 9UNillegal $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 tha nheu p c s, xuat hen s nhap
nhang. 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 thch trong chng trnh, ca ha p de"ivedB
va de"ived2 ke tha p $ase, de"ived9 ke tha ha p
de"ivedB va de"ived2. Neu nay co ngha a co ha ban sao
cua $ase trong mot o tng de"ived9. Do o, trong beu
thc o$%icBU v i c tham cheu b p de"ivedB hoac
12 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
b p de"ived2. B v co ha ban sao cua $ase xuat hen
trong o$, do o co ha o$%i, va xuat hen nhap nhang. Co
ha cach e khac phuc van e tren. Nau ten ap dung
toan t phan ga pham v e chon mot ga tr i. V du sau
the hen phng phap tren:
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 nhen cach nay cha to u v am tang tnh phc
tap cua chng trnh. Cach th ha e khac phuc tnh nhap
nhang nen tren o a s dung p c s ao.
Kh ha hay nheu o tng c dan xuat t mot p
c s chung, ta co the ngan chan nheu ban sao cua p
c s bang cach kha bao p c s a ao (vi"tual) kh ke
tha. Ta ch can them t khoa vi"tual trc kha bao ten
p kh ke tha. V du sau a phen ban khac cua chng
trnh tren, trong o de"ived9 ch cha mot phen ban cua
$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 chng trnh tren, ca ha p de"ivedB va de"ived2
eu ke tha $ase bang p ao, do o o tng de"ived9
ch co mot ban sao cua $ase va o$%icBU a hoan toan
hp e.
Chu y: ngay ca kh de"ivedB va de"ived2 ac ta $ase
nh a p ao, $ase van xuat hen trong cac keu o
tng o. V du oan chng trnh sau a hoan toan hp e.
de2i*e a class o2 t60e de"ivedB
de"ivedB #6classN
#6class%i c RRN
Ch co s khac nhau ga ke tha theo cach thong
thng va s dung p ao o a neu ke tha theo cach
thong thng th ban sao cua p c s co the xuat hen
Gh*ng 1+. Ke th*'a 14
nheu hn mot an, neu s dung ke tha p ao th ch
xuat hen duy nhat mot bang sao cua p c s.
Gh*ng 17. Ka'1 ao 3a' .a hLnh 17
C=DL@A 1+. H>UX >TB P>U Y> =K@=
C che a hnh c ho tr b C++ ta th em ben
dch (co1=iler ti1e) va th em thc th (run ti1e). Na hnh
ta th em ben dch chnh a ta bo ham va toan t.
Na hnh ta th em thc th a s dung ke tha va ham
ao.
1.12,. H>UX >TB
Ham ao a ham thanh ven cua p c kha bao
ben trong p c s va c nh ngha a b p dan
xuat. Ne tao mot ham ao, ta ch trc kha bao ham
trong p c s t khoa vi"tual. Ham ao ca at theo
cach "1o"t giao <ie"n@ .a =h*ng th*c". Ham ao ben trong
p c s nh ngha khuon dang gao den cua ham. Cac
thao tac cu the cua ham ao se c nh ngha chnh xac
ta p dan xuat.
Kh truy cap ham ao gong nh ham thanh ven cua
p thong thng. Nh a e cap trong chng 13, con tro
p c s co the s dung e tro en o tng cua p
dan xuat. Kh con tro c s tro en o tng dan xuat
co cha ham ao, C++ se xac nh phen ban nao cua
ham c go da vao o tng c tro b con tro o.
Va thao tac xac nh nay c thc hen ta th em
thc th. Xet 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
Ket qua hen th tren man hnh nh sau:
This is $asews v2u*c?@%
This is de"ivedBws v2u*c?@%
This is de"ived2ws v2u*c?@%
Ben trong p $ase ham ao v2u*c?@ c kha bao. Chu
y t khoa vi"tual at trc kha bao ham. Kh ham
v2u*c?@ c nh ngha a trong p de"ivedB va de"ived2,
t khoa vi"tual khong can thet.
Gh*ng 17. Ka'1 ao 3a' .a hLnh 19
Ta co the go ham ao bang ten o tng va toan
t cham. Tuy nhen theo cach go nay ta khong nhan c
nhng em thuan ten cua ham ao.
M nhn qua ta thay rang nh ngha a ham ao gong
v ta bo, tuy nhen ay khong pha a trng hp ta
bo b v co mot va em khac bet. S khac bet nay
chnh a keu tra ve, so ng, keu tham so. Trong ta bo
ham, ch cho phep ham trung ten nhng pha khac nhau
ve tham so. Trong ham ao, tat ca cac kha bao eu pha
gong nhau (tc a cac ham ao trong mo p eu pha
gong nhau ve so ng va keu tham so).
Nhng han che kh s dung ham ao a: ham ao
khong c phep a thanh ven tnh cua mot p; no
khong c am ham than then; cau t khong c ca
at a ham ao tuy nhen huy t th c phep.
1.122.1. %oi ha$/ ao thoDng 0ua tha/ chieu !< c
,
Ta co the go ham ao thong qua tham cheu p c
s. Tham cheu nh a con tro an. That vay, tham cheu
p c s co the c s dung tham cheu o tng p
c s va cac o tng cua p dan xuat. Kh ham ao
c go qua tham cheu, phen ban cua ham c xac
nh b o tng c tham cheu ta th em go ham.
Tnh huong nay thng gap kh tham cheu mot p c
s a tham so cua ham khac. 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
Ket qua hen th tren man hnh gong nh v du trc.
Trong v du nay, ham 2?@ nh ngha mot tham cheu cua
p $ase. Trong ham #ai*?@ ham 2?@ c go s dung cac
o tng $ase, de"ivedB, de"ived2. Ben trong ham 2?@, phen
ban cua ham v2u*c?@ c go c xac nh da vao o
Gh*ng 17. Ka'1 ao 3a' .a hLnh 21
tng ma c tham cheu.
1.12-. 0QR I=DU> XBGI I=OBGS Ih@= >TB
Kh mot ham ao c ke tha, cac tnh chat ao cua
ham o cung c ke tha trong p dan xuat. 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
Ket qua hen th tren man hnh 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 ham kha bao a ao trong p c s, no co the b
nh ngha a trong p dan xuat. Tuy nhen neu trong p
dan xuat khong nh ngha a ham ao nay, th ham ao
trong p c s se c s dung. 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 ao 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
Ket qua hen th tren man hnh nh sau:
This is $asews v2u*c?@%
This is de"ivedBws v2u*c?@%
This is $asews v2u*c?@%
V p de"ived2 khong nh ngha ham v2u*c?@ do o kh
con tro en d2 go ham v2u*c?@ th phen ban v2u*c?@ cua
p $ase se c s dung.
Ouy uat chung e go mot ham ao nh sau: neu ta
p dan xuat nay khong nh ngha ham ao, trnh ben
dch se kem trong p ma no m ke tha co nh ngha
ka ham ao hay khong? Neu co se thc th ham ao nay,
neu khong tep tuc tm p c ke tha trc 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
Ket qua hen th tren man hnh 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 ao 3a' .a hLnh 24
Ham ao thuan tuy a ham ao khong co nh ngha
ben trong p c s. Cu phap e kha bao ham ao thuan
tuy nh sau:
vi"tual t60e 2u*c-*a#e?0a"a#ete"-list) c UN
Kh mot ham ao a thuan tuy, mo p dan xuat
pha nh ngha a ham nay, neu p dan xuat khong
nh ngha ham ao nay, trnh ben dch se bao 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
Lp *u# cha mot so nguyen val, mot ham setval?@
va mot ham ao sho!?@, cac p dan xuat he7t60e,
dect60e, octt60e ke tha p *u# va nh ngha a ham
sho!?@ e n ga tr val v c so tng ng. Ro rang trong
v du tren khong co do g e nh ngha ham sho!?@ trong
p *u#.
1.128.1. < tr'$u t'ng
Mot p co cha t nhat mot ham ao thuan tuy go
a p tru tng. B v mot p tru tng co cha mot
hay nheu ham ma khong co nh ngha ben trong, nen
khong co o tng nao cua p nay c tao ra. Thay
vao o p tru tng se tao ra mot keu khong ay u
e cho p dan xuat.
Mac dau ta khong the tao ra mot o tng cua p
tru tng, nhng ta co the tao ra con tro hoac tham cheu
cua p tru tng. Neu nay cho phep p tru tng ho
tr c che a hnh th em thc th.
1.12#. !DT ]Od@A =>UX >TB
Mot trong nhng van e trong tam cua ap trnh
Gh*ng 17. Ka'1 ao 3a' .a hLnh 27
hng o tng o a nguyen "1o"t giao <ie"n@ .a =h*ng
th*c". Neu nay co ngha a mot p cac hanh ong
chung c nh ngha, va mo nh ngha trong p dan
xuat se ch ra hanh ong ro rang. Mot trong nhng cach
heu qua va mem deo e ca at phng phap "1o"t giao
<ie"n@ .a =h*ng th*c" o a s dung ham ao, p tru
tng a hnh ta th em thc th. S dung nhng ac tnh
nay, ta tao ra p phan cap d chuyen t tong quat en
cu the (c s en dan xuat). Theo nguyen nay, ta nh
ngha tat ca cac ac tnh chung va gao den 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
Chng trnh tren tao ra ha p dan xuat t p
co*ve"t go a: l_to_g va 2_to_c. Cac p nay thc hen
chuyen o n v t sang gallon va o W sang o G tng
ng. Mo p se nap chong phng thc co#0ute?@ chuyen
o n v mong muon. Tuy co s khac nhau ve cach
chuyen o n v nhng ta van tao ra mot gao den chung.
Mot trong nhng ch cua p dan xuat va ham ao o
a ta co the bo sung them trng hp m mot cach de
dang. V du trong chng trnh tren, e bo sung chuyen o
t ;eet sang met, ta bo sung cac enh:
Feet to #ete"s
class 2_to_# i 0u$lic co*ve"t 3
Gh*ng 17. Ka'1 ao 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
Mot trong nhng cach s dung quan trong cua p
tru tng va ham ao a trong th ven p. Ta tao ra mot
th ven cac p chung va co the m rong. Mo chng
trnh se ke tha p chung nay va bo sung them nhng
tnh chat reng trong tnh huong cu the.
1.13/. LZQC@ _QRI \LWX P>U IJQf
Trong ap trnh hng o tng co ha kha nem:
Len ket sm (earl? bin<ing): a s ken phat snh ta
th em ben dch. Len ket sm xuat hen kh tat ca
cac thong tn can e go ham c bet ta th em
ben dch. No cach khac, en ket sm ngha a mot o
tng va mot go ham b g han ta th em ben
dch). V du go ham thong thng (bao gom cac go
ham trong th ven chuan), go ham ta bo va toan t
ta bo. Nem thuan chnh cua en ket sm a heu
qua b v cac thong tn can thet e go ham c xac
nh ta th em ben dch. Keu go ham nay thc hen
rat nhanh.
Ngc a v en ket sm a en ket tre (late
bin<ing). No a go ham van cha c phan ga ro
rang ta th em ben dch. Ham ao a cach e thc
hen en ket tre. Nh ta a bet, kh truy cap vao p
thong qua con tro hoac tham cheu, go ham ao thc s
c xac nh b keu cua o tng ma no tro en.
6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
B v trong rat nheu trng hp ta khong bet pha go
ham nao trong th em ben dch. Nem thuan chnh
cua en ket tre chnh a s mem deo. Khong gong nh
en ket sm, en ket tre cho phep ta tao ra chng trnh
co the ap ng v s ken trong kh chng trnh thc th
ma khong can pha tao ra cac "ma e phong".
Gh*ng 1-. $= 1a\u #)e1=late% 1
C=DL@A 14. LLWH X>fO (TQXHF>IQ"
Lp mau a mot trong nhng ac trng manh nhat
trong ngon ng C++. Mac dau no khong pha a mot
phan cua C++ chuan nhng no a c bo sung vao trong
nhng nam gan ay va c ho tr b tat ca cac trnh
ben dch C++. S dung p mau, ta co the tao ra ham hay
p chung. Trong ham hay p chung nay, keu d eu se
c ch ra nh mot tham so. That vay ta co the s dung
mot ham hoac p chung nay v nheu keu d eu
khac nhau.
1.131. H>UX S=O@A
Ham chung nh ngha cac hoat ong chung ap dung
cho nheu keu d eu khac nhau. Keu d eu ma ham
tac ong c g nh a mot tham so en ham. Nh ta
a bet, rat nheu thuat toan ap dung tren nheu keu
d eu khac nhau. V du nh thuat toan 2uick,ort ap dung
tren ca so nguyen an so thc. Bang cach tao ham
chung, ta co the nh ngha hoat ong cua ham o oc
ap v d eu. Trnh ben dch se t ong snh ra ma hp
e cho keu d eu tng ng kh ham thc th. Ve c ban,
kh ta tao ra mot ham chung a ta tao ra mot ham t ta bo
tren no. Dang kha bao cua mot ham mau nh sau:
te#0late Kclass Tt60e> "et-t60e 2u*c-*a#e(0a"a#ete" list)
3
$od6 o2 2u*ctio*
4
Tt60e a ten a den cho mot keu d eu c s
dung b ham. Ten nay co the c s dung ben trong
nh ngha ham. Tuy nhen no ch a ten a den va trnh
2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
ben dch se t ong thay the v mot keu d eu thc
s kh tao ra phen ban ro rang cua ham. Mac dau ta co
the s dung t khoa class e trong kha bao te#0late, tuy
nhen ta co the s dung t khoa t60e*a#e. Chng trnh sau
tao mot ham chung trao o ga tr cua ha ben. 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
Cau enh:
te#0late Kclass L void s!a0a"gs? faX f$@
bao cho trnh ben dch bet ha van e: mot p mau
Gh*ng 1-. $= 1a\u #)e1=late%
c tao ra va bat au nh ngha nhng ac em chung.
a mot keu chung va a ten a den. Sau v tr te#0late,
kha bao ham s!a0a"gs?@ s dung keu d eu . Trong
ham #ai*?@, ham s!a0a"gs?@ c go s dung ba keu d
eu khac nhau: i*t, dou$le, cha". B v ham s!a0a"gs?@ a
ham chung, trnh ben dch se t ong tao ra ba phen ban
cua ham s!a0a"gs?@, mot cho so nguyen, mot cho so thc
va mot cho k t.
1.131.1. Yot ha$/ 1i hai kie*u chung
Ta co the nh ngha nheu hn mot keu d eu
chung trong cau enh te#0late bang cach s dung dau
phay. V du chng trnh sau tao ra mot ham mau co ha
keu 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 tren, keu a den t60eB va t60e2 c thay
the b trnh ben dch v ha keu d eu i*t va cha" ,
dou$le va lo*g tng ng, kh trnh ben dch tao ra phen
ban ro rang cua #62u*c?@ ben trong ham #ai*?@.
1.131.2. &ai boi treDn ha$/ chung
& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Ham chung cung co the c ta bo neu can. Neu
ta ta bo ham chung, ham nay se c thc hen trong tnh
huong phu hp. 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@Ncalls 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
Ket qua xuat hen tren man hnh 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 thch trong chng trnh, kh ham
s!a0a"gs?iXb@ c go no se go phen ban ta bo ro
rang cua s!a0a"gs?@.
Gan ay cu phap theo phong cach m c a vao
e nh ngha ac ta ro rang. V du cu phap theo phong
cach 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. &ai boi treDn ha$/ /aPu
Ta cung co the ta bo ham mau bang cach tao ra
mot phen ban khac cua ham mau ch khac 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 tren, ham mau cho 2?@ c ta bo e hoat
ong tren mot hoac ha tham so.
1.131.#. Q' ;ung tha/ ,o chua*n 1i ha$/ /aPu
Ta co the tron tham so chuan v tham so keu chung
trong ham mau. Tham so khong pha chung nay am vec
gong nh mo ham khac. 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 TABICTH 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 iKTABICTHN 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?wwX 2@N
ta$Out?BU9X 9@N
"etu"* UN
4
Ket qua hen th tren man hnh nh sau:
This is a test
BUU

9
1.131.2. Han che cua ha$/ chung
Ham chung tng t nh ham ta bo nhng no co
nheu han che hn. Kh ham c ta bo, ta co the thc th
nhng hanh ong khac nhau trong than ham. Nhng ham
chung pha thc hen cung mot hanh ong cho tat ca cac
phen ban, ch khac nhau keu d eu. Xet ham ta bo
trong ham sau. Nhng ham nay khong c thay the b
ham chung b v no khong thc hen mot hanh ong.
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
Ham chung a ac tnh rat hu ch trong C++. Ta co
the ap dung cho tat ca cac tnh huong. Bat c uc nao ta
co mot ham nh thuat toan tong quat, ta co the tao ra
mot ham mau e no co the s dung nheu keu d eu
khac nhau.
1.132.1. QaT< Me< chung
Sau ay a thuat toan sap xep no bot, no am vec
tren mo keu d eu khac nhau. Ham go v tham so a
con tro tro en phan t au ten cua mang va so phan
t c sap xep.
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
Ket qua xuat hen tren man hnh 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. ^ut gon /ot /ang
Mot ham khac co the mnh hoa cho ham mau go a
&6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
ham co#0act?@. Ham nay rut gon cac phan t trong mang
bang cach xoa cac phan t ga mang va d chuyen cac
phan t con a vao v tr a xoa. Ham hoat ong tren
tat ca cac keu d eu khac nhau. Ham nhan tham so a
con tro en phan t au ten cua mang, so phan t
trong mang, ch so bat au va ket thuc cua cac phan
t can xoa.
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 te*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
Ket qua xuat hen tren man hnh 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 ngha p chung. Kh nh ngha p
chung, ta ch nh ngha thuat toan c s dung b p
o. Tuy nhen, keu d eu thc s ma no thao tac se
c ch ro nh a mot tham so kh o tng cua p
c tao.
Lp chung rat hu ch kh ta can tong quat hoa mot
va van e. V du, cung mot thuat toan tren hang , ta
co the s dung so nguyen, so thc, .
Dang kha bao tong quat cua mot p chung nh sau:
te#0late Kclass Tt60eL class class-*a#e 3
%
%%
4
Tt60e a ten keu a den va no c ch ro kh
&2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
xuat hen mot o tng. Neu can thet, ta co the kha
bao nheu hn keu d eu chung bang cach s dung dau
phay. Kh a co mot p chung, ta co the tao ra mot o
tng bang cau enh sau:
class-*a#e Kt60eL o$N
t60e a ten keu d eu ma p o se tac ong
en o. Ham thanh ven cua p chung t ong chuyen
thanh ham chung, ta khong can pha dung te#0late e ch
ro. Trong v du sau, p stac5 am vec nh a p chung, no
co the u tr mo keu d eu.
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 stc5gSIhN 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 thay kha bao p chung tng t nh kha bao ham
&& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
chung. Kha bao mot o tng cua p nay, trnh ben dch
se t ong snh ra tat ca cac ham va ben can thet.
Trong v du tren, kha bao ha keu stac5 khac nhau, mo
keu stac5 co ha o tng. Chu y cau enh kha bao:
stac5Kcha"L sBX s2N c"eate t!o cha"acte" stac5s
stac5Kdou$leL dsBX ds2N c"eate t!o dou$le stac5s
Keu d eu mong muon ta at vao cap dau ngoac
nhon (KL). Ta co the tao ra stac5 u tr keu d eu do ta
nh ngha. V du ta muon s dung cau truc sau e u vao
stac5:
st"uct add" 3
cha" *a#egYUhN
cha" st"eetgYUhN
cha" cit6g9UhN
cha" stateg9hN
cha" 8i0gB2hN
4N
Kh o ta co the tao ra mot stac5 dung e u keu
add":
stac5Kadd"L o$bN
1.133.1. Yot 1 ;u 1i hai kie*u ;'O !ieu chung
Mot p mau co the co nheu hn mot keu d eu
chung. V du sau tao ra mot p co ha keu d eu 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?wwXtTe#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
Ket qua hen th tren man hnh nh sau:
BU U%29
Te#0lates add 0o!e"%
1.133.2. _Fng ;ung cua !< /aPu` !< /ang chung
Nh a bet trong chng 15, ta co the ta bo toan t
gh. Muc ch cua ta bo toan t nay e ta co the kem
tra ben mang.
Bang cach ket hp toan t ta bo v p mau, ta
co the tao ra mot p mang an toan va co keu d eu
bat 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 agSIhN
0u$lici
at60e?@ 3
"egiste" i*t iN
2o"?icUN iKSIN 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 iKSIN i@ i*to$gih c iN
2o"?icUN iKSIN i@ cout KK i*to$gih KK t tN
cout KK wl*wN
cout KK tCou$le a""a6i tN
2o"?icUN iKSIN i@ dou$leo$gih c ?dou$le@ i9N
2o"?icUN iKSIN 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' ;ung tha/ ,o khoDng +nh kie*u 1i
!< chung
Trong ac ta te#0late cua p chung, ta co the ch ra
tham so khong keu (nonAt?=e). Tnh huong nay thc chat
gong nh tham so ham thong thng bao gom ten va
keu. V du sau a cach tot hn e tao ra mot p mang an
toan:
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@ i9N
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 bao keu i*t, tham so nay c s dung
e mo ta kch thc cua mang. Mac dau si8e c mo
ta nh a ben, nhng ga tr cua no pha c bet ta
th em ben dch. Neu nay cho phep no c s dung
e thet ap kch thc cua mang. Tham so khong keu
ch thao tac tren so nguyen, con tro va tham cheu, mo
keu khac v du nh 2loat th khong c phep. Nhng tham
so g en tham so hnh thc khong keu pha a hang
so nguyen, con tro hoac tham cheu en cac ham hoac
o tng toan cuc. V du ben trong ham o0e"ato"gh?@ th
cau enh sau khong thc hen:
si8e c BUN ""o"
1.133.#. Q' ;ung tha/ ,o ngaN/ +nh 1i !<
/aPu
Mot p mau cung co the co tham so ngam nh
ket hp v keu chung. V du:
te#0late Kclass ci*tL class #6class 3 %%%
OU ay, keu i*t se c s dung neu nh khong co
keu nao ch ra uc kha bao o tng. Tham so khong
keu cung co the co ga tr ngam nh. Ne ch ga tr
ngam nh cho tham so khong keu, ta kha bao gong nh
tham so thong thng. V du sau a mot phen ban khac
cua mang an toan s dung tham so ngam nh ca keu
d eu va kch thc mang:
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""a6Ndou$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@ i9N
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
Cau enh:
te#0late Kclass AT60eci*tX i*t si8ecBUL class at60e 3
V At60e ngam nh a keu i*t va si8e ngam nh
a BU. Vay o tng at60e co the tao ra mot trong 3 cach:
Ch ro rang keu d eu va kch thc.
Ch ro keu d eu va cho kch thc bang 10.
Ch ngam nh cho keu a i*t va kch thc bang 10.
1.133.2. < +aGc biet roO ra$ng
Ta co the ch ra mot p ro rang cua 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
Ket qua xuat hen nh sau:
I*side ge*e"ic #6class
dou$lei BU%B
I*side #6classKi*tL s0eciali8atio*
i*ti 2V
Chu y cau enh :
te#0late KL class #6classKi*tL 3
Bao cho trnh ben dch bet mot ac ta ro rang so
nguyen cua p chung #6class%
1.13%. TDU _=BW> I^HQ@>XQ P>U Q[HBJI
T khoa t60e*a#e va e70o"t c bo sung vao C++
trong nhng nam gan ay, ca ha co va tro ac bet trong
ap trnh C++.
T khoa t60e*a#e co ha cach s dung: au ten o
a dung e thay the t khoa class trong kha bao 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 ay t60e*a#e ch ra keu chung . Khong co s
khac nhau ga cach s dung class va t60e*a#e trong ng
canh nay.
Cach s dung th ha bao cho trnh ben dch bet
rang ten c s dung trong kha bao mau a ten keu.
T khoa e70o"t ng trc mot kha bao te#0late, no
cho phep nhng ;ile khac s dung mau a kha bao ;ile
nay bang cach ch can ch ra kha bao cua no ma
khong can nh ngha a.
1.13,. !DWS X>d@= SOT> FLWH X>fO
Lp mau gup ta at c muc ch kho khan nhat
trong ap trnh o a: tao ra mot ma co the s dung a.
Thong qua cach s dung cua p mau, ta co the tao ra
mot ;ra1eRork co the ng dung tren nheu tnh huong ap
trnh khac nhau. V du nh p stac5 co the u tr nheu
keu d eu khac nhau.
Gh*ng 26. Ke" thong 3a'o0ra trong GOO
4
C=DL@A 1#. QO>T@ F^W @AB>dZ FQG
Ouan y ngoa e cho phep ta quan o ta th em
thc th. S dung quan ngoa e, chng trnh cua ta co
the t ong go chng trnh quan o kh mot o xuat
hen. Nem thuan ten chnh cua quan ngoa e a t
ong a ra ma quan o c vet bang tay trc o.
1.13-. CL V>T@ PQ? NO>T@ F^W @AB>dZ FQG
Ouan ngoa e trong C++ c xay dng tren ba t
khoa t"6, catch va th"o!. Tong quat, cau enh trong chng
trnh ma ta muon theo do ngoa e c cha trong kho
t"6. Neu mot ngoa e (mot o) xuat hen trong kho t"6,
no se c nem (s dung th"o!). Ngoa e nay se c
bat va x .
Ma muon theo do cho ngoa e pha c thc hen
t ben trong kho t"6. Cac ham thc hen ben trong kho
t"6 cung co the nem ngoa e. Ngoa e c nem b
ma theo do c bat b cau enh catch theo sau ngay ap
tc enh t"6. Dang tong quat cua enh 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 nem, no c bat b mot cau
enh catch (x ngoa e). Co the co nheu hn mot enh
catch ket hp v enh t"6. Mo enh catch c s dung
e xac nh keu ngoa e. No a keu d eu c ch ra
b enh catch ma khp v ngoa e nao, cau enh catch
tng ng c thc th (tat ca cac enh catch khac se b
bo qua). Kh mot ngoa e c bat, a"g se nhan ga tr
cua no. Tat cac keu d eu eu co the bat c ke
ca p ma ta tao ra. Neu khong co ngoa e nao c
nem (tc a khong co o nao xuat hen ben trong enh
t"6), khong co enh catch nao c thc th. Dang chung
cua cau enh th"o! nh sau:
th"o! e7ce0tio*N
th"o! se snh ra mot ngoa e c ch ro b
e7ce0tio*. Neu ngoa e nay c bat, kh o th"o! pha
c thc th hoac t ben trong kho t"6 hoac t ham ma
c go ben trong kho t"6 (trc tep hoac gan tep).
Neu ta nem mot ngoa e ma khong thch hp v
enh catch nao, co the chng trnh se ket thuc mot cach
khong bnh thng. Nem mot ngoa e khong quan c,
chng trnh se go ham te"#i*ate?@. Ngam nh, te"#i*ate?@
se go a$o"t?@ e ngng chng trnh. Nhng ta co the ch
ra cach ket thuc chng trnh reng cua mnh.
Sau ay a mot v du n gan cho thay cach thc
Gh*ng 26. Ke" thong 3a'o0ra trong GOO
44
quan ngoa e cua 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
Ket qua hen th tren man hnh nh sau:
Sta"t
I*side t"6 $loc5
Caught a* e7ce0tio* -- value isi BUU
*d
Ta thay co mot kho t"6 cha ba cau enh va mot
cau enh catch?i*t i@ x ngoa e keu nguyen. Ben
trong kho t"6, ch co ha cau enh au ten c thc
hen. Mot ngoa e se c nem, eu khen g en beu
thc catch va kho t"6 ket thuc. Thong thng ma ben
trong cau enh catch se co gang gam tac ong cua o
bang cach a ra mot hanh ong tng ng. Neu o co
the sa c, chng trnh se tep tuc thc th v cac cau
enh sau catch. Tuy nhen, mot o ma khong khac phuc
c, kho catch se ket thuc chng trnh v go ham
4+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
a"$o"t?@ hoac e7it?@.
Nh a e cap, keu ngoa e pha khp v keu ch
ra trong cau enh catch. V du, chng trnh trc, neu ta thay
o keu trong cau enh catch a dou$le, ngoa e se khong
c bat va chng trnh ket thuc khong bnh thng. 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
Ket qua xuat hen tren man hnh nh sau:
Sta"t
I*side t"6 $loc5
A$*o"#al 0"og"a# te"#i*atio*
Mot ngoa e co the c nem t ben ngoa kho
t"6 men sao no c nem b mot ham ma c go ben
trong kho t"6. V du chng trnh sau a hp 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" thong 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
Ket qua hen th tren man hnh 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 at trong mot ham. Trong trng
hp nay, mo an vao ham, quan ngoa e en quan en
ham o se c thet ap a (re,et). V du:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
Locali8e a t"6catch 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
Ket qua xuat hen tren man hnh nh sau:
Sta"t
Caught 7ce0tio* Ji B
Caught 7ce0tio* Ji 2
Caught 7ce0tio* Ji 9
*d
Nh ta thay, co ba ngoa e c nem, sau mo ngoa
e ham ket thuc. Kh ham c go a an na, quan
ngoa e se c re,et.
Nh rang, ma ket hp v catch se c thc th ch
kh no bat c mot ngoa e, trong cac trng hp con a
no bo qua. V du sau khong co ngoa e nao c nem v
vay khong co cau enh catch nao thc th.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
Gh*ng 26. Ke" thong 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
Ket qua hen th tren man hnh nh sau:
Sta"t
I*side t"6 $loc5
Still i*side t"6 $loc5
*d
1.133.1. RaT/ baTt /ot kie*u !<
Mot ngoa e co keu bat ke ca keu p ma ta tao
ra. Thc te th rat nheu ngoa e co keu p do ng
dung tao ra hn a keu d eu xay dng san. Tuy nhen
do chung nhat ma ta muon nh ngha mot keu p cho
ngoa e dung e mo ta o xuat hen. Thong tn nay
c s dung e b mot trnh quan ngoa e gup 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 M67ce0tio* 3
0u$lici
cha" st"_!hatgRUhN
i*t !hatN
M67ce0tio*?@ 3 st"_!hat c UN !hat c UN 4
+6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
M67ce0tio*?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! M67ce0tio*?tNot PositivetX i@N
4
catch ?M67ce0tio* 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
Ket qua xuat hen tren man hnh nh sau:
*te" a 0ositive *u#$e"i -Y
Not Positivei -Y
Chng trnh tren nhac ng dung nhap mot so
nguyen dng. Neu nhap mot so am, mot o tng
M67ce0tio* se c tao ra e mo ta o. That vay,
M67ce0tio* ong go thong bao o, thong tn nay sau o
c s dung b trnh quan ngoa e.
1.133.2. Q' ;ung nhieNu !enh catch
Ta co the co nheu enh catch ket hp v mot enh
t"6. Thc te ay a mot tnh huong thng hay s dung.
Tuy nhen mo enh catch pha bat keu ngoa e khac
nhau. V du sau se bat ca so nguyen va chuo.
Gh*ng 26. Ke" thong 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
Ket qua xuat hen tren man hnh 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
Tong quat, enh catch se c kem tra theo th t
xuat hen trong chng trnh. Ch mot cau enh nao khp
m c thc hen. Tat ca cac kho catch khac 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
Hay can than trat t cua cac enh catch kh bat mot
ngoa e bao gom ca p dan xuat va p c s b v
enh catch cho p c s se khp v mo p dan xuat.
That vay, neu muon bat ngoa e cua p dan xuat va
p c s, ta at p dan xuat au ten trong trnh t. Neu
khong am eu nay, p c s se bat tat ca p dan
xuat. 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 tren, de"ived a mot o tng co p B a p
c s no se c bat b catch au ten va catch th ha
se khong bao g thc hen.
Gh*ng 26. Ke" thong 3a'o0ra trong GOO
+
1.134. TOU^ VZQR@ NO>T@ F^W @AB>dZ FQG
1.138.1. BaTt tat ca cac ngoai !e
Trong mot so tnh huong, ta muon chng trnh bat tat
ca cac ngoa e thay v bat tng ngoa e reng bet. Ne
thc hen eu nay ta s dung dang sau:
catch?%%%@ 3
0"ocess all e7ce0tio*s
4
Dau ba cham se khp mo keu o tng. 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
Ket qua xuat hen tren man hnh nh sau:
Sta"t
+& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Caught O*e^
Caught O*e^
Caught O*e^
*d
V du tren, co ba enh th"o! nhng ch co mot enh
catch.
Mot cach s dung tot nhat cua enh catch?`@ a bat
tat ca cac trng hp con a sau kh a ch ra cac trng
hp reng bet. 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
Ket qua xuat hen tren man hnh nh sau:
Gh*ng 26. Ke" thong 3a'o0ra trong GOO
+4
Sta"t
Caught a* i*tege"
Caught O*e^
Caught O*e^
*d
1.138.2. Han che cua ngoai !e
Ta co the han che keu ngoa e ma ham co the
nem ra ngoa. Trong thc te, ta co the chan mot ham
nem mot ngoa e bat k. Ne thc hen eu nay ta them
cau enh th"o! vao nh ngha ham. Dang tong quat nh
sau:
"et-t60e 2u*c-*a#e(a"g-list) th"o!?t60e-list@
3
%%%
4
t60e-list a keu d eu co the c nem b ham.
Neu chng trnh nem keu d eu khac, chng trnh se
ket thuc. Neu ta khong muon ham nem bat k keu d
eu nao, t60e-list se e trong. 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 chng trnh tren, ham ha*dle"?@ ch co the
nem keu k t, so nguyen, dou$le. Neu ta nem mot keu
ngoa e khac, chng trnh se ket thuc (bang cach go
ham u*e70ected?@). Ne thay ro v du nay, ga s ta bo i*t
trong danh sach va ben dch a chng trnh.
Lu y, mot ham co the han che keu d eu c
nem ngc tr a kho t"6. Kho t"6 ben trong mot ham
co the nem mo keu bat k men a no c bat trong
ham. Han che nay ch co tac dung kh no nem ngoa e
ben ngoa ham. 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" thong 3a'o0ra trong GOO
+7
1.138.3. Re/ !ai /ot ngoai !e
Neu ta muon nem a mot ngoa e trong chng trnh
quan ngoa e, ta co the a eu nay bang cach go
ham th"o! ma khong co ngoa e nao theo sau. Mot ngoa
e ch co the c nem a trong kho catch (hoac t cac
ham c go ben 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
Ket qua hen tren man hnh 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 cap, te"#i*ate?@ va u*e70ected?@ c go
kh xuat hen mot o trong qua trnh x ngoa e. Nhng
ham nay co san trong th ven chuan va at trong th
ven Ke7ce0tio*L.
void te"#i*ate?@N
void u*e70ected?@N
Ham te"#i*ate?@ c go bat c kh nao trnh quan
ngoa e khong tm thay mot cau enh catch khp v mot
ngoa e. No cung c go neu chng trnh cua ta nem a
mot ngoa e kh khong co mot ngoa e nao c nem
trc o.
Ham u*e70ected?@ c go kh ham nem mot ngoa e
ma khong co trong danh sach c nem.
1.139.1. &hiet !a< 0uan !) ter/inate 1a$
uneM<ecte;
Ham te"#i*ate?@ va ham u*e70ected?@ n gan go
mot ham khac e ket thuc chng trnh. Ngam nh th
ham te"#i*ate?@ go ham a$o"t?@ va u*e70ected?@ se go
ham te"#i*ate?@. Ngam nh ha ham nay ket thuc chng
trnh neu gap o. Tuy nhen ta co the thay o ham c
go b te"#i*ate?@ va u*e70ected?@. Ne am vec nay ta
s dung ham 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 en quan te"#i*ate?@ m.
Ham tra ve con tro en quan te"#i*ate?@ trc o.
Gh*ng 26. Ke" thong 3a'o0ra trong GOO
+9
*e!ha*dle" pha co keu te"#i*ate_ha*dle" va c nh
ngha nh sau:
t60ede2 void ?te"#i*ate_ha*dle"@?@N
Tng t v ham u*e70ected?@%
u*e70ected_ha*dle" set_u*e70ected?u*e70ected_ha*dle"
*e!ha*dle"@ th"o!?@N
Ca ha ham set_u*e70ected?@ va set_te"#i*ate?@ at
trong teu 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
Ket qua hen tren man hnh 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
Ham tra ve t"ue neu mot ngoa e c nem nhng
van cha bat. Neu ngoa e a c bat ham tra ve
2alse.
1.1%1. @A ]Od@A SOT> NO>T@ F^W @AB>dZ FQG
Ouan ngoa e c thet ke e cung cap mot
phng ten ma chng trnh co the s dung e quan cac
s ken bat thng. Neu nay co ngha a quan o pha
am vec g o kh mot o xuat hen. Xet v du sau, nhap
vao ha so va cha so au cho so th ha. No s dung
quan ngoa e neu xuat hen o cha 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" thong 3a'o0ra trong GOO
71
catch ?dou$le $@ 3
cout KK tCa*wt divide $6 8e"o%l*tN
4
4
Chng trnh tren se khong the tep tuc neu ng
dung nhap vao mot so th ha bang khong. Chng trnh
se nhac a ng dung nhap vao ha so va ta co the
tep tuc chng trnh.
Gh*ng 26. Ke" thong 3a'o0ra trong GOO
7
C=DL@A 2/. HQG I=BR@A P>UB5J> IJB@A
C99
C++ ho tr ha he thong vao ra: mot ke tha t C
va mot he thong vao ra hng o tng c nh ngha
b C++ (c go n gan a he thong vao ra C++). He
thong vao ra da vao C a c g theu trong phan
mot. Trong phan nay ch g theu he thong vao ra C++.
1.1%2. !B \>W@= H=ZQC@ V>T@ SOE P>U =ZQG@ Y>dZ
Hen nay co ha phen ban cua th ven vao/ra hng
o tng: mot phen ban cu hn da vao at ta goc
cua C++ va phen ban m hn da vao C++ chuan. Th
ven cu c ho tr b ;ile teu e Kiost"ea#%hL. th ven
m c ho tr b Kiost"ea#L. Ha th ven nay xuat hen
gong nhau b th ven m cap nhat va ca ten th ven
cu.
Co ha s khac nhau c ban ga th ven m va cu.
Th nhat th ven m bo sung mot va mot va ac trng
va nh ngha mot va keu d eu m. Th ha, th ven
cu co ten a toan cuc th ven m co ten trong khong
gan std.
1.1%3. C>WS FOB?@A IJB@A C99
Gong nh he thong vao ra trong C chuan, he thong
vao ra trong C++ chuan hoat ong thong qua uong. Nh ta
a bet, uong nh a thet b logic hoac teu thu hoac tao
ra thong tn. Mot uong en ket v mot thet b vat b
he thong vao ra. Tat ca cac uong eu co cach hoat
7& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
ong gong nhau mac dau co the c ket no v thc
the khac. Neu nay co the ga thch v sao cung mot ham
vao ra nhng co the gh d eu tren ;ile, tren may n, tren
man hnh.
1.1%%. LLWH S>WS FOB?@A
C++ ho tr vao/ra trong th ven Kiost"ea#L, trong ;ile
teu nay tap cac p co phan cap ho tr thao tac vao
ra. Cac p vao ra c bat au b he thong cac p
mau. Trong C++ tao ra ha ac ta cua p mau nay. Mot
ho tr cho k t -Abit, mot ho tr cho k t rong. Trong cac
phan sau ch s dung p k t -Abit. Thao tac tren k t
rong cung tng t.
He thong vao ra trong C++ ha p mau co en quan
v nhau. Lp au ten dan xuat t p vao/ra cap thap
c go a $asic_st"ea#$u2. Lp nay ho tr cac thao tac
vao/ra c ban cap thap. No cung cap cac ho tr c
ban cho toan bo he thong vao/ra trong C++. Tr trng
hp ta ang ap trnh nang cao, ta khong can s dung trc
tep p $asic_st"ea#$u2. Lp tep theo ma ta se thng
xuyen am vec c dan xuat t p $asic_ios. Nay a
p vao/ra cap cao cung cap nh dang, kem tra o va
thong tn trang tha en quan en uong vao ra. Lp
$asic_ios c s dung nh a p c s cho mot va p
dan xuat nh $asic_ist"ea#, $asic_ost"ea# va
$asic_iost"ea#. Nhng p nay dung e tao ra cac uong
vao, ra, vao/ra tng ng. Danh sach sau cho bet cac p
am vec tren k t -Abit va k t rong.
Template Class
Characterase!
Class
"#!e-Characterase!
Gh*ng 26. Ke" thong 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#
Lp ios cha rat nheu ben va ham thanh ven
eu khen hoac theo do cac hoat ong c ban cua uong.
1.1##.1. uoNng +nh nghKa tr'c
Kh mot chng trnh C++ bat au thc th, co bon
uong t ong 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*
Cac uong ci*, cout, ce"" tng ng v cac uong
stdi*, stdout va stde"" trong C. Ngam nh cac uong chuan
c s dung ket no v che o con,ole. Tuy nhen trong
mo trng ho tr vao ra gan tep (v du nh DOS, OS/2,
Unx va Wndows), uong chuan a gan tep v cac thet
b khac hoac ;ile.
C++ chuan cung nh ngha them bon uong: !i*, !out,
!e"" va !log. Nay a nhng phen ban k t rong cua
uong chuan. K t rong co keu a !cha"_t va thong
thng co o rong a 1+Abit.
7+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
1.1%,. V>UB J> SBW _=OBC@ ]>d@A
He thong vao/ra cua C++ cho phep ta nh dang cac
thao tac vao, ra. V du ta co the at o rong cua trng,
ch ra c so hoac xac nh co bao nheu so sau dau thap
phan. Co ha cach khac nhau e nh dang d eu. Nau
ten co the truy cap trc tep vao cac thanh ven cua
p ios hoac a thet ap cac c trang tha hoac s dung
cac ham thanh ven. Th ha ta co the s dung ham ac
bet go a ham 1ani=ulator ma co the chen vao trong
beu thc vao ra.
1.1#2.1. Cnh ;ang baWng cach ,' ;ung tha$nh
1ieDn cua !< io,
Mo uong eu ket hp v tap cac c nh dang
eu khen nh dang hen th thong tn. Lp ios kha bao
mat na bt go a 2#t2lags va cac ga tr tng ng c
nh ngha (cac ga tr nay nh ngha 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
Cac ga tr nay dung e thet ap hoac xoa cac
nh dang c. Neu ta ang s dung mot trnh ben dch cu
hn, co the no khong nh ngha keu nay. Trong trng
hp nay no c ma hoa trong mot so nguyen da.
Kh c s5i0!s c thet ap, cac k t trong au
(s0aces, ta$s, *e!li*e) se bo qua kh nhap vao mot uong.
Kh c s5i0!s b xoa, cac khoang trong se khong bo qua.
Kh c le2t c thet ap, cac ga tr xuat ra man
Gh*ng 26. Ke" thong 3a'o0ra trong GOO
77
hnh se c canh e tra, "ight c thet ap canh e pha.
Kh i*te"*al thet ap, cac ga tr so se c on them
cac khoang trong e ap ay trng. Neu khong co c
nao thet ap, au ra se c canh e ben pha.
Ngam nh au ra dang so se a so he BU. Tuy nhen,
ta co the thay o c so. Thet ap c oct, hen so he
R, thet ap c he7 hen so he BW. Ne tr a c so BU ta
thet ap c dec.
Thet ap c sho!$ase, hen th c so ra man hnh. V
du neu chuyen so dang he BW, ga tr BF se hen ra man
hnh a U7BF.
Ngam nh, neu so thc dau phay ong hen th, e
se a ch thng, kh so he BW hen th, 7 a ch thng.
Kh thet ap c u00e"case, nhng k t nay se hen th a
ch hoa.
Thet ap c sho!0os, hen dau trc ga tr nguyen.
Thet ap sho!0oi*t, dau thap phan va cac so khong se
c hen th.
Thet ap c scie*ti2ic, so thc dau phay ong hen
th theo dang khoa hoc. Kh thet ap c 2i7ed, so thc dau
phay ong se hen th theo cach thong thng. Kh ca ha
khong c thet ap, trnh ben dch se t ong chon mot
cach hen th thch hp.
Kh u*it$u2 c thet ap, vung em se c am
sach sau mo thao tac chen. Kh $oolal0ha c thet ap,
keu $oolea*s co the c nhap vao hoac xuat ra b ha
t khoa t"ue va 2alse.
7- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
1.1#2.2. &hiet !a< c$ +nh ;ang
Ne thet ap c nh dang, ta dung ham set2?@, ay
a ham thanh ven cua p ios. Dang tong quat nh sau:
2#t2lags set2?2#t2lags 2lags@N
Ham nay tra ve thet ap trc o cua c nh
dang va batt thet ap m. V du muon thet ap c
sho!0os, ta co the s dung cau enh sau:
st"ea#%set2?iosiisho!0os@N
OU ay, st"ea# a uong ma ta muon tac ong. Chu
y cach s dung cua iosiisho!0os, sho!0os a mot hang
et ke c nh ngha trong p ios do o no pha c
ch b iosii trc.
Chng trnh sau hen th ga tr BUU, v c sho!0os,
sho!0oi*t c thet ap:
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
Lu y a ham set2?@ a thanh ven cua p ios, do
o ta khong the s dung ham nay oc ap ma pha ket
hp v uong ma ta muon tac ong.
V du tren ta pha dung ha an ham set2?@ thet ap
ha c nh dang. Co cach khac e rut gon van e nay
o a s dung toan t OR. V du oan chng trnh tren sau
kh rut gon:
Gh*ng 26. Ke" thong 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. Xoa c$ +nh ;ang
Ham ngc cua set2?@ a u*set2?@. Nay a ham
thanh ven cua p ios c s dung e xoa mot hoac
nheu c. Dang tong quat nh sau:
void u*set2?2#t2lags 2lags@N
C c ch ra b 2lags se b xoa (nhng c con a
se khong b tac ong). Ham tra ve cac thet ap trc
o. Chng trnh sau mnh hoa cach s dung ham u*set2?@,
au ten no thet ap c scie*ti2ic va c u00e"case sau
o n ra ga tr BUU%B2. Trong trng hp nay c s dung
trong k heu beu den khoa hoc cua so thc dau phay
ong. Tep theo, chng trnh se xoa c u00e"case va n a
ga tr BUU%B2 dang khoa hoc, kh o k heu e se hen 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%UUB2U2
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.#. Yot ;ang tai boi cua ,et:("
Dang tong quat cua ham ta bo set2?@ a:
2#t2lags set2?2#t2lags 2lagsBX 2#t2lags 2lags2@N
Trong phen ban nay, ch co c 2lags2 a co tac
ong. Nau ten xoa va sau o thet ap tuy theo c
2lagsB. Chu y rang ngay ca kh 2lagsB cha c khac ch
-6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
c c at ta trong 2lags2 se co tac ong. Ham tra ve
thet ap trc 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 tren sho!0oi*t c thet ap ch khong pha
sho!0os. Tuy nhen cach s dung chung nhat cua dang ha
tham so cua ham set2?@ a kh thet ap c so, canh e va
nh dang c.
Tham cheu en trng oct, dec va he7 ket hp trong
trng $ase2ield, tng t le2t, "ight, i*te"*al c ket hp
trong trng adbust2ield, scie*ti2ic, 2i7ed c ket hp
trong trng 2loat2ield. Cac c at trong nhom nay se bu
tr an nhau, ta can pha tat mot c neu thet ap c
khac. V du, chng trnh sau thet ap hen th a so he BW,
va tat cac c khac. Ne am eu nay ta s dung dang
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
Chng trnh tren, au ten xoa c $ase2ield va sau
o thet ap c he7. Nh rang ch co nhng at ta trong
Gh*ng 26. Ke" thong 3a'o0ra trong GOO
-1
2lags2 co the c tac ong b c ch trong 2lagsB. V du
sau se khong thc hen 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 ;ang
Nhng uc ta muon bet thong tn hen ta cua c
nhng khong can thay o no, p ios cung cap cho ta mot
ham 2lags?@. Ham nay tra ve thet ap hen hanh cua
cac c. Dang tong quat nh sau:
2#t2lags 2lags?@N
Chng trnh sau s dung 2lags?@ e hen th thet ap
cua cac c en quan en 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
Ket qua hen 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. &hiet !a< tat ca cac c$
Ham 2lags?@ co mot cach s dung th ha o a cho
phep thet ap tat ca cac c ket hp v mot uong.
Dang tong quat nh sau:
2#t2lags 2lags?2#t2lags 2@N
Kh ta s dung phen ban nay, cac bit mau tm thay
trong 2 c s dung e thet ap nh dang c ket hp
v uong. Va tat ca cac c nh dang nay se c tac
ong. Ham tra ve thet ap trc o.
V du sau mnh hoa phen ban nay cua ham 2lags?@.
Nau ten, xay dng mat na c bac cac c sho!0os,
sho!$ase, oct va "ight. Tat ca cac c khac se tat. Sau o
s dung ham 2lags?@ thet ap c nh dang ket hp v
uong cout.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
void sho!2lags?@N
Gh*ng 26. Ke" thong 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' ;ung Ui;th("= <reci,ion("= :i!!("
Ne nh dang c, trong p ios bo sung them ba ham
thanh ven e thet ap cac thong so: o rong cua
trng, o chnh xac va ap ay cac k t.
Ngam nh, kh mot ga tr c xuat ra, no xuat hen
v o rong bang chnh so k t beu den no. Tuy nhen ta
co the ch ra o rong to theu bang cach s dung ham
!idth?@. Dang tong quat nh sau:
st"ea#si8e !idth?st"ea#si8e !@N
OU ay, ! tr thanh o rong cua trng va ham tra
ve o rong trc o. Trong mot so trng hp, o rong
pha thet ap trc mo an xuat ket qua, neu khong
-& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
o rong ngam nh se c s dung. Keu st"ea#si8e c
nh ngha nh a mot so nguyen.
Sau kh ta thet ap o rong cc teu, kh ga tr hen
th nho hn o rong a ch ra, ket qua hen th se t
ong on them cac k t e ap ay (ngam nh a k t
trong). Neu o rong cua d eu n hn o rong a
thet ap, ket qua se tran qua. Khong co ga tr am
tron.
Kh xuat mot ket qua a ga tr so thc dau phay
ong, ta co the xac nh so ch so sau dau thap phan
c hen th bang cach s dung ham 0"ecisio*?@. Dang
tong quat nh sau:
st"ea#si8e 0"ecisio*?st"ea#si8e 0@N
OU ay, o chnh xac c thet ap b 0, va ham
tra ve o chnh xac trc o. No chnh xac ngam nh a
W. trong mot so trng hp, o chnh xac pha c thet
ap trc mo an xuat ket qua. Neu khong, o chnh
xac ngam nh se c s dung.
Ngam nh, kh mot trng can ap ay, no se chen
cac k t trong. Neu muon ch ra mot k t e ap ay, ta
dung ham 2ill?@. Dang tong quat nh sau:
cha" 2ill?cha" ch@N
Sau kh go ham 2ill?@, ch tr thanh k t ap ay,
ham se tra ve k t cu. V du sau se the hen cac ham
tren.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
Gh*ng 26. Ke" thong 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?ww@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
Ket qua xuat hen tren man hnh nh sau:
BU%B2
BU%B2
Hi^
BU%B2
Co cac dang ta bo cua cac ham tren, nhng ch
nhan ma khong thay o cac thet ap. Dang tong quat
nh sau:
cha" 2ill? @N
st"ea#si8e !idth? @N
st"ea#si8e 0"ecisio*? @N
1.1#2.8. Q' ;ung /ani<u!ator +e* +nh ;ang
1a$o.ra(+ang ,'a"
Cach th ha e thet ap nh dang cho cac uong o
a s dung cac ham ac bet c go a 1ani=ulator. No
co the chen vao trong mot beu thc vao ra. Tat ca cac
ham nay c et ke trong ban sau:
Ma*i0ulato" Pu"0ose I*0utOut0ut
$oolal0ha Tu"*s o* **lapha 2lag% I*0utOut0ut
-+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
dec Tu"*s o* !ec 2lag% I*0utOut0ut
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*0utOut0ut
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*0utOut0ut
*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*0utOut0ut
"esetios2lags
?2#t2lags f @
Tu"* o22 the 2lags s0eci2ied
i* f.
I*0utOut0ut
"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*0utOut0ut
Set2ill
?i*t ch@
Set the 2ill cha"acte" to ch Out0ut
Setios2lags
?2#t2lags 2@
Tu"* o* the 2lags s0eci2ied
i* f.
I*0utout0ut
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" thong 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
Bng 20-1. H# #a*i0ulato"
Ne truy cap vao nhng ham tren co tham so (v du
nh set!?@) ta pha chen ;ile teu 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
Hen th:
WY
||||||29Y9
Neu s dung nhng ham khong co tham so, ta khong
them dau ngoac n trong ham. Nguyen nhan a do a
ch cua ham g en toan t KK. Chng trnh tren co the
vet a d dang ham thanh ven cua 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
Nem thuan ten chnh cua ham 1ani=ulator so v
ham thanh thanh ven cua p ios a vet ma ngan gon
hn.
Ta co the s dung ham setios2lags?@ e thet ap
trc tep cac nh dang cua c en quan en uong. V du
chng trnh sau s dung ham setios2lags?@ e thet ap 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
Ham setios2lags?@ hoat ong tng t nh ham set2?@
cua p ios.
Ham $oolal0ha?@ cho phep vao/ra ha ga tr t"ue, 2alse
thay v s dung 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" thong 3a'o0ra trong GOO
-9
"etu"* UN
4
Ket qua hen 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 toan t KK, LL e vao ra d eu do
ng dung tao ra. Trong C++, toan t xuat d eu con
c go a toan t chen b v no chen k t vao uong.
Tng t toan t vao d eu LL con c go a toan t
trch chon b v no trch k t ra t uong. Ham ta bo ha
toan t nay con c go a chen va trch chon.
1.1#3.1. &' tao ra ha$/ che$n
Tat ca cac ham chen eu co dang 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, ham tra ve tham cheu en uong co keu
ost"ea# (ost"ea# a p dan xuat t p ios). Tham so au
ten cua ham tham cheu en uong ra. Tham so th ha a
o tng (hoac tham cheu cua o tng) can chen. Cac
thong tn can chen pha thc hen trc kh tra ve ga tr
cho ham. Ham nay c s dung trong cac beu thc vao
ra. V du, ta tao ra mot o tng co ten 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
Lp nay se u tr thong tn ve ten ng va so
en thoa. Sau ay a mot cach e tao ra ham chen cho
o tng cua 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
Tep theo a mot chng trnh mnh hoa cach nh ngha,
s dung ham chen.
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" thong 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
Ket qua hen th tren man hnh nh sau:
Ted ?BBB@ VVV-B29Y
Alice ?9B2@ VVV-VTWR
To# ?2B2@ VVV-ZZZB
Nh rang, kh mot ham toan t cua keu d eu
bat k a thanh ven cua mot p, toan han ben tra
(c g an thong qua con tro this) a o tng snh ra
go ham. Neu ham toan t ta bo a thanh ven cua
mot p, th toan hang ben pha a thanh ven cua p
o. Tuy nhen, kh ta bo toan t chen, toan hang ben
tra a mot uong va toan hang ben pha a mot o
tng cua p. Do o ham chen khong pha a thanh
ven cua p. Cac ben *a#e, a"eacode, 0"e2i7 va *u# a
92 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
=ublic trong chng trnh tren va no co the c truy cap
b ham chen.
Thc te, ham chen khong pha a thanh ven cua
mot p ma no c nh ngha. B v ham chen khong
pha a thanh ven, am cach nao e truy xuat cac thanh
ven =ri3ate cua p o? Nh a e cap, ta se tao tat ca
cac thanh ven cua p a =ublic. Tuy nhen, eu nay xung
ot v nguyen bao go cua ap trnh hng o tng.
Co mot cach e khac phuc nhng van e tren o a:
s dung ham than then. Neu nay tranh c tham so
au ten cua ham chen a uong va van chap nhan truy
cap cac thanh ven =ri3ate cua 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" thong 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 ngha than ham chen, ta nh ngha tong quat
hn neu co the. V du ham chen nh ngha tren co the
s dung v mo uong b v than cua ham xuat ket qua
trc tep ra uong. V du tep theo ve cac hop ra man hnh:
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 ttN
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 ttN
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 ttN
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
Ket qua hen th tren man hnh nh sau:
He"e a"e so#e $o7esi

1.1#3.2. &' tao ha$/ Muat


Ham trch chon ngc v ham chen. Dang tong quat
nh sau:
Gh*ng 26. Ke" thong 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
Ham trch chon tra ve mot tham cheu t uong co
keu ist"ea#. Tham so au ten pha a tham cheu en
uong co keu ist"ea#. Tham so th ha pha a tham cheu
en o tng cua 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 tuy ben tren he thong vao ra trong C++
bang cach tao reng cac ham 1ani=ulator. Co ha do e
tao ra ham nay: th nhat ta co the hp nhat day cac
thao tac vao ra trong mot ham. Th ha thc hen cac thao
tac vao ra tren cac thet b khong chuan, v du g mot
ma eu khen en may n.
Dang tong quat cua ham 1ani=ulator tren uong ra
nh sau:
ost"ea# f#a*i0-*a#e?ost"ea# fst"ea#@
3
// 6ou" code he"e
Gh*ng 26. Ke" thong 3a'o0ra trong GOO
97
"etu"* st"ea#N
4
Trong o, #a*i0-*a#e a ten cua ham 1ani=ulator, ham
tra ve tham cheu en uong 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
Chng trnh tren se hen th 2VW U7BUU. Nh ta thay,
ham sethe7 c s dung nh a tham so trong beu thc
vao ra gong nh nhng ham 1ani=ulator ben trong. V du
tep theo se tao ra ha ham 1ani=ulator hen th mu ten
ben tra, ben 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
Ket qua xuat hen tren man hnh nh sau:
High $ala*ce -------L B299%29
Ove" d"a2t -------L VWT%WW K-------
Dang tong quat cua ham 1ani=ulator tren uong vao
nh sau:
ist"ea# f#a*i0-*a#e?ist"ea# fst"ea#@
3
// 6ou" code he"e
"etu"* st"ea#N
}
V du chng trnh sau se tao ham get0ass?@, ham phat
ra teng chuong va nhac ng dung nhap vao mat khau:
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" thong 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
Lu y: cac ham 1ani=ulator t tao pha tra ve uong,
neu khong chng trnh se khong c s dung trong beu
thc vao ra.
Gh*ng 21. Ke" thong 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 thc hen thao tac vao ra tren ;ile, ta pha chen ;ile
teu e K2st"ea#L trong chng trnh. No nh ngha mot va
p bao gom i2st"ea#, o2st"ea# 2st"ea#. Nhng p nay
c dan xuat t p ist"ea#, ost"ea#, st"ea# tng ng
(ist"ea#, ost"ea#, st"ea# dan xuat t p ios), v vay cac
p i2st"ea#, o2st"ea#, 2st"ea# co the truy cap cac thanh
ven trong ios. Lp khac s dung cho he thong ;ile a
2ile$u2, cung cap cac chc nang mc thap e quan
uong ;ile. Thong thng no khong c s dung trc tep
ma thong qua p khac.
1.1%#. $LT P>U YBW@A XBGI `ZFQ
Trong C++, ta co the m mot ;ile bang cach en ket
v uong. Trc kh m mot ;ile ta pha nhan mot uong.
Co ba keu uong, vao, ra, vao/ra. Ne tao mot uong ra, ta
pha kha bao p o2st"ea#. Ne tao uong vao ta kha bao
p i2st"ea#. Cac uong thc hen ca ha thao tac vao/ra
pha c kha bao p 2st"ea#. V du, oan enh sau se tao
ra ba uong vao, ra, vao/ra:
i2st"ea# i*N i*0ut
o2st"ea# outN out0ut
2st"ea# ioN i*0ut a*d out0ut
Kh a tao ra uong, ta co the ket hp v mot ;ile
bang cach s dung ham o0e*?@. Ham nay a thanh ven
cua ca ba p a e cap. Dang tong quat cua mo ham
&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 ten cua ;ile, no co the co
ng dan. Ga tr cua #ode xac nh keu m ;ile. No
pha a mot hoac hn trong cac ga tr c nh ngha b
o0e*#ode c nh ngha trong p ios.
iosiia00
iosiiate
iosii$i*a"6
iosiii*
iosiiout
iosiit"u*c
Ta co the ket hp ha hoac nheu ga tr bang phep
h^ logic.
iosiia00: tat ca cac ;ile ra co the bo sung vao cuo
;ile. Ga tr nay ch s dung v keu ;ile ra. iosiiate a
con tro en cuo ;ile kh m. Mac dau kh m con tro
cuo ;ile nhng ta van co the am vec mo n tren ;ile.
iosiii*: m ;ile e oc. iosiiout m ;ile e gh.
iosii$i*: m ;ile che o nh phan. Ngam nh tat
ca cac ;ile m che o van ban. Trong che o van
ban, nheu k t se c chuyen sang khoang trong, k t
xuong dong, k t ve au dong se chuyen sang mot dong
m. Tuy nhen, kh mot ;ile c m che o nh phan,
khong co k t nao c chuyen o. Lu y, tat cac ;ile
hoac cha van ban co nh dang hoac van ban tho eu
Gh*ng 21. Ke" thong 3a'o0ra treFn ;ile
&6
co the m dang nh phan. Ch co mot em khac a
s chuyen o k t.
iosiit"u*c: no dung ;ile trung ten trc o se b huy
bo va ;ile m se co kch thc a U. Kh tao ra mot uong
ra s dung p o2st"ea#, mo ;ile trc o trung ten se
c kh tao v kch thc bang U.
Noan chng trnh sau m ;ile e gh v che o thong
thng.
o2st"ea# outN
out%o0e*?ttesttX iosiiout@N
Tuy nhen ta co the m ;ile tren bang enh sau:
out%o0e*?ttestt@N
B v iosiiout a thong so ngam nh.
Neu thao tac m sa, ham tra ve ga tr 2alse kh s
dung trong beu thc logic. Do o, trc kh s dung ;ile, ta
pha kem tra thao tac m co thanh cong hay khong. Ta
co the am vec nay bang cau enh sau:
i2?^#6st"ea#@ 3
cout KK tCa**ot o0e* 2ile%l*tN
ha*dle e""o"
4
Mac dau ta co the m ;ile bang ham o0e*?@, tuy
nhen ta co the m ;ile bang cau t cua cac p
i2st"ea#, o2st"ea#, 2st"ea#. Ham cau t tng t nh ham
o0e*?@. Thong thng ta m ;ile bang thao tac sau:
i2st"ea# #6st"ea#?t#62ilet@N o0e* 2ile 2o" i*0ut
Nh a e cap tren, co mot so do ;ile khong m
c, kh o ga tr ket hp v uong tra ve 2alse. Do o
kh m ;ile bang cach dung cau t hay s dung ham
&6& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
o0e*?@, ta van pha kem tra xem thao tac m ;ile co thanh
cong hay khong bang cach kem tra ga tr cua uong.
Mot trong nhng cach kem tra a ta s dung ham
is_o0e*?@. Ham nay a thanh ven cua p ost"ea#,
i2st"ea#, 2st"ea#. Dang tong quat cua ham nay nh sau:
$ool is_o0e*? @N
Ham tra ve t"ue neu uong a c en ket en ;ile
va 2alse trong trng hp con a. V du sau kem tra uong
co ten a #6st"ea# hen ta c m hay cha:
i2?^#6st"ea#%is_o0e*?@@ 3
cout KK tFile is *ot o0e*%l*tN
%%%
4
Ne ong mot ;ile, ta dung ham thanh ven close?@. V
du e ong mot ;ile en ket v uong go a #6st"ea# ta
s dung cau enh sau:
#6st"ea#%close?@N
Ham close?@ khong nhan tham so va khong tra ve
ga tr.
1.1,/. 6BdS P>U PZQRI IJQC@ `ZFQ P>r@ V>T@
Ne oc va vet mot ;ile van ban, ta s dung toan t
KK va LL gong nh oc vet tren man hnh va ban phm. V
du sau tao ra mot ;ile kem ke ngan cha ten va ga cua
no.
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
Gh*ng 21. Ke" thong 3a'o0ra treFn ;ile
&64
o2st"ea# out?tIN&NTRt@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
Chng trnh sau se oc ;ile IN&NTR c tao ra b
chng trnh trc va hen th no dung cua no en man
hnh.
Ji*clude Kiost"ea#L
Ji*clude K2st"ea#L
usi*g *a#es0ace stdN
i*t #ai*?@
3
i2st"ea# i*?tIN&NTRt@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
Noc va vet tren fe bang cach s dung toan t LL
&6+ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
va KK gong nh s dung cac ham 2sca*?@ va 20"i*t2?@
trong C chuan. Tat ca cac thong tn u tr tren ;ile co
khuon dang gong nh hen th tren man hnh.
V du khac cua he thong vao ra tren a. Chng trnh
se oc mot k t t ban phm va vet vao a. Chng trnh
se ngng oc kh ng dung bam mot dau cham than (^).
Ne s dung chng trnh nay, ta pha ch ra ;ile c gh
tren dong enh cua [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 oc ;ile van ban bang cach s dung toan t LL,
u y rang se xuat hen s chuyen o k t. V du nh
khoang trong se bo qua. Neu muon tranh mo s chuyen
Gh*ng 21. Ke" thong 3a'o0ra treFn ;ile
&67
o k t, ta pha m ;ile dang nh phan.
Kh oc, neu gap cuo ;ile uong en ket v ;ile se
tra ga tr a 2alse.
1.1,1. V>UB J> IJQC@ `ZFQ _=BC@A Ya@= ]>d@A P>U
@=a H=>C@
Noc va vet tren ;ile van ban rat de dang, tuy nhen
o khong pha a cach heu qua e quan ;ile. Trong mot
so tnh huong ta co the u d eu d dang nh phan
khong pha van ban. Kh thc hen cac thao tac nh phan
tren fe, ta pha s dung che o iosii$i*a"6.
1.121.1. K t' ,o 1i b)te
Trong rat nheu nam, he thong vao/ra cua C va C++
thc hen theo hng tng b?te mot. Neu nay a do k t
tng ng v mot b?te va ch co duy nhat mot keu
uong cac k t. Tuy nhen v s xuat hen cua k t rong
(co keu !cha"_t) va s xuat hen cua uong ta khong the
no vao/ra trong C++ theo hng tng b?te na, thay vao
o, ta no a hng k t. Tat nhen uong cac k t van
a uong cac b?te kh ta am vec tren d eu khong pha
van ban. Nhng s tng ng cua b?te va k t khong con
phu hp na.
Nh a e cap trong chng 20, tat ca cac uong trong
ta eu nay a uong k t b v cach s dung cua uong
nay a chung nhat. No cung tao ra cach quan ;ile khong
nh dang de dang hn b v mot uong k t tao mot anh
xa 1-1 ga b?te va k t, ay cung a em thuan kh
oc hoac vet tren d eu nh phan.
&6- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
1.121.2. <ut(" 1a$ get("
Ne oc va vet d eu khong nh dang ta s dung
ha ham thanh ven get?@ va 0ut?@ nhng ham nay hoat
ong tren k t. Ham get?@se oc mot k t va ham 0ut?@
se vet mot k t. Tat nhen neu ta a m mot ;ile nh
phan va cac thao tac tren k t th cac ham nay oc/vet
cac b?te d eu.
Ham get?@ co nheu dang, nhng phen ban chung
nhat thng v ham 0ut?@:
ist"ea# fget?cha" fch@N
ost"ea# f0ut?cha" ch@N
Ham get?@ oc mot k t n t uong va at no vao
ben ch. No tra ve tham cheu en uong. Ham 0ut?@ vet
k t ch vao uong va tra ve tham cheu en uong.
Chng trnh sau se hen th no dung cua ;ile bat k
(van ban hoac nh phan) en man hnh. Chng trnh s
dung ham 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" thong 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 bet, kh gap cuo ;ile, uong se cho ga tr
a 2alse, do o uong i* gap cuo ;ile se cho ga tr a
2alse. Ta co the vet cau enh oc ;ile tren d dang
ngan gon hn nh sau:
!hile?i*%get?ch@@
cout KK chN
Lenh tren hoat ong bnh thng b v ham get?@ tra
ve tham cheu en uong va uong se nhan ga tr 2alse
kh cuo ;ile.
Chng trnh tep theo se dung ham 0ut?@ e vet cac
k t t U en 2VV vao ;ile co ten 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
Mot cach khac e oc va vet kho d eu nh
phan a s dung ham "ead?@ va ham !"ite?@. Dang tong
quat 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
Ham "ead?@ se oc *u# k t t uong va at no vao
vung em c tro b $u2. Ham !"ite?@ vet *u# k t en
uong t vung em c tro b $u2. st"ea#si8e a keu
nh ngha trong th ven cua C++ va no co dang nh a
mot so nguyen. V du sau se vet mot cau truc vao a
va oc a cau truc nay.
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" thong 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 thay ch can dung mot enh "ead hoac !"ite co
the oc hoac gh toan bo thong tn cua mot cau truc.
Cac trng khong can oc vet reng bet. Vung em co
the a keu bat k.
Neu gap cuo ;ile trc kh *u# k t c oc, ham
"ead?@ se ngng oc va vung em se cha nhng k t
a oc c. Ta co the kem tra co bao nheu k t a c
oc bang cach s dung ham thanh ven gcou*t?@:
st"ea#si8e gcou*t?@N
Ham nay tra ve so k t a oc b thao tac oc nh
phan cuo cung. Chng trnh sau mnh hoa cach s dung
cua ham "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
Chng trnh tren vet mot mang cac so thc vao a
va sau o oc no tr a. Sau kh go ham "ead?@, gcou*t?@
c s dung e xac nh co bao nheu b?te va m c
oc.
1.121.#. (ac ha$/ get("
Ham get?@ a c ta bo theo nheu dang khac nhau.
Ba dang thng c s dung nhat 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
Dang au ten oc cac k t vao mang c tro b
$u2 cho en kh hoac *u#-B k t c oc, hoac mot dong
m xuat hen, hoac cuo ;ile. Mang c tro b $u2 se
a chuo ket thuc rong. Neu k t dong m xuat hen
trong uong, no van khong c trch ra. Thay v no van duy
tr trong uong cho en kh gap mot thao tac oc t uong.
Gh*ng 21. Ke" thong 3a'o0ra treFn ;ile
&1
Dang th ha oc cac k t vao trong mang c tro
b $u2 cho en kh hoac a *u#-B k t a c oc, hoac
xuat hen k t deli#, hoac cuo ;ile. Mang c tro b $u2
se a chuo ket thuc rong. Neu gap k t anh dau
(<eli1iter) trong uong, no khong c trch ra, no van duy tr
trong uong cho en kh gap mot thao tac oc tep theo.
Dang th ba tra ve k t tep theo t uong. No tra
ve OF neu gap cuo ;ile. Dang ham get?@ nay tng t nh
ham getc?@ trong C.
1.121.2. get!ine("
Mot ham khac thc hen vec oc o a ham
getli*e?@. Ham nay a thanh ven cua cac p o2t"ea#,
i2st"ea#, 2st"ea#. Dang tong quat 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
Dang au ten oc cac k t vao mang c tro b
$u2 cho en kh oc c *u#-B k t, hoac gap mot k t
dong m, hoac gap cuo ;ile. Mang c tro b $u2 a
chuo ket thuc rong. Neu xuat hen k t dong m, no
se c trch ra nhng khong at vao $u2.
Dang th ha oc k t vao mang c tro b $u2 cho
en kh oc *u#-B k t, hoac hoac gap k t c mo ta
b deli#, hoac gap cuo ;ile. Mang c tro b $u2 a
chuo ket thuc rong. Neu gap k t anh dau (<eli1iter)
trong uong, no se c trch ra nhng khong at vao trong
$u2.
Ta thay ha phen ban ham nay gong nh ha phen
ban cua ham get?@. Ca ha eu oc chuo k t va at
&1& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
vao trong mang c tro b $u2 cho en kh *u#-B k t
c oc, hoac gap k t anh dau. Nem khac a
getli*e?@ oc va xoa k t anh dau t uong con get?@
th khong.
V du sau mnh hoa ham getli*e?@. No oc no dung
cua ;ile van ban tren mot dong trong mo an oc va
hen th no en man hnh.
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 xac nh kh nao gap cuo ;ile bang cach
s dung ham thanh ven eo2?@, dang tong quat nh sau:
Gh*ng 21. Ke" thong 3a'o0ra treFn ;ile
&14
$ool eo2?@N
Ham tra ve t"ue neu gap cuo ;ile, tra ve 2alse trong
trng hp con a.
Chng trnh sau se s dung ham eo2?@ e hen th no
dung cua ;ile ha dang 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 NTR to co*ti*uei tN
ci*%get?@N
cout KK e*dlN
4
4
i*%close?@N
"etu"* UN
4
Ket qua hen th tren man hnh nh sau:
1.1,3. H>UX ZA@BJQ("
Ta co the dung ham ig*o"e?@ e oc va bo qua mot
cac k t t uong. Dang tong quat nh sau:
ist"ea# fig*o"e?st"ea#si8e *u#cBX i*t_t60e deli#cOF@N
Gh*ng 21. Ke" thong 3a'o0ra treFn ;ile
&17
Ham se oc va bo qua k t cho en kh hoac *u# k t
a bo qua (ngam nh a 1) hoac gap k t deli# (ngam
nh a OF). Neu xuat hen k t anh dau, no khong
c xoa kho uong. Keu i*t_t60e nh ngha gong so
nguyen.
V du sau oc no dung ;ile TST. No bo qua nhng k t
cho en kh hoac gap mot khoang trong hoac a oc c
BU k t. Hen th cac no dung con a cua ;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 nhan mot k t trong uong ma khong xoa
no bang cach s dung ham 0ee5?@. Dang tong quat nh
sau:
&1- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
i*t_t60e 0ee5?@N
No tra ve k t tep theo trong uong hoac OF neu
gap cuo ;ile (i*t_t60e c nh ngha gong nh so
nguyen).
Ta co the tra a k t cuo cung a oc en uong
bang cach s dung 0ut$ac5?@. Dang tong quat nh sau:
ist"ea# f0ut$ac5?cha" c@N
c a k t cuo a oc.
1.1,,. `FO\=("
Kh m mot uong e gh, d eu khong can thet
pha vet ngay ap tc ra cac thet b vat en ket v
uong. Thay vao o, d eu se c u tr trong mot
vung nh trung gan cho en kh vung nh nay ay. Kh o
d eu t vung em m gh vao a. Tuy nhen ta co
the bat buoc cac thong tn nay vet vao a trc kh
uong ay bang cach s dung ham fush(). Dang tong quat
nh sau:
ost"ea# f2lush?@N
Lu y: kh ong mot ;ile, chng trnh cung chuyen d
eu t vung em vao a.
1.1,-. TJO^ S>GH @A>fO @=ZQC@
Trong he thong vao/ra C++, ta co the thc hen cac
thao tac truy cap ngau nhen bang cach s dung ha ham
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 keu so nguyen c nh ngha trong ios
co the u tr ga tr nguyen n nhat. see5di" a mot
Gh*ng 21. Ke" thong 3a'o0ra treFn ;ile
&19
keu et ke c nh ngha trong ios, no xac nh cach
thc truy cap.
Trong C++ co ha con tro ket hp v ;ile. Mot go a
con tro get, con tro nay ch ra v tr tren ;ile ma thao tac
oc tep theo se thc hen. Con tro th ha a con tro 0ut,
no ch ra v tr ma thao tac gh tep theo se thc hen. Mo
thao tac oc gh cac con tro se t ong d chuyen tuan t.
Tuy nhen, s dung ham see5g?@ va see50?@ cho phep ta truy
cap d dang khong trnh t.
Ham see5g?@ d chuyen con tro hen hanh ket hp v
;ile o22set k t t v tr o"igi*. o"igi* se nhan mot trong ba
ga tr sau:
iosii$eg Begi**i*g-o2-2ile
iosiicu" Cu""e*t locatio*
iosiie*d *d-o2-2ile
Ham see50?@ d chuyen con tro 0ut hen hanh ket hp
v ;ile o22set k t t v tr o"igi*.
Tong quat, thao tac truy cap ngau nhen ch thc
hen tren ;ile m d dang nh phan. V du sau e cap
en ham see50?@ cho phep ta thay o k t ch ra trong ;ile.
Ch ra ten ;ile ta dong enh, theo sau a so k t trong ;ile
ma ta muon thay o theo sau b mot k t m. Chu y ;ile
c m d che o oc 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 dung chng trnh nay thay o k t th B2
cua ;ile TST thanh ch . ta s dung enh sau:
cha*ge test B2
Chng trnh tep theo se s dung ham see50?@. Hen
th no dung cua ;ile bat au v v tr c ch ra ta dong
enh.
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" thong 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
Chng trnh sau se s dung ca ha ham see50?@ va
see5g?@ e ao ngc *u# k t au ten 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 dung chng trnh tren, ta ch ra ten ;ile muon
ao ngc, theo sau a so k t c ao ngc. V du muon
ao ngc BU k t au ten cua ;ile TST, ta s dung dong
enh sau:
"eve"se test BU
Neu ;ile cha d eu nh sau:
This is a test%
Sau kh ao ngc BU k t au ta co:
a si sihTtest%
1.123.1. Rhan 1 tr hien ha$nh cua :i!e
Ta co the xac nh v tr hen ta cua ;ile bang cach
s dung ham sau:
0os_t60e tellg?@N
0os_t60e tell0?@N
0os_t60e a keu nh ngha trong trong ios co kha
nang u tr ga tr so nguyen n nhat. Ta co the s
dung ga tr tra ve cua ham tell0?@ va tellg?@ nh a
mot tham so cua cac ham see50?@ va see5g?@ tng ng
dang sau:
ist"ea# fsee5g?0os_t60e 0os@N
ost"ea# fsee50?0os_t60e 0os@N
Nhng ham nay cho phep u tr v tr hen th cua
con tro ;ile. V du nh thc hen mot thao tren ;ile sau o
chuyen con tro ;ile ve ung v tr trc o.
1.1,+. C>WS IJ>d@A I=>WZ P>UB J>
He thong vao ra trong C++, duy tr thong tn trang tha
ve ket qua cua mo thao tac vao ra. Trang tha hen th
Gh*ng 21. Ke" thong 3a'o0ra treFn ;ile
&2
cua thao tac vao ra c g trong mot o tng iostate
a mot keu et ke c nh ngha trong ios bao gom cac
thanh ven 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 IO e""o"
has occu""edN
U othe"!ise
iosii$ad$it B !he* a 2atal IO e""o" has occu""edN
U othe"!ise
Co ha cach ta co the nhan thong tn trang tha
vao/ra. Nau ten s dung ham "dstate?@. No co khuon
dang nh sau:
iostate "dstate?@N
Ham tra ve trang tha hen th cua c o, neu
khong co o ham tra ve good$it. Chng trnh sau mnh hoa
ham "dstate?@. No hen th no dung cua mot ;ile van
ban. Neu gap o, chng trnh se thong bao bang cach
s dung ham 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 tOF e*cou*te"edl*tN
else i2?i f iosii2ail$it@
cout KK tNo*-Fatal IO e""o"l*tN
else i2?i f iosii$ad$it@
cout KK tFatal IO e""o"l*tN
4
Chng trnh sau uon hen th mot thong bao, o a
thong bao ket thuc ;ile. Mot cach khac e xac nh o
o a dung cac ham sau:
$ool $ad?@N
$ool eo2?@N
$ool 2ail?@N
$ool good?@N
Ham $ad?@ tra ve t"ue neu $ad$it c thet ap,
ham 2ail?@ tra ve t"ue neu 2ail$it c thet ap, ham
eo2?@ tra ve t"ue neu eo2$it c thet ap, ham good?@
tra ve t"ue neu khong co o. Ngoa ra, tat ca tra ve
2alse.
Neu mot o xuat hen, no can pha xoa trc kh
Gh*ng 21. Ke" thong 3a'o0ra treFn ;ile
&24
chng trnh tep tuc. Ne am vec nay ta s dung ham
clea"?@ nh sau:
void clea"?iostate 2lagsciosiigood$it@N
Neu 2lags a good$it (a tham so ngam nh), tat ca
cac c o se c xoa, ngoa ra ta thet ap 2lags nh
mong muon.
1.1,4. TOU^ VZQR@ P>UB J> P>U `ZFQ
Trong chng 20 ta a e cap en cach ta bo ham
toan t chen va trch chon en quan en p cua mnh.
Trong chng o ta ch thc hen vao ra tren che o
con,ole, nhng v tat ca cac uong trong C++ a nh nhau
nen ta co the ta bo ham chen, trch chon e thc hen
vao ra tren con,ole va tren ;ile ma khong can thay o bat
c eu g. V du sau tr a v v du 0ho*e$oo5 trong chng
20, va cac danh sach se c u tren a. Chng trnh co
cac chc nang n gan nh: cho phep them ten vao danh
sach hoac hen th danh sach en man hnh. No s dung
cac tuy ben tren ham chen va trch chon e vao va ra
d eu so en 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" thong 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 rang, toan t ta bo KK co the c s dung
e vet en a hoac vet en man hnh ma khong can
thay o. Nay chnh a at trng quan trong va hu ch cua
&2- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
phng phap vao ra trong C++.
Gh*ng 22. Kie>u tai .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++ chuan cha ha at trng gup ho tr ap trnh
hng o tng: xac nh keu ta th em thc th (vet
tat a ^))ZA ^un )i1e )?=e Z<enti;ication) va toan t ep keu
m. RTTI cho phep ta xac nh keu cua mot o tng
trong suot qua trnh thc th chng trnh. Toan t ep keu
cung cap thao tac ep keu an toan hn.
1.1,#. 6a@= ]>@= _ZQMO I>dZ I=LUZ YZQMX I=DdS I=Z
Kha nem keu ta th em thc th khong xuat
hen trong c che khong a hnh v du nh ngon ng C. Trong
ngon ng khong a hnh no khong can thong tn ve keu
thc th b v keu cua mo o tng c xac nh ta
th em ben dch (tc a ta th em vet chng trnh).
Tuy nhen trong ngon ng co c che a hnh nh C++, xuat
hen tnh huong ma trong o keu cua mot o tng
khong c bet ta th em ben dch b tnh chnh xac
cua o tng khong c xac nh cho en kh chng trnh
thc th. Trong chng 17, C++ ca at tnh a hnh thong qua
cach s dung p phan cap, ham ao, va con tro p c
s. Con tro p c s co the tro en o tng p c s
hoac o tng p dan xuat. Ta khong the nao xac nh
keu o tng cua con tro nay ta mo th em trong
chng trnh. Keu o tng cua con tro nay ch c xac
nh ta th em thc th bang cach s dung RTTI.
Ne nhan c keu o tng, ta s dung toan t
t60eid. Ta pha chen ;ile teu e Kt60ei*2oL. Dang tong
&6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
quat nh sau:
t60eid?o$bect@
o$bect a o tng ma keu cua no se c nhan.
No co keu bat k, bao gom keu d eu ben trong va
keu p do ta tao ra. t60eid tra ve mot tham cheu en
o tng cua keu t60e_i*2o mo ta keu cua o tng.
Keu t60e_i*2o nh ngha cac thanh ven =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 toan t a c ta bo a cc va ^c dung e so
sanh keu. Ham $e2o"e?@ tra ve t"ue neu o tng go
ham nay a trc o tng trong tham so (ham nay
thng s dung ben trong). Ham *a#e?@ tra ve ten o
tng. 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 tai .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
Ket qua xuat hen 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
Cach s dung chung nhat cua t60eid kh ap dung con
tro p c s a hnh. Trong trng hp nay, no se t ong
tra ve keu cua o tng thc s ma no tro en, co
the a keu c s hoac keu dan xuat. Kh s dung t60eid
trong tnh huong nay, ta co the xac nh c keu cua
mot o tng ta th em thc th ma c tro b con
tro p c s. V du sau se mnh hoa trng hp tren.
&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
Ket qua hen th tren man hnh nh sau:
0 is 0oi*ti*g to a* o$bect o2 t60e class Ma##al
Gh*ng 22. Kie>u tai .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 tat ca cac trng hp, kh t60eid ap dung v
con tro cua mot p co phan cap nhng khong a hnh, uc
o se tra ve keu d eu cua p c s. That vay, trong
v du tren neu ta bo t khoa vi"tual trc ham
la6s_eggs?@ ket qua xuat hen tren man hnh 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 ap dung t60eid en tham cheu o tng cua p
a hnh, no tra ve keu o tng thc s ma tham cheu
en v du nh a p dan xuat. Tnh huong nay thng
xuat hen kh ta g en ham mot tham cheu. V du chng
trnh sau, ham hatMa##al?@ c kha bao co mot tham so
a tham cheu en o tng co keu Ma##al. Neu nay co
ngha a tham so co the nhan keu Ma##al hoac p dan
xuat t Ma##al. Kh ap dung toan t t60eid en tham so
nay, no tra ve keu thc s cua o tng g en ham.
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
Ket qua hen th tren man hnh 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
Dang th ha cua toan t t60eid nhan ten keu nh
a mot tham so. Dang tong quat nh sau:
t60eid?type-name@
V du cau enh sau hoan toan hp e:
cout KK t60eid?i*t@%*a#e?@N
Cach s dung chnh cua dang nay a nhan mot o
tng keu t60e_i*2o, v vay ta co the s dung trong cau
enh so sanh. V du:
void hatMa##al?Ma##al fo$@
Gh*ng 22. Kie>u tai .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 ;ung +n gian cua ^&&L
Chng trnh sau no en sc manh cua RTTI. Trong
chng trnh nay, ham c go a 2acto"6?@, ham nay tao
ra cac the hen cua cac keu dan xuat t p Ma##al.
Keu cua o tng c tao ra c xac nh b go
cua ham "a*d?@, neu ham tra ve U, snh ra o tng Cog,
neu tra ve B snh ra o tng Cat va neu tra ve 2 snh ra
o tng Plat60us. Chng trnh tao ra BU o tng va em
so ng mo keu c hnh thanh.
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
Ket qua xuat hen 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 tai .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 ;ung toan t' t)<ei; +en !< /aPu
Toan t t60eid co the ap dung cho p mau. Toan
t nay dung e xac nh keu d eu g dung cho keu
d eu 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
Ket qua hen 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 thay, ha o tng a cung keu p mau, neu
d eu tham so khong khp nhau, no se a ha keu
khong tng ng nhau. Trong chng trnh nay, oB a keu
#6classKi*tL va o9 a keu #6classKdou$leL, ha o tng
nay co keu khac nhau.
RTTI t kh c s dung trong cac chng trnh. Trong
trng hp ta am vec v keu a hnh, ta s dung toan
t t60eid e xac nh keu d eu cua o tng c
tao ra.
1.1-/. TB>W@ IDT QWH _ZQMO
C++ nh ngha 5 toan t ep keu, keu au ten theo
phong cach truyen thong ke tha t C. Bon toan t con
a c bo sung vao sau o a: d6*a#ic_cast, co*st_cast,
"ei*te"0"et_cast, static_cast.
1.13>.1. ;)na/icaca,t
Toan t em keu m quan trong nhat a
d6*a#ic_cast. Toan t nay thc hen ep keu th gan
thc. Dang tong quat nh sau:
Gh*ng 22. Kie>u tai .ie>1 th*c thi 3a' e= kie>u &9
d6*a#ic_castKta"get-t60eL ?e70"@
ta"get-t60e ch ra keu ch cua toan t ep keu va
e70" a beu thc c ep sang keu m. Keu ch pha
a mot keu con tro hoac tham cheu va beu thc c
ep keu pha c co nh a keu con tro hoac tham cheu.
That vay, d6*a#ic_cast co the c s dung e ep mot
keu con tro en mot keu con tro khac hoac mot tham
cheu en mot tham cheu khac.
Muc ch cua d6*a#ic_cast thc th ep keu tren keu
a hnh. V du, cho ha p a hnh B va C v C c ke tha
t B, toan t d6*a#ic_cast co the uon uon ep keu con
tro C sang keu B b v con tro keu c s co the tro
en p dan xuat. Nhng d6*a#ic_cast co the ep mot
keu B vao keu C neu o tng c tro a thc s a
mot o tng C. Tong quat, d6*a#ic_cast se thanh cong
neu con tro (hoac tham cheu) c ep keu en hoac a
mot o tng keu ch hoac a mot o tng c dan
xuat t keu ch. Cac trng hp con a, ep keu se
khong thanh cong. Neu ep keu khong thanh cong
d6*a#ic_cast tra ve ga tr *ull trong trng e70" a con
tro. No v trng hp tham cheu, neu d6*a#ic_cast
khong thanh cong se nem mot ngoa e a $ad_cast.
V du sau ga s Base a p a hnh va Ce"ived c
dan xuat 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 tren ep keu t con tro $0 p c s ve en
p dan xuat d0 hp e b $0 a thc s tro en mot
o tng cua Ce"ived. Va oan chng trnh tren hen th
Cast OO. Xet oan chng trnh 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
Noan trnh tren ep keu khong thc hen c b v $0
ang tro en o tng p Base va vec ep keu t o
tng p c s ve o tng p dan xuat a khong hp
e.
Chng trnh e rat nheu tnh huong ma d6*a#ic_cast
co the quan :
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 tai .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
Ket qua hen th tren man hnh 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; 1i ;)na/icaca,t
Toan t d6*a#ic_cast thnh thoang c s dung thay
cho t60eid. V du ga s Base a p c s a hnh va
Gh*ng 22. Kie>u tai .ie>1 th*c thi 3a' e= kie>u &&
Ce"ived a p dan xuat t Base. Noan chng trnh sau se
gan d0 a ch cua o tng c tro b $0 neu va ch
neu no a mot o tng thc s cua p Ce"ived.
Base $0N
Ce"ived d0N
%%%
i2?t60eid?$0@ cc t60eid?Ce"ived@@ d0 c ?Ce"ived @ $0N
Trong trng hp nay, ep keu theo cach cu c s
dung e ep keu. Cach nay a an toan b v cau enh i2
kem tra tnh hp phap ep keu s dung t60eid trc kh
ep keu thc s den ra. Tuy nhen cach tot hn e thc
hen eu nay a thay the toan t t60eid va cau enh i2
bang d6*a#ic_cast.
d0 c d6*a#ic_castKCe"ived L ?$0@N
Do d6*a#ic_cast ch thanh cong neu o tng c
ep hoac a o tng cua keu ch hoac a o tng
c dan xuat cua keu ch, sau kh thc hen cau enh
nay d0 se cha hoac rong hoac con tro en o tng
cua 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
Ket qua xuat hen tren man hnh nh sau:
Gh*ng 22. Kie>u tai .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' ;ung ;)na/icaca,t 1i !< /aPu
Toan t d6*a#ic_cast cung co the s dung v p
mau. 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
Ket qua xuat hen tren man hnh 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%
Van e chnh mnh hoa trong v du nay a ta khong the
s dung d6*a#ic_cast e ep mot con tro the hen cua
p mau ve keu khac cua the hen. Lu y rang, keu
chnh xac cua mot o tng cua p mau c xac nh
b keu d eu c s dung e tao ra the hen cua
p mau. That vay, Nu#Kdou$leL va Nu#Ki*tL a ha keu
khac nhau.
1.13>.#. con,taca,t
Gh*ng 22. Kie>u tai .ie>1 th*c thi 3a' e= kie>u &&7
toan t const_cast c s dung e ta bo const
va/hoac voate trong ep keu. Keu ch va nguon pha
cung keu v nhau. Dang tong quat cua toan t nay nh
sau:
co*st_castKt60eL ?e70"@
type cho bet keu ch, expr beu thc can ep sang
keu 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
Ket qua xuat hen tren man hnh nh sau:
7 $e2o"e calli BU
7 a2te" calli BUU
Ta thay x c thay o b ham sqrva() ke ca kh tham
so c truyen vao a keu con tro const.
Toan t const_cast cung c s dung e ep keu
hang sang tham cheu hang. V du, chng trnh tren am
vec a v tham so g en ham a hang tham cheu.
&&- 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
Lu y chng trnh tren am vec c b v no xoa
thuoc tnh hang cua va, no cho phep gan mot ga tr m
t go ham (trong trng hp nay a x).
1.13>.2. ,taticaca,t
toan t statc_cast thc th mot ep keu khong pha a
hnh. No co the c s dung cho mo keu chuyen o
chuan. No khong thc hen keu tra kh thc th. Dang tong
quat nh sau:
static_castKt60eL ?e70"@
type a keu ch va expr a beu thc can ep keu. 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 tai .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
Toan t renterpret_cast chuyen o mot keu vao
keu c ban khac. V du no co the chuyen mot con tro ve
so nguyen va so nguyen ve con tro. Dang tong quat nh
sau:
"ei*te"0"et_castKt60eL ?e70"@
type a keu ch va expr a beu thc can ep keu. 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 tren, toan t renterpret_cast ep keu con tro ve
keu so nguyen.
Gh*ng 2. KhoFng gian teFn@ cac ha'1 chu?e>n .o>i@ cac 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@
Khong gan ten m c bo sung vao C++, muc ch
cua no a khoanh vung ten cua cac nh danh e tranh
tnh trang xung ot. Trong mo trng ap trnh C++, co s
bung no ve ten ben, ham va p. Trc kh phat mnh ra
khong gan ten, cac ten nam trong mot khong gan ten
toan cuc va xay ra xung ot. V du chng trnh nh ngha
mot ham co ten a a$s?@, no co the chong en ham th
ven chuan a$s?@ b v ca ha ten c u tr trong mot
khong gan ten toan cuc. Xung ot ten xuat hen kh ha
hoac nheu hn ha th ven s dung trong mot chng trnh,
kh o co the co mot ten c nh ngha trong ha th
ven khac nhau. Tnh huong nay cung xuat hen trong ten
p.
S xuat hen cua t khoa *a#es0ace se ga quyet
cac van e tren b v no khoanh vung cac ten vao ben
trong no. Khong gan ten cho phep cung mot ten co the
s dung nhng ng canh khac nhau ma khong co s
xung ot. Tuy nhen, em thuan ang chu y nhat cua
khong gan ten o a th ven chuan. Trc kh co khong
gan ten, toan bo cac th ven c nh ngha ben trong
mot khong gan ten toan cuc, t kh co t khoa *a#es0ace,
cac th ven c nh ngha ben trong mot khong gan ten
cua no go a std.
&42 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Ta cung co the tao ra mot khong gan ten e khoanh
vung cac ben ma ta ngh co the xay ra xung ot. Neu
nay ac bet quan trong neu ta tao ra mot th ven cac
p va ham.
1.131.1. ( ban 1eN khoDng gian teDn
T khoa *a#es0ace cho phep ta cha khong gan ten
toan cuc bang cach tao ra mot kha bao vung, no cach
khac khong gan ten nh ngha mot pham v. Dang tong
quat khong gan ten nh sau:
*a#es0ace *a#e 3
// decla"atio*s
4
Mo th nh ngha ben trong cau enh *a#es0ace a
ben trong pham v cua khong gan ten o.
Sau ay a mot v du ve khong gan ten. No khoanh
vung ten cua c dung e ca at mot p em n
gan. Trong khong gan ten nay nh ngha mot p co ten
a cou*te" va ben 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@ cac ha'1 chu?e>n .o>i@ cac 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 ay u00e"$ou*d, lo!e"$ou*d va cou*te" c khoanh
vung trong khong gan ten Cou*te"Na#es0ace.
Ben trong mot khong gan ten, nh danh kha bao ben
trong khong gan ten o c tham cheu trc tep. V du
ben trong khong gan ten Cou*te"Na#es0ace, ham "u*?@ co
the tham cheu trc tep en lo!e"$ou*d bang cau enh:
i2?cou*t L lo!e"$ou*d@ "etu"* cou*t--N
Tuy nhen, do khong gan ten nh ngha mot pham v ta
can pha s dung toan t phan ga pham v e tham
cheu en o tng c kha bao ben trong mot khong
gan ten t ben ngoa khong gan ten. V du e gan BU cho
u00e"$ou*d t ben ngoa khong gan ten Cou*te"Na#es0ace ta
pha s dung cau enh:
Cou*te"Na#eS0aceiiu00e"$ou*d c BUN
Hoac e kha bao mot o tng keu cou*te" ben
ngoa Cou*te"Na#es0ace, ta s dung cau enh:
Cou*te"Na#eS0aceiicou*te" o$N
Tong quat, e truy cap mot thanh ven cua khong
gan ten t ben ngoa, trc ten thanh ven pha co ten
cua khong gan ten cung v toan t phan ga pham v.
Chng trnh sau mnh hoa cach s dung khong gan ten
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@ cac ha'1 chu?e>n .o>i@ cac 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 bao o tng cou*te" va tham cheu en
thanh ven lo!e"$ou*d, u00e"$ou*d pha c ch ro b
Cou*te"Na#es0ace. Tuy nhen kh o tng cua cou*te" a
c kha bao no va cac thanh ven cua no khong can
ch ro khong gan ten. That vay, o$B%"u*?@ co the go trc
tep, khong gan ten a c phan ga.
1.131.2. (aDu !enh u,ing
Neu chng trnh tham cheu en cac thanh ven cua
mot khong gan ten nheu an, eu nay dan en vec ta
pha vet a nheu an ten khong gan va toan t phan
ga pham v. Ne khac phuc tnh huong nay, ta s dung cau
enh usi*g. Cau enh nay co ha dang nh sau:
usi*g *a#es0ace *a#eN
usi*g *a#eii#e#$e"N
Dang au ten, ch ra khong gan ten ma ta muon truy
cap. Tat ca cac thanh ven trong khong gan ten se a
thanh ven cua khong gan ten hen hanh va no c s
dung ma khong can pha ch ro khong gan ten trc.
Dang th ha, ch no ro nhng thanh ven cua khong gan
ten 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
Chng trnh sau mnh hoa cach s dung 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@ cac ha'1 chu?e>n .o>i@ cac 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 mot keu khong gan ten ac bet go a khong
gan ten khong co ten, cho phep ta tao ra cac nh danh
reng cho mot ;ile. Khong gan ten nay con c go a
khong gan ten nac danh. Dang tong quat nh sau:
*a#es0ace 3
// decla"atio*s
4
Khong gan ten nac danh cho phep ta thet ap nhng
nh danh reng ma ch c bet trong mot ;ile n. Ben
trong ;ile cha khong gan ten nac danh, cac thanh ven
nay c s dung trc tep. Tuy nhen ben ngoa ;ile, pha
ch ro nh danh.
1.131.#. Yot 1a$i tu$) chon treDn khoDng gian teDn
Co the co nheu khong gan ten trung ten. 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
Ket qua hen th tren man hnh nh sau:
BUU
BUU
OU ay NS c cha thanh ha mau, tuy nhen no dung
cua mo mau van nam tren cung mot ten o a NS.
Mot khong gan ten pha c kha bao ben ngoa cac
pham v khac. Neu nay co ngha a ban khong the kha
bao khong gan ten trong mot ham. Tuy nhen co mot
ngoa e, khong gan ten co the ong trong mot khong gan
ten khac. 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@ cac ha'1 chu?e>n .o>i@ cac 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
Ket qua hen th tren man hnh nh sau:
BZ BU
BZU
Trong v du tren, khong gan ten NS2 ong trong khong
gan ten NSB. Ne tham cheu en b ta pha ch ro ca ha
khong gan ten NSB va NS2.
Thong thng ta khong nen tao ra khong gan ten cho
nhng chng trnh co kch thc nho. Tuy nhen neu ta tao
ra mot th ven e s dung th nen go nhng th ven
nay vao mot khong gan ten.
1.1-2. 0=BC@A AZ>@ IQC@ \I]
C++ chuan nh ngha toan bo cac th ven chuan
vao khong gan ten a std. ay chnh a do v sao cac v du
a e cap tren eu co cau enh:
usi*g *a#es0ace stdN
Cau enh tren a khong gan std thanh khong gan
hen hanh. Ta co the truy cap trc tep ten ham, p
&+6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
thanh c nh ngha ben trong th ven ma khong can
ch ro sdtii. Tat nhen ta co the ch ay u khong gan
ten neu muon. V du chng trnh sau se khong a cac th
ven vao khong gan toan cuc.
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 ay ci*, cout va ham he7 c ch ro b khong
gan ten. Tuy nhen neu chng trnh cua ta cha hang tram
cau enh tham cheu en ten th ven, kh o chuyen
khong gan ten std am khong hen hanh am cho no dung
chng trnh ngan gon hn.
Neu ta ch s dung va ten trong th ven chuan, ta
co the dung cau enh usi*g cho tng thanh ven reng
bet. Nem thuan ten cua phng phap nay a ta co the
s dung nhng thanh ven o ma khong can khong gan
ten trong kh khong can mang toan bo khong gan ten cua
th ven thanh khong gan ten hen hanh. 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@ cac ha'1 chu?e>n .o>i@ cac 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 ay ci*, cout va he7 co the s dung trc tep,
nhng nhng phan con a cua khong gan std van khong
tr thanh khong gan hen hanh.
Nh a e cap, th ven C++ c nh ngha trong
khong gan ten toan cuc, neu ta chuyen t chng trnh cu
hn, kh o ta can hoac them t khoa usi*g *a#es0ace std
hoac ch ro trc tham cheu mo thanh ven t stdii.
Nay a van e rat quan trong neu ta thay the ;ile teu e
cu v ;ile teu e m. Nh rang, ;ile teu e cu at no
dung cua no trong khong gan ten toan cuc, ;ile teu e
m at no dung cua no vao khong gan ten std.
1.1-3. T>dB XBGI =>UX S=O^QM@ YBMZ
Trong mot so tnh huong, ta muon s dung mot o
tng cua p trong beu thc bao gom nhng keu d
eu khac. Toan t ta bo cung cap phng ten e thc
hen eu nay. Tuy nhen trong mot so trng hp ta muon
mot chuyen o n gan t keu p sang keu ch. Ne
thc hen eu nay, C++ cho phep ta tao ra ham chuyen
o. Ham chuyen o chuyen keu p thanh mot keu
tng thch v nhng phan con a cua beu thc. Dang
tong quat:
o0e"ato" t60e?@ 3 "etu"* valueN 4
&+2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
t60e a keu ch va value a ga tr cua p sau kh
chuyen o keu. Ham chuyen o tra ve d eu keu
t60e, mo keu tra ve khac eu khong c phep thc
hen. Mot ham chuyen o pha a thanh ven cua p
nh ngha no. Ham chuyen o c ke tha va no co
the a ham ao.
Chng trnh s dung p stac5 e mnh hoa, ga s ta
muon s dung o tng cua p stac5 ben trong mot
beu thc so nguyen. Ga s ga tr cua o tng keu
stac5 trong beu thc so nguyen a so ga tr hen th
co trong stac5. Co mot cach e thc hen eu nay o a
chuyen o mot keu stac5 sang mot so nguyen beu den
so phan t hen co trong stac5. Ne thc hen eu nay ta
s dung ham chuyen o co dang nh sau:
o0e"ato" i*t?@ 3 "etu"* tosN 4
Chng trnh sau mnh hoa cach am vec cua ham
chuyen o.
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
co*st i*t SIcBUUN
this c"eates the class stac5
class stac5 3
i*t stc5gSIhN
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@ cac ha'1 chu?e>n .o>i@ cac 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
Ket qua hen th tren man hnh nh sau:
2U ite#s o* stac5%
RU s0aces o0e*%
Nh ta thay, kh o tng stac5 c s dung trong mot
beu thc so nguyen v du nh: b c stc5, ham chuyen o
se c ap dung en o tng. Trong trng hp ac bet
ham chuyen o tra ve ga tr 2U. Kh stc5 b tr b SI,
ham chuyen o cung c go.
&+& ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Sau ay a mot v du khac cung cua ham chuyen
o. Chng trnh se tao ra mot p 0!" u tr va tnh ket
qua cua so mu. No u tr ket qua keu dou$le. Bang
cach s dung ham chuyen o dou$le va tra ve ket qua,
ta co the s dung o tng keu 0!" trong beu thc co
ga tr khac a keu 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@ cac ha'1 chu?e>n .o>i@ cac 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
Ket qua hen th tren ma hnh nh sau:
BBW%2
2UT9U%T
Nh ta thay, 7 c s dung trong beu thc 7BUU%2,
ham chuyen o c s dung e tao ra mot ga tr
dou$le. Chu y rang beu thc 8c76 khong go ham
chuyen o keu b v trong beu thc ch co cac o
tng cua p 0!".
Thong thng ham chuyen o keu cung cap mot cu
phap t nhen hn e s dung kh o tng cua mot p
c tron v keu d eu no ta. Nac bet trong p 0!"
ham chuyen o keu am cho o tng cua mot p
c s dung trong beu thc toan hoc thong thng rat
de ap trnh va de heu.
Ta co the tao ham chuyen o khac neu gap nhng
tnh huong khac, v du ta co the nh ngha ham chuyen
o en keu dou$le hoac lo*g. Mo ham nay se t ong
thc hen nh vao keu d eu cua beu thc.
1.1-%. H>UX I=>U@= PZQC@ F>U SB@\I
Ham thanh ven cua mot p co the kha bao a
co*st. That vay, nhng ham nay khong the thay o b
&++ ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
o tng go no. No tng a co*st cung co the khong
go ham thanh ven khong pha co*st. Tuy nhen, mot ham
thanh ven a co*st co the c go b o tng hoac
a co*st hoac khong pha a co*st.
Ne ch mot ham thanh ven a co*st, ta s dung
khuon dang 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 thay, co*st theo sau kha bao tham so cua ham.
Muc ch cua kha bao ham thanh ven a co*st e tranh
trng hp no b thay o b o tng go no. Xet 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@ cac ha'1 chu?e>n .o>i@ cac chu .eQ
naFng cao &+7
o$%seti?BZUU@N
cout KK o$%geti?@N
"etu"* UN
4
Chng trnh sau se khong ben dch b v ham seti?@
c kha bao a co*st. Neu nay co ngha a no khong
cho phep thay o o tng go no. Do ta co gang thay o
i nen chng trnh bao o. Ngc a, geti?@ khong thay o
ga tr cua i nen chng trnh ben dch bnh thng.
No kh ta muon mot hoac nheu thanh ven cua p
ma ham co*st co the thay o c tham ch ta khong
muon no thay o cac thanh khac. Ne am eu nay, ta
s dung #uta$le. Thanh ven co tnh chat #uta$le co the
c thay o b ham thanh ven 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
Chng trnh tren, i c mo ta nh a #uta$le, v vay
no co the c thay o b ham seti?@. Tuy nhen b
khong pha a #uta$le va setb?@ khong the thay o ga
tr cua no.
1.1-,. H>UX I=>U@= PZQC@ PBF>IZFQ
Ham thanh ven co the kha bao a volatile. Ne ch
mot ham thanh ven a volatile ta s dung khuon dang
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 cap trong chng 12, mo kh ta co mot cau
t ch mot tham so, ta co the s dung o$?7@ hoac o$c7
e kh gan o tng. Nguyen nhan a do bat c kh
nao ta tao ra mot cau t mot tham so, ta cung tao ra mot
chuyen o t keu cua tham so ve keu cua p. Tuy
nhen cung co nhng tnh huong ta khong muon thc hen
vec chuyen o t ong nay. Ne thc hen eu nay, C++
nh ngha mot t khoa e70licit. Ne heu tac ong cua
no, xet v du sau:
Ji*clude Kiost"ea#L
usi*g *a#es0ace stdN
Gh*ng 2. KhoFng gian teFn@ cac ha'1 chu?e>n .o>i@ cac 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 tren, cau t #6class ch nhan mot tham so do
o cau enh #6class o$ cYN t ong chuyen sang go
cau t #6class v tham so a 4.
Neu ta khong muon thc hen chuyen o nay, ta co
the s dung t khoa e70licit. T khoa e70licit ch ap
dung cho cau t. Cau t c v t khoa e70licit ch
c s dung kh kh gan bang cach s dung cu phap
thong thng. No khong thc th chuyen o t ong. V
du, bang cach kha bao cau t #6class a e70licit,
chuyen o t ong se khong thc hen:
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 cau enh #6class o$?Y@N se thc hen c va
cau enh #6class o$ c YN se bao o.
&76 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
1.1-+. !DT ]Od@A IDU _=BW> >\X
Tuy C++ a ngon ng toan den va manh nhng no
van co mot va tnh huong ac bet ma no khong the
quan c. Ne phu hp v nhng tnh huong nay, C++
cung mot c che cho phep ta chen cac ma hp ng mo
uc, c che nay go a "trap door". S dung cau enh as# ta
co the nhung ma hp ng trc tep vao trong chng trnh
cua mnh. Ma hp ng nay ben dch ma khong co s
thay o nao va no se tr thanh mot phan cua ma
chng trnh ta em xuat hen as#.
Dang tong quat cua cau enh nay nh sau:
as#?to0-codet@N
Trong o o0-code a ch th cua ngon ng a,,e1bl?.
Trong mot so trnh ben dch cung cho phep vet 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 cau enh hp e trong ngon 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 chay tren he eu hanh DOS, chng trnh snh ra
Gh*ng 2. KhoFng gian teFn@ cac ha'1 chu?e>n .o>i@ cac chu .eQ
naFng cao &71
mot ngat 5 no go ham n ra man hnh.
1.1-4. C=l JBE \Dd FZQC@ _QRI
Trong C++, ta co the ch ro mot ham c en ket
nh the nao trong chng trnh. Ngam nh, ham c en
ket nh a mot ham cua C++. Tuy nhen, bang cach s
dung ch ro en ket, ta co the ch ro mot ham c
en ket theo mot keu ngon ng khac. Dang tong quat
nh sau:
e7te"* tla*guaget 2u*ctio*-0"otot60e
OU ay, la*guage nh ngha mot ngon ng mong
muon. Tat ca cac trnh ben dch ho tr ha cach en ket
C va C++. No kh trnh ben dch cung cho phep ta ch ro
en ket cho Wortran, Sa,cal, hoac !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 nheu hn mot ham ta th em s
dung cau enh 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
Vao ra tren mang a s dung mang cac k t nh a
mot thet b vao, ra hoac ca ha. Thao tac vao ra tren
mang gong nh thc hen tren uong. Cac uong en ket
mang cac k t thng c thay the nh a uong cha" .
Ne s vao ra tren mang trong chng trnh ta pha them
Kst"st"ea#L.
1.139.1. (ac !< 1a$o ra treDn /ang
Cac p ist"st"ea#, ost"st"ea#, st"st"ea# c s
dung e tao ra cac uong vao, ra va vao/ra tng ng. Lp
ist"st"ea# c ke tha t p ist"ea#, ost"st"ea# c
ke tha t ost"st"ea# va st"st"ea# ke tha t p
iost"ea#. Do o cac p vao ra tren mang c ke tha
gan tep p ios.
1.139.2. &ao /ot !uoNng ra treDn /ang
Ne thc hen thao tac ra d eu tren mang, ta pha
en ket mang en uong bang cach s dung cau t sau:
ost"st"ea# ost"?cha" $u2X st"ea#si8e si8eX o0e*#ode
#odeciosiiout@N
OU ay, $u2 a mot con tro en mang c s dung
e tap hp cac k t e vet en uong ost". Kch thc
cua mang c g en tham so si8e. Ngam nh, uong
c m dang thong thng, nhng ta co the ket hp
them nheu tuy chon khac e tao ra #ode theo yeu cau. V
du ta co the them tuy chon iosiia00 e thet ap uong
c bo sung thong tn vao cuo.
Kh a m mot uong ra tren mang, tat ca cac thao
tac ra eu at d eu vao mang. Tuy nhen, cac d eu
khong vet ra ngoa ben cua mang. Neu vet ra ben
Gh*ng 2. KhoFng gian teFn@ cac ha'1 chu?e>n .o>i@ cac chu .eQ
naFng cao &7
mang, trnh ben dch se bao 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 IO% 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
Ket qua xuat hen tren man hnh nh sau:
C a""a6-$ased IO% BU2Y U7WY ZZ%TRZ
Nh rang, outs a mot uong thong thng, ch khac
nhng uong trc ay o a thet b en ket v uong
nay a mang k t.
Ng ap trnh pha ket thuc mang bang mot k heu
rong bang ham e*ds. Ta co the xac nh co bao nheu k
t c vet ra mang bang cach s dung ham 0cou*t?@.
No co khuon dang nh sau:
st"ea#si8e 0cou*t? @N
So k t tra ve bao gom ca k t rong neu nh no
ton ta.
Chng trnh sau se e cap ham 0cou*t?@, no cho bet
outs cha 18 k t ke ca k t rong.
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' ;ung /ang +e* nha< ;'O !ieu
Ne en ket uong nhap d eu v mang, ta dung
cau t:
ist"st"ea# ist"?co*st cha" $u2@N
OU ay, $u2 a con tro mang c s dung nh a
nguon k t mo an nhap. No dung trong mang c tro
b $u2 pha a chuo ket thuc rong, tuy nhen k t rong
nay khong bao g c oc t mang. 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@ cac ha'1 chu?e>n .o>i@ cac 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
Neu muon ch mot phan cua chuo c nhap, ta
dung cau t sau:
ist"st"ea# ist"?co*st cha" $u2X st"ea#si8e si8e@N
OU ay ch co si8e phan t au ten c tro b
$u2 c s dung. Chuo khong can pha ket thuc rong
b v ga tr cua si8e a xac nh kch thc cua chuo.
Luong en ket v bo nh hoat ong gong nh c
en ket v thet b khac. V du sau e cap en van e
no dung cua chuo van ban co the c oc. Kh ket
thuc mang (gong nh ket thuc ;ile), i*s cho ga 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 /ang
Ne tao mot uong tren mang co the thc hen thao
tac vao/ra, ta s dung ham cau t st"st"ea#:
st"st"ea# iost"?cha" $u2X st"ea#si8e si8eX o0e*#ode #ode
c iosiii* iosiiout@N
OU ay, $u2 a con tro en mang chuo can thc hen
thao tac vao/ra, ga tr cua si8e cho bet kch thc cua
mang. Ga tr cua #ode cho bet uong hoat ong nh the
nao. Ne thet ap thao tac vao ra thong thng, #ode pha
a ga tr iosiii*osiiout. Ne nhap, mang pha ket thuc
b k t rong. 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
Chng trnh nay se vet BU 2U testi*g en mang va
sau o oc ngc a ben.
1.1+/. !DT ]Od@A X>T@A YBG@A
Trong v du trc, kh ta en ket mot uong en mang
Gh*ng 2. KhoFng gian teFn@ cac ha'1 chu?e>n .o>i@ cac chu .eQ
naFng cao &77
xuat d eu, mang va kch thc cua no pha c g
qua cau t ost"st"ea#. Phng phap nay rat tot neu nh ta
bet c so k t to a ma ta can xuat ra mang. Tuy
nhen kh khong bet so k t to a, ta s dung dang th
ha cua cau t ost"st"ea#:
ost"st"ea#?@N
Kh cau t nay c s dung, ost"st"ea# se tao va
duy tr mot mang cap phap ong, no se t ong phat
tren o da e phu hp v d eu au ra can u tr.
Ne truy cap en mang cap phat ong ta pha s dung
ham go a st"?@ nh sau:
cha" st"?@N
Ham nay tra ve mot con tro en mang, ta s dung
con tro nay e truy cap mang ong nh a mot chuo. Ta
khong the s dung mang nay e xuat d eu mot an
na tr kh ta am a thao tac kh tao. 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 IO 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 dung mang ong v p st"st"ea# e
&7- ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
thc hen ca ha thao tac vao, ra. Ta co the cho phep
mang ong co the c xuat d eu a hoac khong
bang cach go ham 2"ee8e?@. Dang tong quat nh sau:
void 2"ee8e?$ool actio* c t"ue@N
Neu actio*ct"ue, mang c phep, actio*c2alse mang
khong c phep xuat d eu a.
1.1+1. !DT ]Od@A P>UB J> @=a H=>C@ IJQC@ FOB?@A
]Dd> P>UB X>T@A
Nh rang vao ra nh phan tren mang co tat ca cac
chc nang va kha nang gong nh vao ra thong thng.
Do o mang en ket v uong vao/ra tren mang cung
cha cac thong tn nh phan. Kh oc mot thong tn nh
phan, ta can s dung ham eo2?@ e xac nh kh nao ket
thuc mang. V du sau the cach oc mang nh phan hoac
van ban s dung ham 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 nay, ga tr c nh dang b lBl2l9` a
Gh*ng 2. KhoFng gian teFn@ cac ha'1 chu?e>n .o>i@ cac chu .eQ
naFng cao &79
nhng ga tr khong n ra man hnh. Ne gh d eu tren
mang nh phan, ta s dung ham 0uts?@. Neu ta oc d
eu nh phan, ta pha s dung ham "ead?@. Ne vet d
eu nh phan ta s dung ham !"ite?@.
1.1+2. TBWX I>cI \Dd _=>WS @=>O AZDE> C P>U C99
Nhn chung, C++ chuan a tap cha C chuan va tat ca
cac chng trnh C cung a C++. Tuy nhen, co mot t s
khac bet. Nhng khac bet quan trong nhat c tom tat
ay:
Trong C++, ben cuc bo c kha bao mo n trong
ben trong kho enh. Trong C, no pha c kha bao au
kho, trc mo cau enh.
Trong C++, void trong danh sach tham so a tuy chon.
Rat nheu ng ap trnh C++ chen void trong danh sach
tham so e thong bao a ham khong co tham so, nhng
ve mat k thuat th khong can thet.
Trong C++, tat ca cac ham pha c kha bao
nguyen mau. Neu nay a tuy chon trong C. Tuy nhen, theo
knh nghem ap trnh ta nen kha bao nguyen mau trong cac
chng trnh C.
Trong C, mot k t t ong nang enh thanh mot so
nguyen, trong C++ th khong.
Trong C, ta co the kha bao ben toan cuc nheu an,
trong C++ th khong c phep.
Trong C, nh danh ch co 31 k t a co ngha. Trong C+
+ tat ca cac t eu co ngha. Tuy nhen trong thc te,
nh danh khong nen at qua da.
&-6 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
Trong C, mac du t s dung nhng ta co the go ham
#ai*?@ trong chng trnh. Trong C++ th khong c phep.
Trong C, ta khong the ay a ch cua mot ben
"egiste", trong C++ th c phep.
Trong C, neu khong ch ra keu d eu trong kha bao
ben, keu ngam nh a keu so nguyen (i*t), trong C++ th
khong c.
Gh*ng 2&. (ii thieQu th* 3ie"n chua>n cac l= 1a\u &-1
C=DL@A 2%. GZLWZ I=ZQGO I=D PZQG@
S=O>M@ S>WS FLWH X>fO
Th ven chuan cac p mau (Standard Tempate Lbrary-
STL) a mot at trng m va quan trong nhat c bo sung
vao trong nhng nam gan ay. S bo sung cua STL a
mot trong nhng ket qua chnh nhan c trong suot th
gan chuan hoa C++. No cung cap p va ham mau c
s dung cho cau truc d eu va ga thuat, v du no ho
tr vector, danh sach, hang va ngan xep. B v STL
c xay dng t p mau, nen thuat toan va cau truc
d eu c ap dung tren mo keu d eu.
STL a mot c che phan mem phc tap s dung
nheu at trng phc tap nhat cua C++. Ne heu va s
dung c STL, ta pha heu ay u ngon ng C++ bao
gom con tro, tham cheu va mau.
Muc ch cua chng nay a g theu tong quan STL
bao gom thet ke vat , to chc, cau tao va k thuat
aph trnh can e s dung no. B v STL a mot th ven
rat n nen ta khong the g theu tat ca cac at trng
cua no chng nay.
Chng nay cung mo ta mot p m quan trong nhat
cua C++, o a p strng. Lp strng nh ngha keu d
eu chuo cho phep ta am vec v keu k t gong nh a
nhng keu d eu khac: s dung toan t. Lp strng quan
he gan gu v STL.
1.1+3. TBM@A NO>@ PQ? !TL
Mac dau th ven cac p mau a rat n va cu
&-2 ShaQn ZZ. MgoFn ng*N la"= trLnh GOO
phap hn phc tap, no rat de s dung neu ta heu no
c xay dng nh the nao.
Ta nhan cua STL co ba o tng c ban: contaners,
agorthms va terators. Nhng o tng nay am vec v
nhau e cung cap mot ga phap cho cac van e ap trnh.
1.153.1. (ontaine,r
Contaner a o tng u tr o tng khac va mot
va keu khac. V du p vector nh ngha mang ong,
deque tao mot hang so thc va st cung cap mot danh
sach tuyen tnh. Nhng thung cha nay go a thung cha
chuo (sequence contaner) b v trong thuat ng STL, chuo
a mot danh sach tuyen tnh. STL cung nh ngha mot
thung cha ket hp (assocatve contaner) cho phep tm kem
heu qua cac ga tr da vao khoa. V du map u tr mot
cap khoa/ga tr va cho phep ga tr c tm kem thong
qua khoa.
Mo p contaner nh ngha mot tap cac ham co
the ap dung tren thung cha. V du mot danh sach bao
gom cac ham nsert, deete va merge. Mot p stack bao
gom cac ham pop va push.
1.153.2. b!gorith/,
Agorthm ong va tro nh a mot thung cha. No cung
cap phng ten ma ta co the thao tac tren no dung cua
thung cha. Cac phng ten o a bao gom kh tao, sap
xep, tm kem va chuyen o no dung cua thung cha.
1.153.3. Lterator
Iterator a mot con tro, no cung cap cho ta kha nang
quay tron thong suot no dung cua thung cha trong nheu
Gh*ng 2&. (ii thieQu th* 3ie"n chua>n cac l= 1a\u &-
cach. Co 5 keu terator:
Iterator Truy cap c phep
Random Access Lu tr va tm kem ga tr.
Cac phan t co the truy cap ngau
nhen.
Bdrectona Lu tr va tm kem ga tr. D chuyen
en trc va sau.
Forward Lu tr va tm kem ga tr. Ch d
chuyen en trc.
Input Tm kem nhng khong u tr ga
tr.
Ch d chuyen en trc.
Output Lu tr nhng khong tm kem, ch d
chuyen en trc.
Tong quat, mot bo ap co kha nang truy cap n
hn co the truy nhng n co kha nang nho hn. V du,
forward terator co the c s dung trong nput terator
Iterator c quan nh a con tro, ta co the tang
hoac gam no, ta co the ap dung toan t *. Bo ap c
kha bao s dung keu terator c nh ngha b rat
nheu thung cha
1.153.#. (ac tha$nh <haNn khac

Potrebbero piacerti anche