You are on page 1of 231

Trang | 1

NG NGC HONG THNH








LP TRNH HNG
I TNG



Ti liu hc tp
C
++

Theo di bn cp nht trn blog ca ti.

T r a n g | 2
C
+
+


PH LC
GII THIU .............................................................................................................7
MI TRNG PHT TRIN TCH HP IDE ................................................... 10
CHNG 1. C BN V C++ ............................................................................ 23
CHNG 2. BIN V CC KIU D LIU ..................................................... 26
T kha ................................................................................................................................ 26
Kiu d liu nguyn thy .............................................................................................. 27
Khai bo bin ..................................................................................................................... 28
Phm vi tc dng ca bin ............................................................................................ 29
Khi to gi tr cho bin ................................................................................................ 30
Khi to gi tr cho bin tnh static .......................................................................... 31
Gii thiu v xu k t .................................................................................................... 32
CHNG 3. HNG .............................................................................................. 34
Hng s nguyn ................................................................................................................. 34
Hng s thc c du chm ng ................................................................................ 34
Hng k t v hng xu k t ........................................................................................ 35
Hng logic ............................................................................................................................ 36
nh ngha mt hng #define ..................................................................................... 36
Khai bo hng const ........................................................................................................ 37
CHNG 4. TON T ....................................................................................... 38
Ton t gn ......................................................................................................................... 38
Ton t thc hin php ton s hc......................................................................... 39
Ton t gn hp nht ..................................................................................................... 40
Ton t tng v gim ...................................................................................................... 40
Ton t so snh ................................................................................................................. 41
Ton t logic ...................................................................................................................... 42
Ton t iu kin ............................................................................................................. 43
Ton t phn tch ............................................................................................................ 45

T r a n g | 3
C
+
+

Ton t dch bit ................................................................................................................. 45
Ton t chuyn i kiu d liu ................................................................................ 48
Cc ton t khc ............................................................................................................... 49
Th t u tin ca cc ton t ................................................................................... 49
CHNG 5. XUT NHP C BN .................................................................. 52
Xut d liu chun cout ................................................................................................. 52
Nhp d liu chun cin .................................................................................................. 53
Nhp d liu nh lp stringstream .......................................................................... 55
CHNG 6. CC CU TRC LNH IU KHIN ............................................ 58
Cu trc lnh c iu kin: if v else ........................................................................ 58
Cu trc lp ......................................................................................................................... 60
Cu trc la chn: switch ............................................................................................. 67
CHNG 7. HM ................................................................................................. 72
Khai bo v s dng hm .............................................................................................. 73
Phm vi tc dng ca bin ............................................................................................ 77
Hm khng tr v gi tr - Hm void. ....................................................................... 78
Tham bin v tham tr .................................................................................................... 79
Gi tr mc nh ca tham s hnh thc .................................................................. 82
Chng cht hm ................................................................................................................ 83
Hm ni tuyn ................................................................................................................... 84
Hm quy ......................................................................................................................... 85
CHNG 8. CC KIU D LIU C CU TRC .............................................. 88
Mng ...................................................................................................................................... 88
Xu k t ............................................................................................................................... 91
CHNG 9. CON TR ........................................................................................ 93
Ton t tham chiu & ..................................................................................................... 93
Ton t tham chiu ngc * ........................................................................................ 94
Khai bo bin con tr ...................................................................................................... 96
Con tr, mng v xu k t ............................................................................................ 98

T r a n g | 4
C
+
+

Cc php ton s hc trn con tr .......................................................................... 100
Con tr tr vo con tr ................................................................................................ 102
Con tr void ..................................................................................................................... 104
Con tr null ...................................................................................................................... 105
Con tr hm ..................................................................................................................... 105
CHNG 10. B NH NG .......................................................................... 107
Ton t new v new[] ................................................................................................. 107
Ton t delete v delete[] ......................................................................................... 109
CHNG 11. KIU D LIU STRUCT V CON TR STRUCT ................. 110
Struct .................................................................................................................................. 110
Con tr struct .................................................................................................................. 114
Struct lng nhau............................................................................................................. 115
Kch thc b nh ca struct ................................................................................... 115
CHNG 12. CC KIU D LIU KHC ...................................................... 117
Kiu d liu t nh ngha ......................................................................................... 117
Kiu d liu union thng ........................................................................................ 117
Kiu d liu union n danh ....................................................................................... 118
Kiu d liu enum ......................................................................................................... 118
CHNG 13. LP TRNH HNG I TNG ........................................ 120
Lch s hnh thnh ........................................................................................................ 120
Lp v i tng ........................................................................................................... 126
Hm to v hm hy .................................................................................................... 130
Chng cht hm to ...................................................................................................... 132
Hm to sao chp .......................................................................................................... 133
Tnh ng gi Encapsulation ................................................................................ 139
Con tr i tng .......................................................................................................... 140
Lp c khai bo nh t kha struct v union ............................................. 141
Con tr this ...................................................................................................................... 141
Thnh vin tnh T kha static ............................................................................ 143

T r a n g | 5
C
+
+

Hm bn v lp bn ..................................................................................................... 144
Chng cht ton t........................................................................................................ 147
Tnh k tha - Inheritance ......................................................................................... 153
Cc mc truy cp ........................................................................................................... 156
Tnh a k tha Multiple Inheritance ............................................................... 159
Tnh a hnh Polymorphism ................................................................................. 160
Tnh tru tng ha - Abstraction ........................................................................ 172
Hm mu Template Function ............................................................................... 173
Lp mu Template class ......................................................................................... 173
CHNG 14. NAMESPACE ............................................................................... 178
T kha namespace ..................................................................................................... 178
T kha using ................................................................................................................. 179
Phm vi ca namespace ............................................................................................. 180
Ti nh danh cho namespace ................................................................................. 181
Namespace std ............................................................................................................... 181
CHNG 15. NGOI L .................................................................................... 182
Mnh trycatch ....................................................................................................... 182
Mnh throw ............................................................................................................... 182
Th vin chun exception ......................................................................................... 183
CHNG 16. LM VIC VI FILE ................................................................... 186
M file ................................................................................................................................ 186
ng file ............................................................................................................................ 188
File vn bn ...................................................................................................................... 188
Kim tra trng thi ca cc c hiu ....................................................................... 189
Con tr get v put .......................................................................................................... 190
File nh phn .................................................................................................................... 192
B m v ng b ha .............................................................................................. 193
CHNG 17. CC LP TH VIN ................................................................. 194
1. Lp s phc complex .............................................................................................. 194

T r a n g | 6
C
+
+

2. Lp ngn xp stack .................................................................................................. 196
3. Lp hng i queue ................................................................................................. 197
3. Lp vector ................................................................................................................... 198
4. Lp string .................................................................................................................... 200
5. Lp list .......................................................................................................................... 203
6. Lp map ....................................................................................................................... 203
7. Lp set .......................................................................................................................... 204
8. Cc lp th vin nhp xut ................................................................................... 204
HNG DN THC HNH ............................................................................... 212
BI THC HNH S 1 ................................................................................................. 212
BI THC HNH S 2 ................................................................................................. 213
BI THC HNH S 3 ................................................................................................. 214
BI THC HNH S 4 ................................................................................................. 215
BI THC HNH S 5 ................................................................................................. 215
BI THC HNH S 6 ................................................................................................. 216
BI TP NNG CAO ............................................................................................ 218
BI TP LN ....................................................................................................... 225
DANH SCH HNH ............................................................................................... 228
TRA CU T KHA ............................................................................................ 229
TI LIU THAM KHO ....................................................................................... 230




T r a n g | 7
C
+
+

GII THIU

1. Cu trc ca gio trnh
Gio trnh c chia ra lm 17 chng v mi chng c chia lm
cc mc khc nhau. Cc chng c sp xp theo trnh t t lp trnh
hng th tc trn C++ n lp trnh hng i tng v cc lp th
vin c bn. c gi c th truy cp vo mc bt k t phn ph lc nm
u sch. Nhiu mc bao gm cc v d m t cch s dng. Ti
khuyn cc bn nn c cc v d ny v c th hiu mi on m
chng trnh trc khi c chng tip theo.
Mt cch thc tt tng lng kin thc nhn c l hy chnh
sa, b sung m lnh mi da trn v d mu, theo hng t duy ca
ca bn thn, t c th hiu mt cch y v ni dung m ta
tip thu c.
Sau khi c xong gio trnh, ti cn cung cp mt s bi tp thc hnh
ngh c gi nn th nghim. Hy gii nhng bi tp ny, chng s
rt hu ch v gip cc bn cng c li kin thc mn hc cng nh hiu
su sc hn phn l thuyt.
Mt iu na m c gi cn lu : hy c trang cui cng ca cun
sch, nm c mt s thut ng anh-vit tng ng c s dng
trong gio trnh ny. Ti cng c gng s dng tn gi ph hp nht vi
i a s cc gio trnh hin hnh. Tuy nhin, c gi cng nn nm cc
thut ng ting anh tng ng, c th tham kho thm cc ti liu
chuyn mn ting anh.
Khi vit gio trnh ny, ti khng th trnh khi sai st. Rt mong s
ng gp kin qu bu ca cc bn c gi cng nh cc bn ng
nghip. Mi s ng gp xin lin h theo a ch email:
dnhthanh@hueic.edu.vn. Hi vng vi cc kin ng gp ca cc bn,
gio trnh ny s ngy cng hon thin hn.
2. Mt vi ch v s tng thch ca C v C++
Chun ANSI-C++ c mt t chc tiu chun quc t thng nht a
ra. N c chnh thc ra mt vo thng 11 nm 1997 v duyt li vo

T r a n g | 8
C
+
+

nm 2003. Tuy nhin, ngn ng C++ tn ti trc mt thi gian
kh di (vo nm 1980). Trc , c rt nhiu trnh dch khng h tr
cc tnh nng mi bao gm c chun ANSI-C++. Gio trnh ny c xy
dng trn cc chng trnh dch hin i h tr y chun ANSI-C++.
Ti m bo rng cc v d s hot ng tt nu c gi s dng mt
trnh dch h tr ANSI-C++. C nhiu s chn la, c th l min ph hoc
cc phn mm thng mi. Trong gio trnh ny, ti gii thiu n cc
cc bn hai cng c bin dch C++ l GCC MinGW min ph v Visual
C++ - thng mi.
3. Trnh bin dch
Cc v d trong cun gio trnh ny c xy dng ch yu trn ch
console (mn hnh DOS). iu c ngha l n s dng ch vn
bn hin th cc kt qu. Mi trnh dch C++ u h tr ch dch
console. Vi mt mi trng pht trin tch hp IDE cho C++ min ph,
chng ta c th s dng chng trnh Codeblocks hoc Eclipse. Chng l
cc mi trng pht trin tch hp h tr son tho v bin dch C++.
Chng h tr mi trng GCC bin dch c C v C++. Vi CodeBlocks,
chng ta c th ti phn mm ti a ch bn di
1
. i vi Eclipse, n l
mt trnh son tho v bin dch ngn ng lp trnh chuyn nghip
nhng hon ton min ph (v ta c th cu hnh kt hp vi cc cng c
bin dch khc nhau to ra mi trng pht trin tch hp cho cc
ngn ng lp trnh khc nhau). Chng ta c th dng n son tho v
bin dch Java, PHP, JSP, Python v hin nhin l c C/C++. y l mt
d n m ngun m, tiu tn hng triu la ca IBM. ti v bn mi
nht cho n thi im ny (nm 2010) l Eclipse Helios, ta c th truy
cp n a ch bn di
2
. i vi Eclipse, chng ta nn s dng kt hp
vi trnh bin dch C++ l MinGW, n cng l mt d n m. Chng ta c
th ti v ti a ch bn di
3
. Vi Eclipse, th cng vic cu hnh ban
u tng i phc tp. Nhng n l mt trnh son tho tuyt vi. Ta
c th s dng n son tho nhiu ngn ng lp trnh bng cch ci
t thm plugin h tr. Nhiu nh pht trin s dng Eclipse lm nn
tng cho vic pht trin cc ng dng ca mnh: Embarcadero s dng

1
http://www.codeblocks.org/downloads
2
http://ftp.jaist.ac.jp/pub/eclipse/technology/epp/downloads/release/helios/R/eclipse-cpp-helios-
win32.zip
3
http://nchc.dl.sourceforge.net/project/mingw/Automated%20MinGW%20Installer/mingw-get-
inst/mingw-get-inst-20100831/mingw-get-inst-20100831.exe

T r a n g | 9
C
+
+

n pht trin JBuider, Adobe s dng n pht trin Flash Buider v
rt nhiu cc hng phn mm ni ting khc.
Nu l mt lp trnh vin Java, Eclipse l mt s la chn khng th
b qua. Nu pht trin Flash theo d n m ngun m t Adobe, Eclipse
cng l s la chn hon ho. Nu pht trin C/C++, vi cc trnh son
tho th Eclipse cng l s la chn khng ti. Vic s dng thnh tho
Eclipse s l mt li th cho chng ta khi tin hnh nghin cu Java, lp
trnh Web, Flex, Python sau ny.
Bn cnh , chng ti cng gii thiu mi trng pht trin tch hp
IDE Microsoft Visual Studio. y l trnh bin dch thng mi v l
trnh bin dch chuyn nghip v ni ting nht trn h iu hnh
Windows. Ta c th s dng pht trin cc ng dng trn nn NET
hoc cc ng dng Win32. Nu mun pht trin cc ng dng theo
hng ca Microsoft, ta nn s dng Visual Studio. Phin bn mi nht
n thi im ny l VS 2010. Nhng cn lu rng, khi nghin cu
Visual C++, hy chn la phin bn dnh cho Win32 m khng phi l
ng dng CLI (common language infrastructure) bi n c pht trin
trn nn NET. V Visual C++ for NET c mt s khc bit so vi Visual
C++ for Win32.


T r a n g | 10
C
+
+

MI TRNG PHT TRIN TCH HP IDE

1. CodeBlocks
Trc tin, chng ta s tm hiu cch to d n, bin dch mt tp tin C++
trn CodeBlocks. c gi cng cn lu rng, CodeBlocks t chc cng vic
theo cc d n. Chng ta c th bin dch tng tp tin cpp mt cch n l.
Tuy nhin, lm vic theo d n s gip ch cho chng ta rt nhiu khi lm
vic vi nhng tc v ln.
u tin chng ta khi ng codeblocks, sau vo File > New > Project.
Trong hp thoi hin ra, chng ta chn console application (Hnh 1).
V nhp Go, sau nhp Next. Trong hp thoi tip theo, ta chn C++ v
nhp Next.

Hnh 1 To mi d n trong CodeBlocks
Hp thoi yu cu in thng tin v d n s xut hin. Hy in tn d n,
v tr lu tr d n. Sau nhp Next. Cui cng nhp Finish.
Trong ca s qun l d n, ta nhp i chut vo tp main.cpp. Ni dung
son tho s c nhp vo trong tp tin ny.
Nu ta mun b sung cc tp tin khc hoc cc lp i tng, ta c th b
sung chng t menu File > New.

T r a n g | 11
C
+
+

Bin dch chng trnh:
+ Nhp vo Build > Build and Run.
+ Hoc nhp phm F9.
T ng nh dng m. Khi vit mt chng trnh C++ hay bt k mt
chng trnh trn mt ngn ng lp trnh no
khc, ta cn tun th quy phm nh dng m
ngun. C nhiu chun mc cho cc nh dng
m ngun: chun Hungary, chun lc ... D
rng, chng khng nh hng n vic bin dch
chng trnh, nhng chng gip ngi c c
th d hiu chng trnh ca chng ta hn. Nu
ta khng nm vng cc quy phm ny th c th
s dng chc nng nh dng m ngun t ng
ca CodeBlocks. Hy kch chut phi vo vng son tho, sau chn
Format this file (Astyle).
T ng khi to phn thn cc phng thc ca lp. h tr cho
vic son tho, CodeBlocks cng h tr chc nng khi to nhanh m
ngun. khi to nhanh phn khai bo thn phng thc ca lp t khai
bo prototype ca n, chng ta t tr chut vo sau khai bo lp (tc v tr
s chn khai bo thn phng thc), sau , kch chut phi, chn Insert >
All class methods without implementation.

Trong hp thoi hin ra, hy chn
nhng phng thc mun khi to
phn thn tng ng, sau , nhp
Ok.


Hnh 2 Khi to thn phng thc

T r a n g | 12
C
+
+

2. Eclipse Helios
Sau khi ti xong Eclipe Helios v my, hy tin hnh gii nn tp tin.
Chng trnh Eclipse khng yu cu chng ta phi ci t, nhng n c th
lm vic nu trn my tnh ci mt my o Java. ti v my o Java,
chng ta c th truy cp vo trang ch ca Sun (nay l Oracle) ti a ch
sau y
4
.
xy dng mt chng trnh C/C++ trn Eclipse, chng ta cn:
- Eclipse Helios for C/C++ (nu phin bn ti v l dnh cho Java, ta cn
phi ci t thm plugin h tr); hoc c th s dng mt n bn c hn
ca Eclipse nh Galileo, Europa.
- Cng c bin dch GCC MingW.
- My o Java JVM.
Cc bc cu hnh trn Eclipse Helios
Bc 1. Ci t my o Java.
Bc 2. Ci MinGW.
Bc 3. Gii nn Eclipse Helios, sau khi ng n (nhp vo tp tin
eclipse.exe). Thng thng, Eclipse s t ng cu hnh MinGW gip ta. Nu
khng, hy thc hin bc 4.
Bc 4. Vo menu Project > Properties. Trong hp thoi xut hin, hy
chn C/C++ Build > Settings.

Hnh 3 Cu hnh MinGW trong Eclipse Helios
Trong th Tool Settings, ta chn GCC Assembler > General. Sau , nhp vo
biu tng c du cng mu xanh. Hp thoi sau s hin ra:

4
http://javadl.sun.com/webapps/download/AutoDL?BundleId=41723

T r a n g | 13
C
+
+


Hnh 4 Chn ng dn n th mc bin ca MinGW
Ta tin hnh hy nhp tn ng dn n th mc bin ca MinGW (hoc
nhp vo nt File system duyt n th mc ny). Mc nh khi ci t,
th mc ny s l C:\MinGW\bin. Sau nhp Ok. Vy l cng vic cu hnh
hon tt.
Xy dng d n u tin trn Eclipse
Cng ging nh CodeBlocks, Eclipse cng t chc chng trnh theo d n.
to mi mt d n trong Eclipse, chng ta c ba cch:
- Vo File > New > C++ Project.
- Vo biu tng to mi d n trn thanh cng c, chn C++ Project.
- Kch chut phi vo ca s Project Explorer > chn New > C++ Project.
Tip n, hp thoi sau y s xut hin.
Trong hp thoi ny, nu chn mt
d n kh thi (executable), hy chn
executable. Ta cng c th chn th
vin dll (static library) Tng ng
vi d n kh thi, chng ta c th
chn Empty Project hoc Hello
World C++ Project. i vi Empty
Project, n s to mt d n trng.
Ngc li vi Hello World C++
Project, ta s nhn c mt file cpp
cha ni dung m chng ta s tho
lun trong chng tip theo.
Sau , hy nhp vo tn d n v
nhp Next (nu cha cu hnh
MinGW), hoc nhp Finish (nu hon tt vic cu hnh).
Hnh 5 - To mi d n

T r a n g | 14
C
+
+

To mi mt file ni dung trong Eclipse. Mt chng trnh trong C++
thng chia lm hai loi tp: .cpp v .h. Tp .cpp thng cha ni dung
chng trnh, tp .h thng cha cc khai bo.
T chc tp tin. Hy to mt th mc chung cha ton b ni dung sau
ny, ti tm gi th mc ny l th mc src. Trong th mc src, hy to hai
th mc, mt th mc cpps v mt th mc headers. Th mc cpps s cha
ton b tp .cpp, th mc headers s cha ton b tp .h. Tp Main.cpp
cha hm main s c t trong th mc src. Ngha l ta s c cu trc
tng t nh sau:
Hin nhin ta hon ton khng nht thit
phi thc hin theo nh cu trc th mc
ny. Tuy nhin iu ny s lm cho d n
ca ta tr nn sng sa hn rt nhiu.
Chng ta c th b sung thm cc th mc
ph khc, nhng nn tun th cu trc cy
ny (v d khi cn phn bit cc tp tin cpp
thnh nhiu loi khc nhau, th trong th
mc cpps, hy to thm cc th mc con
khc)
Bin dch mt d n
bin dch mt d n, hy nhp vo biu tng sau y trn thay cng c
ca Eclipse.

Hnh 7 - Bin dch mt d n
Chn Run As > Local C/C++ Application.
Mt s th thut gip son tho nhanh
src
cpps
headers
Main.cpp
Hnh 6 - Cu trc th mc ca mt d n

T r a n g | 15
C
+
+

Eclipse cha ng mt tp cc tin ch gip chng ta son tho nhanh hn,
t pht sinh li hn. Sau y, ti xin gii thiu mt vi tnh nng gip cc
chng ta son tho nhanh hn.
To mi mt lp
Vo New > Class. Hp thoi sau y s hin ra

Hnh 8 - Hp thoi to mi class
Trong hp thoi ny, cn lu : source folder th mc cha tp tin s to
mi (thng s c phn tch thnh tp .h v .cpp), namespace phm vi
tc dng ca n trong namespace c ch nh, class name tn ca lp s
to mi, base class tn ca lp cha m n s tha k (bm vo nt add
chn cc lp tn ti), constructor v destructor cho php khi to hm
to v hm hy. Chng ta s tm hiu nhng khi nim ny khi lm quen vi
lp trnh hng i tng.
To nhanh cc phng thc Getter v Setter
Nu khi khai bo mt lp, cng vi cc thuc tnh ca n, thay v s dng
hm to thit lp gi tr ban u, ta c th dng hm setter; hoc tip
nhn gi tr t cc thuc tnh, ta c th dng cc hm getter. Ti s gii
thiu chi tit hn v cc phng thc ny trong phn lp trnh hng i
tng. Trong phn ny, ti s hng dn cch to chng bng thao tc nhp
chut. Vo menu Source, chn Generate Getters and Setters. Trong hp

T r a n g | 16
C
+
+

thoi hin ra, hy chn cc thuc tnh cn to phng thc getter v setter,
sau nhp Ok.
Mt s phm tt khc
Phm tt Cng dng
Ctrl+Space Bt ch gi nhc lnh.
main Ctrl+Space Khi to nhanh hm main.
Ctrl+Shift+F nh dng nhanh m ngun.
Ctrl+/ Comment vng m c bi en, nu
vng bi en ch comment, th du
comment s b hy b.
Tab Dch ton b ni dung b bi en sang phi
mt tab.
Shift+Tab Dch ton b ni dung b bi en sang tri
mt tab.
Ctrl+1 Chnh sa nhanh ton b cc t ging vi
t ang c bi en. Sau khi chnh sa
xong, nhp Enter kt thc.
Ctrl+Shift+/ To mt khi comment cho vng vn bn
b bi en.
Ctrl+Shift+\ Hy b vng vn bn b comment bi khi
comment.
Trn y, ti gii thiu s qua hai chng trnh son tho min ph
lp trnh C/C++: CodeBlocks v Eclipse. Vi CodeBlocks, ch cn ti v ci
t. Mi trng h tr bin dch GCC c tch hp sn. Vi Eclipse, ta
phi thc hin cu hnh kt hp vi trnh bin dch GCC. Nu l ngi c
nhiu tri nghim v my tnh, th nn chn Eclipse bi n l chng trnh
son tho rt chuyn nghip. Nu l ngi mi tip xc my tnh, hy chn
CodeBlock v ci t n gin.
3. Visual Studio 2010 dnh cho Visual C++
Visual Studio 2010 l mt mi trng bin dch tch hp ca Microsoft. N
l trnh bin dch tt nht, hin i nht trn h iu hnh Windows. Chng
ta c th s dng n bin dch C++, C#, Visual Basic, J#... Ta s tm hiu
Visual Studio theo hng tip cn vi C++. Mt iu cn lu , vi phin
bn 2010 ny, Visual Studio c hai phin bn dnh cho C++: C++ for Net v
C++ for Win32. Chng ta ch tm hiu v tnh nng C++ for Win32. Trong ni
dung ca gio trnh ny, ta s xy dng cc ng dng Console trn nn

T r a n g | 17
C
+
+

Win32 m khng tho lun thm v Visual C++ for Net bi v n thuc mt
phm tr tng i khc so vi Visual C++ for Win32.
Khi ng Visual Studio 2010.
khi ng VS 2010, ta c th thc hin mt trong hai cch sau:
Nhp i chut vo biu tng VS 2010 trn nn Desktop.
Vo Start > All Programs > Microsoft Visual Studio 2010, chn biu
tng VS 2010.

Hnh 9 - Giao din tng th ca Visual Studio 2010
To mi d n trong VS 2010.
Cng nh Eclipse, VS cng qun l theo cc workspace v cc d n. Trong
VS, workspace c gi l Solution. Trong mi workspace c th cha
nhiu d n. Nu cha to mt d n no, th khi to mi mt d n,
workspace s t ng c to. to mi mt d n, ta vo File > New
Project (hoc t hp phm tt Ctrl+Shift+N).
Trong hp thoi xut hin, chng ta chn Win32 Console Application.

T r a n g | 18
C
+
+


Hnh 10 - To d n Win32 Console
Mc name: hy nhp tn d
n m cn to.
Mc Location: nhp vo nt
Browse chn v tr lu
tr. Mc nh, Visual Studio
s lu tr d n th mc
Documents.
Mc Solution name: to mt
th mc con trong th mc
d n, hay to trc tip
trong th mc d n.
Hp thoi Hnh 12 s hin ra.
Nhm Application Type
+ Windows application: to ng dng winform.
+ Console application: to ng dng chy trn DOS.
Hnh 11 - Win32 Application Wizard

T r a n g | 19
C
+
+

+ Dll: to th vin dll.
+ Static library: to th vin tnh.
Nhm Add common header file
+ Alt: to header t lp th vin Alt.
+ MFC: to header t lp th vin MFC.
Nhm Additional options
+ Empty project: to d n rng khng c tp tin.
+ Export symbols: xut bn cc biu tng.
+ Precompiled header: to tp tin tiu tin bin dch.
Hy chn Console Application v chn Empty Project. Sau , nhp Finish.
To cc tp tin trong d n.
Trong ca s Solution Explorer, hy kch chut phi v chn Add:
- Nu tp tin tn ti, hy chn Add Existing Items. Sau , chng ta duyt
n v tr tn ti tp tin.
- Nu tp tin cha tn ti, hy chn Add New Items. Trong ca s xut hin,
ty thuc vo tp tin m chng ta cn, hy chn loi tng ng. Thng
thng, trong d n ca C++, chng ta s dng hai tp tin l tiu .h v
thn chng trnh .cpp. Sau , hy nhp tn ca tp tin v nhp Ok. Tp tin
tiu .h thng cha cc khai bo prototype ca hm hoc lp. Ngoi ra,
n c th cha cc hm macro, cc khai bo hng v bin ton cc c s
dng trong ton b chng trnh. Tp tin .cpp thng cha phn thn ca
cc hm hoc lp. Khi lm vic vi cc d n trong C++, chng ta nn tch
chng trnh thnh nhiu phn v nn s dng cc tp tiu lm cho
chng trnh gn gng v d hiu hn.
Sau khi chn c tp tin cn to, hy nhp tn ca tp tin, sau nhp nt
Add. Tp tin mi s c b sung vo d n.

T r a n g | 20
C
+
+


Hnh 12 - B sung thm mt tp tin
- Add Class: b sung cc lp i tng cho d n. y, chng ta chn C++
class.

Hnh 13 - B sung thm lp i tng
Nhp Add. Ca s sau y s xut hin

T r a n g | 21
C
+
+


Hnh 14 - To lp bng Class Wizard
- Class name: tn ca lp.
- .h file: tn ca tiu lp cng l tn ca tp tin tiu .
- .cpp file: tn ca tp tin .cpp tng ng vi lp.
- Base class: nu lp mi to ra tha k t mt lp khc, hy nhp tn ca
lp c s vo y.
- Access: mc tha k ca lp ang to t lp c s.
- Virtual destructor: to mt phng thc hy o.
- Inline: to mt phng thc inline. Tuy chng ta c th s dng t kha
ny, nhng c ch lm vic ca Visual C++ l t ng b sung inline khi
bin dch nu phng thc c cho l ph hp s dng inline. iu
c ngha l chng ta khng cn dng n t kha ny.
Bin dch d n.
- bin dch v thc thi mt d n, chng ta nhp vo Debug > Start
Debugging (hoc Start without Debugging).
- bin dch ton b d n m khng thc thi d n, chng ta vo Build,
chn Build Solution.
Mt s phm tt trong Visual Studio 2010.

T r a n g | 22
C
+
+

- To vng comment (ch thch): bi en vng m cn to ch thch, nhn
t hp Ctrl+K, Ctrl+C.
- Hy b vng comment: bi en vng m comment, nhn t hp Ctrl+K,
Ctrl+U.
- nh dng m ngun: bi en vng m cn nh dng, nhn t hp Ctrl+K,
Ctrl+F.
- nh dng nhanh m ngun: bi en vng m lnh, nhn t hp Ctrl+K,
Ctrl+F.
- T ng hon tt m v gi nhc lnh: t hp Ctrl+Space.
Visual Studio 2010 khng h tr cc tnh nng mnh m cho vic khi to
nhanh m ngun. Nhng ta c th s dng tin ch Visual Assist. Phin bn
cho n thi im ny (nm 2010) l 10.6.
Xem biu lp.
quan st biu lp trong VS 2010, ta nhp chut phi vo tn d n
(trong ca s Solution Explorer), chn Show class diagram. Sau , chng
ta ko th cc lp i tng vo vng biu .

Hnh 15 - Xem biu lp

Chng 1. C bn v C++
T r a n g | 23
C
+
+

CHNG 1. C BN V C++

Cu trc ca mt chng trnh C++
Mt cch thc tt nht hc lp trnh l hy th vit mt chng
trnh u tin. Nu chng ta tng lm quen vi mt ngn ng lp trnh
no , th chc hn ai cng bit n v d kinh in ca mt ngn ng lp
trnh l chng trnh Hello, world !.
M chng trnh Kt qu
[1.] //my first program
[2.] #include <iostream>
[3.] using namespace std;
[4.] int main()
[5.] {
[6.] cout<<Hello, world !;
[7.] return 0;
[8.] }
Hello, world !
Gii thch v chng trnh:
[1.] Cc k t nm sau du // s khng c bin dch m n c hiu l
du comment (dng ch thch). Trong C++ cng nh C, vic ch thch
trn mt dng s c t sau du //. Nu mun to mt ch thch
nhiu dng, chng ta c th s dng du /* To ch thch y */
[2.] Dng ny bt u bng k t #include. Tip n l tn tp tin tiu
(cha cc th vin). Th vin iostream c t trong du <>. N cha
cc hm xut nhp c bn. Hm ny l mt phn ca namespace std.
[3.] Trong C++, cc thnh phn ca th vin chun c khai bo trong
namespace. y l namespace std. c th truy xut n cc thnh
phn ca n, chng ta m t n bng t kha using. Trong th vin
chun ca C++, i tng cout c t chc trong namespace std.
[4.] Bt k mt chng trnh C++ no cng phi c mt hm main thc
thi chng trnh. Mt hm s c khai bo theo cu trc trn.
T kha int m t kiu d liu m hm tr v l integer. Chng ta cn
lu rng, trong chng trnh C th ta c th ty khai bo l void hoc
int, nhng trong C++ th bt buc phi khai bo l int. Vy int hay void
Chng 1. C bn v C++
T r a n g | 24
C
+
+

trong trng hp ny c thc s quan trng ? Chng ta nn lun khai
bo hm main c kiu d liu tr v l kiu int. S d nh vy l v khi
hm main tr v kiu int th theo quy c, nu chng trnh c li, n s
tr v mt m int khc 0 v ngc li, nu chng trnh khng c li, n
s tr v m int 0. Li y l li chng trnh lin quan n qu trnh
bin dch, ch khng phi l li lin quan n c php. Chng ta s nhn
thy m m n tr v trong dng thng bo cui cng khi bin dch:
process returned 0 (0x0).
Tn hm l main. Tip theo l cp du ngoc n dng cha tham s
nh km. Thng thng mt chng trnh ng dng s cha hai tham
s trong hm main l int argc v char* args[]. Cc tham s ny gi l
tham s dng lnh. Tip theo l du {}. Bn trong cp du ny l chng
trnh chnh.
[5.] Du m khi.
[6.] i tng cout (c l C-out) l chun dng xut d liu ra mn
hnh. Chng ta cn lu hm printf vn hot ng tt trong trng hp
ny. Nu dng hm printf th ta khng cn khai bo th vin iostream v
namespace std trn. Khi s dng i tng cout, chng ta cng c th
b qua dng lnh [3.] v thay vo ta s vit std::cout. Khi s dng i
tng cout, chng ta c thm mt cch thc xung dng thay v dng
\n, l endl. i tng cout thng i vi ton t xut <<. Chng ta c
th s dng nhiu ton t ny khi mun xut nhiu phn t ring bit:
cout<<string1<<string2<<.<<endl.
[7.] Cu lnh return dng tr v gi tr ca hm main. Nu hm c tr
v gi tr, th cn return mt gi tr no cng kiu d liu tr v vi
hm. Nu hm l void, th khng cn return.
[8.] Du ng khi tng ng vi m khi [5].
Ch :
Cng nh C, C++ l ngn ng phn bit ch hoa v ch thng.
Kt thc mt dng lnh trong C++ bao gi cng phi c du ;
Mt du ngoc n (), du ngoc nhn {} bao gi cng song hnh. iu
c ngha nu dng du m th phi c du ng tng ng. Du
ngoc n thng dng sau tn hm, v bn trong n l tham s hnh
thc hoc trong cc lnh c cu trc. Du ngoc nhn thng dng
quy nh phm vi ca mt khi lnh (scope). Mt cch thc gip chng
ta chuyn nghip hn khi lp trnh, l sau du m, ta nn s dng tip
Chng 1. C bn v C++
T r a n g | 25
C
+
+

du ng (thng thng cc trnh son tho s h tr mt cch t
ng). Sau hy nhp ni dung cn thit vo bn trong cp du ny.
iu s trnh khi s nhm ln khi chng trnh c qu nhiu du
ng m.
nhn bit c phm vi nh hng ca cc khi lnh hy s dng
phm tab to ra s li lm khi vit m chng trnh. Nh trong v d
trn, i tng cout v hm return s nhy vo mt tab so vi du khi
lnh tng ng. ng bao gi tit kim s dng phm tab v phm
enter. Nu s dng hp l, chng trnh s rt sng sa v d c.
Bi tp 1.
1. Hy vit chng trnh in ra dng ch Chao ban, ban co khoe khong.
2. Hy vit chng trnh in ra hai dng ch trn hai dng phn bit
Vietnam v Hoa ky.
3. Hy vit chng trnh in ra tam gic u vi cc nh l cc du *.
*
* *

Chng 2. Bin v Cc kiu d liu
T r a n g | 26
C
+
+

CHNG 2. BIN V CC KIU D LIU

Tng ng vi chng trnh Hello world, chng ta cn tho lun
mt vi chi tit. Chng ta c mt vi dng lnh, bin dch chng v sau
chy chng trnh thu kt qu. D nhin ta c th lm nhanh hn, tuy
nhin vic lp trnh khng ch n thun l in ra cc dng thng bo n
gin ln mn hnh. i xa hn, chng ta s vit mt chng trnh thc thi
mt tc v hu ch l gip chng ta tm hiu v khi nim bin.
Gi s c hai gi tr 5 v 2. Ta cn lu hai gi tr ny vo b nh. By
gi, nu ti mun cng thm 1 vo s th nht v lu li gi tr ny cho n,
tip theo ti mun ly hiu ca s th nht sau khi thay i vi s th hai.
Tin trnh x l cng vic trn c th c vit trn C++ nh sau:
Chng trnh
int a = 5;
int b = 2;
a = a + 1; // a=6
int result = a b; //result = 4
Bin c dng lu gi tr v n c th thay i c. Mt bin
s c quy nh bi mt kiu d liu no . Trong trng hp v d
ca chng ta, bin c kiu d liu l int. Kiu d liu thng c hai loi:
kiu d liu nguyn thy (primitive data type) v kiu d liu tham chiu
(reference data type). Chng ta s tho lun chi tit v chng trong phn
tip theo. Nhng ta c th hiu rng, mt kiu d liu n gin v c cu
trc trong C l kiu d liu nguyn thy. i vi kiu d liu tham chiu, ti
s gii thiu trong phn lp trnh hng i tng trong C++.
T kha
T kha trong C++ c th c mt hoc nhiu t. Nu t kha c nhiu
t, th gia cc t c du gch chn (_). K t trng v cc k t c bit
khng c php s dng trong t kha, tn hm, tn bin. Tn ca chng
khng c bt u bng k t s.
Chng 2. Bin v Cc kiu d liu
T r a n g | 27
C
+
+

Bng t kha chun trong C++
asm, auto, bool, break, case, catch, char, class, const, const_cast, continue,
default, delete, do, double, dynamic_cast, else, enum, explicit, export, extern,
false, float, for, friend, goto, if, inline, int ,long, mutable, namespace, new,
operator, private, protected, public, register, reinterpret_cast, return, short,
signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try,
typedef, typeid, typename, union, unsigned, using, virtual, void, volatile,
wchar_t, while
Bng t kha b sung trong C++
and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq
Kiu d liu nguyn thy
Khi lp trnh, chng ta lu cc bin trong b nh my tnh, nhng
my tnh cn phi bit loi d liu m chng ta mun lu. iu ny gip
bo m s lng nh cn thit lu d liu.
Trong my tnh, b nh c t chc theo cc byte. Mt byte l mt
n v o lng ti thiu m chng ta c th qun l trong C++. Mt byte c
th lu mt bin char. Thm vo , my tnh cng qun l nhng kiu d
liu phc tp hn. Bng sau y lit k cc kiu d liu v kch thc tng
ng.
Tn M t Kch thc Vng gi tr
char K t hoc s nguyn b 1 byte signed: -128 ->127
unsigned: 0 -> 255
short S nguyn ngn 2 byte signed: -2
15
-> 2
15
-1
unsigned: 0 -> 2
16
-1
int S nguyn 4 byte signed: -2
31
-> 2
31
-1
unsigned: 0 -> 2
32
-1
long S nguyn di 4 byte signed: -2
31
-> 2
31
-1
unsigned: 0 -> 2
32
-1
long long S nguyn cc di 8 byte signed: -2
63
-> 2
63
-1
unsigned: 0 -> 2
64
-1
bool Gi tr logic true/false 1 byte true v false
float S thp phn 4 byte 7 s thp phn
double S thp phn chm ng 8 byte 15 s thp phn
long S thp phn chm ng 8 byte 15 s thp phn
Chng 2. Bin v Cc kiu d liu
T r a n g | 28
C
+
+

double di
wchar_t K t di 2/4 byte
Kch thc trong b nh v min gi tr ca cc kiu d liu cn ph
thuc vo h thng v chng trnh dch tng ng. Gi tr c a ra
y l trn h thng Windows 32 bit v trnh dch GCC MinGW. Nhng i
vi h thng khc, cc gi tr ny c th thay i (v d kiu int v long trn
Windows 32 bit v 64 bit l 4 byte, nhng trn Linux 32 bit l 4 byte v trn
Linux 64 bit l 8 byte).
Khai bo bin
Nh v d trn, ta thy rng, mun s dng mt bin trong C++, ta
cn khai bo bin vi kiu d liu m ta mong mun. Cu trc khai bo
<Tn kiu d liu> <Tn bin>;
V d
int a; //Khai bo bin a kiu nguyn
float mynumber; //Khai bo bin mynumber kiu float
bool istrue; //Khai bo bin istrue kiu bool
long num1, num2, num3; //Khai bo ba bin num1, num2, num3 cng kiu
long
Ch :
Nu khi khai bo bin thuc cc kiu nguyn m ta khng s dng khai bo
c du (signed) hoc khng du (unsigned), th chng trnh dch mc nh
s quy nh l kiu nguyn c du.
int mynum;
//tng ng signed int mynum;
i vi kiu char th c ngoi l. Chng ta nn khai bo tng minh l
signed char hoc unsigned char.
i vi signed int v unsigned int c th vit n gin l signed hoc
unsigned.
Chng 2. Bin v Cc kiu d liu
T r a n g | 29
C
+
+

Nu mun chc chn v kch thc ca kiu d liu m ta cn s dng, hy
s dng hm sizeof xc nh kch thc b nh ca kiu d liu. Hm
sizeof(tn bin) hoc sizeof(kiu d liu) tr v kiu d liu nguyn.
Chng trnh Kt qu
#include <iostream>
using namespace std;
int main()
{
int a;
cout<<sizeof(a);
//Hoc c th vit
cout<<sizeof(int);
}
4 (trn windows 32 bit)
Phm vi tc dng ca bin
Tt c cc bin m ti gii thiu y c s dng trong chng
trnh cn phi c khai bo vi kiu d liu c ch nh. Mt bin c
khai bo trong mt khi lnh no, th n ch c tc dng trong khi lnh .
Bin c khai bo theo kiu ny gi l bin cc b (hoc bin a phng).
Nu mt bin c khai bo ngoi tt c cc khi lnh (k c hm main) th
bin c tc dng trong ton b chng trnh v gi l bin ton cc.
Chng trnh
[1.] #include <iostream>
[2.] using namespace std;
[3.] int a;
[4.] char c;
[5.] unsigned int d;
[6.] int main()
[7.] {//Khi lnh 1
[8.] signed long m;
[9.] float n;
[10.] {//Khi lnh 2
Chng 2. Bin v Cc kiu d liu
T r a n g | 30
C
+
+

[11.] double x;
[12.] x = 1;
[13.] cout<<x;
[14.] }
[15.] }
Gii thch:
Cc bin khai bo cc dng [3.], [4.] v [5.] c khai bo ngoi mi
khi lnh, n c tc dng trong ton b chng trnh v n c gi l bin
ton cc (global variable). Cc bin c khai bo trong khi lnh 1 (tng
ng [8.] v [9.]) v khi lnh 2 (tng ng [11.] v [12.]) gi l bin cc b
(local variable), n c tc dng trong khi lnh trc tip cha n. C ngha
l bin x ch c tc dng trong khi lnh 2; bin m, n c tc dng trong khi
lnh 1.
Cc bin ton cc c th c s dng trong ton b chng trnh, n
c th c gi trong cc hm, trong hm chnh main. Cn bin cc b c
khai bo trong khi lnh no, th n ch c th c s dng trong khi lnh
.
Trong mt s tnh hung, bin c th c khai bo trong du ngoc
n (tnh hung ny thng gp khi nghin cu cc lnh c cu trc), th
bin ny cng gi l bin cc b
for (int a = 0; i<10; i++){
nhp ni dung.
}
Lc ny, bin s c tc dng trong khi lnh tng ng (khi lnh nm
trong vng lp for).
Khi to gi tr cho bin
Khi mt bin cc b c khai bo, gi tr mc nh ca n s cha
c to ra. V vy, mun s dng c bin, ta cn phi khi to gi tr
cho bin. C hai cch khi to gi tr ca bin trong C++.
C php V d
type tn_bin = gi_tr_khi_to; int a = 0;
Chng 2. Bin v Cc kiu d liu
T r a n g | 31
C
+
+

type tn_bin (gi_tr_khi_to); int a (0);
By gi, ta c th vit li on chng trnh tnh ton gi tr ca cc
bin trn, bng cch s dng gi tr khi to mc nh ny.
Khi to theo cch 1 Khi to theo cch 2
#include <iostream>
using namespace std;
int main()
{
int a = 5;
int b = 2;
a = a + 1; // a=6
int result = a b; //result = 4
cout<<result<<endl;
result 0;
}
#include <iostream>
using namespace std;
int main()
{
int a (5);
int b (2);
a = a + 1; // a=6
int result (a b); //result = 4
cout<<result<<endl;
result 0;
}
Bi tp 2.
1. Hy vit mt chng trnh tng ng, s dng c hai kiu khi to
trn.
2. Hy chn mt cch khi to ty , vit chng trnh tnh gi tr ca
biu thc delta = b*b-4*a*c, vi a, b, c ln lt nhn cc gi tr 1, 5, 3.

Khi to gi tr cho bin tnh static
Mt bin c khai bo bng t kha static th n ch khi to gi tr ng
mt ln khi bin c to ra. Thng thng nhng bin ny c t vo
trong mt tp tiu .h s dng cho ton b chng trnh. V d sau y
minh ha cho gi tr ca bin static s khng khi to ln th hai trong
vng lp.
Chng trnh Kt qu
Chng 2. Bin v Cc kiu d liu
T r a n g | 32
C
+
+

#include <iostream>

using namespace std;

int main()
{
for (int i=0; i<5; i++)
{
static int x = 2;
x++;
cout<<x<<endl;
}
}
3
4
5
6
7
Gii thch: bin x c khi to trong vng lp for, nu khng c t kha
static, th trong mi ln lp, bin ny s c khi to li v gi tr in ra s
lun l 3. Tuy nhin, trong trng hp ny, ta s dng t kha static, do ,
gi tr ca bin x ch c khi to mt ln duy nht. Trong nhng ln lp
tip theo, gi tr ca x vn c lu li. Kt qu ta nhn c nh trn.

Gii thiu v xu k t
Mt bin c th dng lu mt loi d liu khng phi s, nhng n
li cha nhiu k t (khng nh kiu char) m chng ta s gi n l kiu xu
k t.
Trong th vin ngn ng lp trnh C++, n cung cp cho chng ta kiu
xu nm trong lp string. Cn lu rng, biu din mt bin thuc kiu
xu, chng ta c th s dng khai bo mng k t, hoc con tr k t nh
trong ngn ng C, hoc s dng khai bo kiu string. Khi s dng kiu khai
bo tham chiu ca lp string, ta cn c khai bo tp tiu l string.
Khai bo nguyn thy Khai bo tham chiu
#include <iostream>
using namespace std;
int main()
{
#include <iostream>
#include <string>
using namespace std;
int main()
Chng 2. Bin v Cc kiu d liu
T r a n g | 33
C
+
+

char a[] = abc;
char* b = abc;
return 0;
}
{
string a = abc;
return 0;
}
Chng ta cn lu rng, d l mt bin thuc kiu d liu tham chiu
string, th ta vn c th s dng hai kiu khi to nh trn. iu ny ch c
th p dng cho kiu string m thi. Cc kiu d liu tham chiu khc
khng th s dng hai cch khi to ny.
bit thm thng tin v kiu string, cc bn nn tham kho thm thng
tin v lp string c cung cp trong mc 4 ca chng 17 trong cng gio
trnh ny.

Chng 3. Hng
T r a n g | 34
C
+
+

CHNG 3. HNG

Hng: l mt phn t c gi tr c nh. Gi tr ca n c khi to
ngay khi hng c to ra. Thng thng, ngi ta cng s dng cc ch
ci t tn cho hng. Tn hng khng cha cc k t t bit, k t trng
hay bt u bng s, khng c trng vi t kha. Trong C++, tn hng
thng c vit hoa ton b. Hng thng c chia ra lm: hng s
nguyn, hng s thc, hng k t, hng xu v hng logic.
Hng s nguyn
Hng s nguyn l cc hng c gi tr l s nguyn. Hng s nguyn
c th c biu din di dng thp phn, bt phn, hoc thp lc phn.
Nu hng s nguyn di dng thp phn th c gi tr nh s thp
phn bnh thng. Nu l hng s nguyn bt phn, th n bt u bng s 0
(v d 011). Nu l hng s nguyn thp lc phn, th n bt u bng 0x (v
d 0x1b). Cc quy tc chuyn i s qua li gia cc h c nghin cu
trong hc phn Nhp mn tin hc.
Nu hng s l s nguyn c du hoc khng du, c th c mt vi
cch khai bo tng ng.
Hng nguyn c du v khng du
75 //int
75u //unsigned int
75l //long
75ul //unsigned long
Cc tin t v hu t trong hai cch s dng trn c th vit thng hoc
vit hoa (0x12 hay 0X12 l nh nhau; hoc 75ul hay 75UL l nh nhau).
Hng s thc c du chm ng
Chng ta kho st s thc di dng s thp phn du chm ng
hoc di dng khoa hc (hay cn gi l dng ly tha dng E tng ng
vi ly tha 10). V d 314.159e-2 tng ng vi 3.14159 hay 6.02e23
tng ng vi 6.02*10
23

Chng 3. Hng
T r a n g | 35
C
+
+

Mt hng s thc mc nh l double. Nu mun ch nh kiu d liu
cho n, ta c th s dng c php tng t nh i vi hng s nguyn
(3.1415L tng ng long double, 3.1415F tng ng vi float).
Cc k t e, f, l c th biu din di dng ch hoa hoc ch thng.
Hng k t v hng xu k t
Hng k t c s dng trong du nhy n, cn hng xu k t
c s dng trong du nhy kp.
x Tn bin
x K t x
x Xu k t x
Trong hng xu k t, c th cha cc k t c bit nh k t xung
dng, t tab Sau y l mt vi k t c bit v ngha ca chng.
K hiu ngha
\n Xung dng
\r Di chuyn ton b k t sau du \r ln cc k t trc .
Nu s k t sau nhiu hn s k t trc du \r, th kt qu in
ra s l ton b k t nm sau. V d abc\r1234 -> s in ra
1234, nu abc\r12 -> s in ra 12c.
\t t tab
\v t tab dc
\b t backspace
\f t du form feed
\a To m thanh beep
\, \, \?,
\\
To cc k t , , ?, \
Mt hng xu k t c th cha ni dung trn nhiu dng. Khi ,
vit ni dung dng mi, th cui dng trc , ta b sung thm k t \.
Cc xu k t c th c ghp vi nhau nh vo k t trng.
V d
Hom nay toi di hoc\
Ngay mai toi o nha
Xu k t vit trn nhiu dng
Toi yeu lap trinh Xu k t ghp
Chng 3. Hng
T r a n g | 36
C
+
+

Khi s dng hng xu k t vi kiu d liu l wchar_t, ta cn thm
tin t L bn trc xu k t . V d LXau ki tu wchar_t.
Cc quy tc trn c th p dng cho bt k hng xu k t thuc kiu
d liu no (char*, wchar_t*, string hoc mng k t tng ng).
Hng logic
Hng logic c hai gi tr l true (ng) v false (sai). Mt biu thc
logic s c kiu d liu l bool. N ch c th nhn mt trong hai gi tr true
v false. Trong C, ta ch c th s dng kiu s nguyn (short, int, long)
quy nh gi tr ca biu thc logic: nu gi tr nhn c l 0 tng ng
vi gi tr sai; ngc li, nu gi tr nhn c l khc 0 tng ng vi gi
tr ng. Cch quy nh ny vn cn hot ng tt trn C++. Tuy nhin,
trong C++, ngi ta nh ngha hai hng s true v false v kiu d liu
bool. Hng s true tng ng vi gi tr 1 v hng s false tng ng vi
gi tr 0. Ta hon ton c th s dng gi tr true (hoc 1) v false (hoc 0).
nh ngha mt hng #define
Khi nh ngha mt tn gi cho hng, ta c th s dng n thng
xuyn m khng cn phi sp xp li cc bin chi phi b nh. nh
ngha mt hng, ta cn s dng t kha define.
C php V d
#define tn_hng gi_tr
#define PI 3.14
#define NewLine \n
Trong v d trn, ti nh ngha hai hng PI v Newline. Trong
chng trnh, ti ch cn gi n s dng, m khng cn triu gi n gi
tr c th ca n.
Chng trnh tnh din tch hnh trn Kt qu
#include <iostream>
using namespace std;
#define PI 3.14
int main()
3.14
Chng 3. Hng
T r a n g | 37
C
+
+

{
double r = 1;
double s;
s = PI*r*r;
cout<<s;
return 0;
}
Thc cht, #define khng phi l mt cu lnh trong C++, n ch l
mt nh hng tin x l (directive for the preprocessor). Cho nn, ta cn
lu rng, kt thc phn khai bo ny, khng c du chm phy (;).
Khai bo hng const
khai bo mt hng, ta s dng t kha const. Cu trc khai bo
nh sau:
C php V d
const kiu_d_liu tn_hng = gi_tr;
const int a = 10;
const char x = \t;

Trong v d trn, ta c th thy cch khai bo hng tng t nh khai
bo bin, ch c duy nht mt im khc bit l ta phi b sung t kha
const vo trc khai bo ny. Hng v bin cng tng t nhau. Chng ch
khc nhau mt im duy nht l gi tr ca hng khng th thay i, cn
bin th c th thay i.

Chng 4. Ton t
T r a n g | 38
C
+
+

CHNG 4. TON T

Chng ta lm quen vi bin v hng, by gi chng ta c th tnh
ton gi tr ca chng. Cc php ton thc thi trn cc bin hoc hng gi l
cc ton t. V khi , cc bin hoc hng gi l cc ton hng.

Ton t gn
Ton t gn dng gn gi tr cho mt bin. V d a = 5;
Cu lnh gn s thc hin gn gi tr bn phi cho bin bn tri. Ta cng
c th gn gi tr ca hai bin cho nhau. V d a = b;
Hy quan st v suy ngm on chng trnh sau:
Chng trnh
[1.] #include <iostream>
[2.] using namespace std;
[3.] int main()
[4.] {
[5.] int a, b;
[6.] a = 10;
[7.] b = 4;
[8.] a = b;
[9.] b = 7;
[10.] cout<<a=<<a<<, b=<<b<<endl;
[11.] return 0;
[12.] }
Gii thch:
Dng lnh [5.] khai bo hai bin nguyn a, b. Khi gi tr ca chng
cha c khi to. Dng lnh [6.] khi to gi tr cho bin a l 10, bin b
cha c kh to. Dng lnh [7.] khi to gi tr cho bin b l 4, bin a vn
khng thay i (10). Dng lnh [8.] thc hin vic gn gi tr ca bin b cho
bin a, khi b vn khng thay i; a nhn gi tr ca b, tc l 4. Dng lnh
Chng 4. Ton t
T r a n g | 39
C
+
+

[9.] gn gi tr ca bin b l 7, bin a khng thay i. Do , gi tr cui cng
ca a l 4, b l 7. Output ca chng trnh s l a=4, b=7.
Chng ta cn ch rng, ton t gn thc hin theo nguyn tc phi-
sang-tri. Ngha l lun ly gi tr v phi gn cho v tri. Khi , gi tr
ca bin v tri thay i, cn v phi khng thay i. Ton t gn c th
thc hin trong cc biu thc phc tp hn.
a = b + 2; Gi tr ca a bng gi tr ca b cng thm 2
a = a + 1; Tng gi tr ca a ln 1
a = b = c = 5; Gn ng thi nhiu gi tr. N tng ng vi tp
cc lnh sau:
c = 5;
b = c;
a = b;

Ton t thc hin php ton s hc
Ngn ng lp trnh C++ h tr cc ton t s hc sau:
Ton t ngha
+ Php cng
- Php tr
* Php nhn
/ Php chia (chia ly phn nguyn i vi hai s nguyn)
% Chia ly d (ch vi hai s nguyn)
Ch rng, php chia c th thc hin trn s nguyn hoc s thc.
Nu thc hin php chia trn hai s nguyn th y chnh l kt qu ca
php chia ly phn nguyn. Cn nu n thc hin trn hai s thc (hoc
mt s thc v mt s nguyn), th kt qu c thc hin trn php chia
bnh thng. Nh vy, theo mc nh, hai s nguyn (hoc thc) thc hin
php ton tng ng th n s tr v kt qu nguyn (hoc thc). Nu php
ton thc hin trn mt s nguyn v mt s thc, n s t ng chuyn
i v kiu cao hn (thnh s thc). Vy lm th no thc hin php chia
3 cho 2, nu ta mun nhn c kt qu l 1.5. Ta bit rng 3 v 2 l hai s
nguyn, nu ta thc hin php chia 3/2 th ta thu c s nguyn l kt
qu ca php chia ly phn nguyn 3/2, tc l 1. Mun thu c kt qu
1.5, ta cn chuyn i 3 v 2 v dng s thc bng mt trong cc cch sau:
Chng 4. Ton t
T r a n g | 40
C
+
+

Khai bo 3 v 2 l cc s thc (bng cch quy nh kiu d liu nh float
a = 3, float b = 2 hoc 3.0, 2.0).
Chuyn i kiu d liu (Xem thm phn ton t chuyn i kiu d
liu).
Ton t gn hp nht
Khi mun thay i gi tr ca mt bin, chng ta c th s dng cch
vit thng thng, nhng trong C++ n h tr cc ton t vit tt.
Ton t V d ngha Phm vi
+= a+=b a=a+b Php ton s hc
-= a-=b a=a-b Php ton s hc
*= a*=b a=a*b Php ton s hc
/= a/=b a=a/b Php ton s hc
%= a%=b a=a%b Php ton s hc
&= a&=b a=a&b Php ton bit
|= a|=b a=a|b Php ton bit
^= a^=b a=a^b Php ton bit
>>= a>>=b a=a>>b Php ton bit
<<= a<<=b a=a<<b Php ton bit
Ton t tng v gim
Mt cch vit thu gn hn na, l s dng ton t tng v gim.
Nu trong biu thc a+=b, vi b = 1 th ta c th vit thnh a++. Tng t,
nu a-=b, b = 1 th ta c th vit a--.
Chng ta cng lu rng, ton t ny c cht khc bit. N c th
nm trc hoc nm sau ton hng. C ngha l c th c a++ hoc ++a
(tng ng a-- hoc --a).
Php ton ngha
a++; Thc hin php ton trc, sau mi thc hin ton t.
++a; Thc hin ton t trc, sau mi thc hin php ton.
a--; Tng t a++;
--a; Tng t ++a;
V d Cch thc thi
int a = 1;

a = 1, b cha khi to

Chng 4. Ton t
T r a n g | 41
C
+
+

int b = 1;

a+=b++;



a+=++b;
a = 1, b = 1

Thc hin php ton a+=b trc,
sau mi thc hin php ton
b++. Tc l a=2, b=2.

Thc hin php ton ++b trc,
sau mi thc hin php ton
a+=b. Tc l b=2, a=3.
Ton t so snh
thc hin vic so snh gi tr ca hai bin hoc hai biu thc; ta c
th s dng ton t so snh. Gi tr ca php ton so snh tr v kiu bool.
Ton
t
Tn gi Gi tr biu thc a Ton t b
ng Sai
== Bng Nu a bng b Nu a khc b
!= Khc Nu a khc b Nu a bng b
> Ln hn Nu a ln hn b Nu a nh hn hoc
bng b
< B hn Nu a nh hn b Nu a ln hn hoc
bng b
>= Ln hn hoc
bng
Nu a ln hn hoc
bng b
Nu a nh hn b
<= B hn hoc bng Nu a nh hn hoc
bng b
Nu a ln hn b
V d Kt qu
#include <iostream>
using namespace std;
int main()
{
int a = 1;
Kt qu 1: 1
Kt qu 2: 0
Kt qu 3: 1
Chng 4. Ton t
T r a n g | 42
C
+
+

int b =2;
cout<<Kt qu 1:<<(a==a);
cout<<Kt qu 2:<< (a>=b);
cout<<Kt qu 3:<< (a<=b);
}
Ta cn ch trong v d ny, cng ging C, C++ chp nhn gi tr 0 v
1 quy nh cho kiu logic. Theo quy c: true tng ng vi gi tr 1
(hoc khc 0), false tng ng vi gi tr 0. Mc d C++ h tr kiu d liu
bool, nhng n vn dng s nguyn 0 v 1 biu din tnh ng sai. Ta c
th tm hiu true v false l hai hng s c nh ngha sn, tng ng
vi 1 v 0 (nh vo #define). Nu mong mun in ra gi tr l true/false, ta
cn s dng nh dng d liu cho i tng cout. Chi tit, hy tham kho
mc 8, chng 17 trong gio trnh ny.
Ch :
Hy s dng kiu d liu bool thay v dng kiu d liu int biu din
tnh ng sai. Khi s dng kiu bool, hy nh rng gi tr ng tng
ng vi true; gi tr sai tng ng vi false (ch chng c vit
thng).
Hy cn thn khi s dng ton t so snh bng. Hy ch rng ton t
so snh bng l ==, khc vi ton t gn =.
Ton t logic
Php ton a b Kt qu
Ton t ph
nh !
Php ton
mt ngi !a
true - false
false - true

Ton t hi
&&
Php ton
hai ngi
a&&b
true true true
true false false
false true false
false false false

Ton t tuyn
||
Php ton
hai ngi
a||b
true true true
true false true
false true true
false false false
Chng 4. Ton t
T r a n g | 43
C
+
+

V d Kt qu
#include <iostream>
using namespace std;
int main()
{
int a = true;
int b =false;
cout<<Kt qu 1:<<(a&&a);
cout<<Kt qu 2:<< (!a&&b);
cout<<Kt qu 3:<< !(a||b);
}
Kt qu 1: 1
Kt qu 2: 0
Kt qu 3: 0
Gii thch:
Kt qu 1 tng ng vi biu thc a&&a=a, ngha l true 1.
Kt qu 2 tng ng vi !a&&b. !a=false, false&&false=false 0.
Kt qu 3 tng ng vi !(a||b), a||b=true||false=true, !(a||b)=!true=false
0.
Bi tp 3.
Hy lp trnh kim tra tnh ng n ca nh lut De Morgan:
a. !(a||b)=!a&&!b
b. !(a&&b)=!a||!b

Ton t iu kin
Ton t iu kin c dng c php nh sau:
(bt_iu_kin)?(kt_qu_1):(kt_qu_2);
Gii thch: tr v gi tr kt_qu_1 nu bt_iu_kin l ng, ngc li,
nu bt_iu_kin l sai, th tr v gi tr kt_qu_2.
Chng trnh Kt qu
Chng 4. Ton t
T r a n g | 44
C
+
+

#include <iostream>
using namespace std;
int main()
{
int a = 1;
int b = 2;
int max = (a>b)?a:b;
cout<<Max l: <<max;
return 0;
}
Max l: 2
Gii thch: chng trnh trn tnh gi tr ln nht gia hai s a v b. Ton t
iu kin kim tra iu kin ca biu thc a>b, v a=1, b=2, nn gi tr ca
n l false. Chnh v vy, biu thc iu kin s nhn kt qu tng ng vi
kt qu 2, tc l b.
Ton t iu kin lun tr v mt gi tr c th. Nh trong v d trn, ta
thy nu biu thc a>b ng, th gi tr max nhn c l s a; ngc li l
s b. Tuy nhin, khng nht thit cn phi c mt gi tr xc nh cho ton
t iu kin. V d sau y s minh ha iu ny
Chng trnh Kt qu
#include <iostream>
using namespace std;
int main()
{
int a = 1;
int b = 2;
(a>b)?(cout<<a<< lon hon):(cout<<b<< lon hon);
return 0;
}
2 lon hon
Gii thch: trong v d minh ha ny, ton t iu kin khng tr v mt gi
tr c th no. N ch n thun kim tra iu kin, nu a>b ng, th in ra
cu a ln hn, ngc li s in ra cu b ln hn. Ta cn lu rng, khi cc
cu lnh nm trong cp du ngoc ca ton t iu kin, th kt thc cu
lnh khng bao gi c du chm phy (;).
Nu mun s dng mt tp cc cu lnh trong cp du ngoc ny, ta c th
s dng ton t phn tch c cp trong mc tip theo. V d sau y
s cho thy vic s dng tp cc cu lnh bn trong cp du ngoc ca ton
t iu kin.
Chng 4. Ton t
T r a n g | 45
C
+
+

Chng trnh Kt qu
#include <iostream>
using namespace std;
int main()
{
int a = 1;
int b = 2;
int c;
(a>b)?(c = a-b,cout<<|a-b|=<<c):( c = b-a,cout<<|a-b|=<<c);
return 0;
}
|a-b|=1
Gii thch: Trong v d ny, chng trnh s in ra gi tr tuyt i ca a-b.
Nu a>b, th gi tr tuyt i |a-b| = a-b; ngc li nu a<b, th gi tr tuyt
i |a-b| = b-a. Trong cp du ngoc n ca ton t iu kin, cu lnh gn
c=a-b (hoc c=b-a) v cout c phn tch bng du phy (,). Mt iu cn
lu , chng ta khng c php khai bo bin trong cp du ngoc n
ny. Vic khai bo bin trong du ngoc n, ch p dng duy nht cho cu
lnh lp for.
Ton t phn tch
Ton t ny k hiu l du phy. N dng phn tch hai hay nhiu
biu thc cha trong mt biu thc phc hp tng ng.
V d Kt qu

int a;
int b;
int c;
c = (a=1, b=2, a+b);
cout<<c;

3
Gii thch: trong biu thc phc hp, bn trong du ngoc n l cc biu
thc n c phn tch bng ton t phn tch. Trong mt dy cc ton
t phn tch, n s u tin thc hin t tri sang phi (xem thm phn
u tin ca ton t c trnh by trong mc sau ca chng ny), ngha l
a=1, sau b=2 v cui cng l c=a+b=1+2=3.
Ton t dch bit
Cc ton t ny c s dng tnh ton trn cc s nguyn bng
cch tnh ton trn cc bit.
Chng 4. Ton t
T r a n g | 46
C
+
+

Ton t Kt qu
~
Ton t ph nh bit. Cc bit 1 s chuyn thnh 0 v ngc li.
V d ~101=010.
&
Ton t hi bit. Hi ca hai bit 1 bng 1. Trong mi trng hp cn
li, ta nhn c 0.
V d.
1 0 1 1 (tng ng 11 trong h thp phn)
& 0 1 0 1 (tng ng vi 5 trong h thp phn)
0 0 0 1 (tng ng vi 1 trong h thp phn)
Ngha l 11&5=1.
|
Ton t tuyn bit. Tuyn ca hai bit 0 bng 0. Trong mi trng
hp cn li, ta nhn c 1.
V d.
1 0 1 1 (tng ng 11 trong h thp phn)
| 0 0 0 1 (tng ng vi 1 trong h thp phn)
1 0 1 1 (tng ng vi 11 trong h thp phn)
Ngha l 11|1=11.
^
Ton t tuyn loi bit. Tuyn loi ca hai bit khc nhau bng 1.
Trong mi trng hp cn li, ta nhn c 0.
V d.
1 0 1 1 (tng ng 11 trong h thp phn)
^ 0 0 0 1 (tng ng vi 1 trong h thp phn)
1 0 1 0 (tng ng vi 10 trong h thp phn)
Ngha l 11^1=10.
>>
Ton t dch bit sang phi. Dch chuyn ton b dy bit sang phi
theo s bit c ch nh. Nu l s dng, ta b sung cc bit 0 vo
u. Nu l s m, ta b sung cc s 1 vo u.
Chng 4. Ton t
T r a n g | 47
C
+
+

V d.
i vi s dng
0 1 0 1 1 (tng ng 11 trong h thp phn)
>>
1 dch sang phi 1 bit
0 0 1 0 1 (tng ng vi 5 trong h thp
phn)
Ngha l 11>>1=5.
i vi s m
1 1 1 0 1 1 (tng ng -11 trong h thp phn)
>>
2 dch sang phi 2 bit
1 1 1 1 1 0 (tng ng -3 trong h thp p n)
Ngha l -11>>2=-3.
Cc bn cng cn lu rng, trong cc biu din trn, nu h
thng c chn l 32 bit, th chng ta cn lp y s bit ny:
- Nu s dng th cc bit cn li s c b sung 0 vo pha trc.
- Nu s m th cc bit cn li s c b sung 1 vo pha trc.
Trong cc v d trn, phn dy bit trng tng ng vi bit du
1 tng ng vi v 0 tng ng vi +.
<<
Ton t dch bit sang tri. Dch chuyn ton b dy bit sang tri
theo s bit c ch nh.
V d.
i vi s dng
+ 0 0 1 0 1 1 (tng ng 11 trong h thp
phn)
<<
2 dch sang tri 2 bit
1 0 1 1 0 0 (tng ng 44 trong h thp
phn)
Ngha l 11<<2=44.
Chng 4. Ton t
T r a n g | 48
C
+
+

&=
|=
^=
>>=
<<=
Cc php ton gn hp nht trn bit.
Cc ton t hi bit, tuyn bit, tuyn loi bit v ph nh bit c tnh nh
sau: chng ta chuyn i cc s thp phn sang nh phn tng ng, sau
s dng cc php ton tng ng cho tng bit theo v tr ca n. V d nh
trn 2
10
=10
2
, 3
10
=11
2
v ta s thc hin cc php ton tng ng vi tng
bit. Bit th nht (t phi sang tri) l 0&1=1, bit th hai 1&1=1, nh vy kt
qu ca php ton 2&3 l 11
2
hay 3
10
. Tng t cho cc php ton cn li.
Nu hai s c di bit khc nhau, th ta ch vic b sung thm 0 s c
di bit ngn hn, sau thc hin cc php ton nh nu. Trong trng
hp ny, ta cn lu rng php ton tuyn loi s c chn tr l 1 nu hai
bit tng ng l khc nhau, nu ging nhau th tng ng l 0(1^1=0^0=0,
1^0=0^1=1). Cc php ton hi, tuyn v ph nh vn cn ng nh php
ton hi, tuyn v ph nh trn kiu d liu logic.
Cc ton t dch tri bit << v dch phi bit >> nu thc hin trc tip
trn s nguyn h thp phn, s c tnh nh sau: a<<b=a*2
b
v
a>>b=a/2
b
.
Ton t chuyn i kiu d liu
Ton t ny dng chuyn i mt bin hay hng thuc kiu d liu
ny sang kiu d liu khc. Gi s ta c bin int a = 3, int b = 2. Khi thc
hin php chia nhn c kt qu thc, ta ch cn vit nh sau:
(float)3/2. Hy lu rng s 3 y b chuyn thnh kiu thc, v vic
thc hin php chia mt s thc cho s nguyn s tr v kiu thc 1.5. Nu
ta vit 3/(float)2, kt qu cng tng t. Ngc li, nu vit (float)(3/2) th
kt qu li khc. S d nh vy l v, n s thc hin php chia nguyn 3/2
(kt qu l 1), sau n s chuyn gi tr 1 nguyn ny sang 1 thc. Do ,
gi tr thu c vn l 1, nhng thuc kiu s thc (tc l 1.0f).
Cch biu din s chuyn i mt bin thuc kiu d liu ny, sang
kiu khc ch c th thc hin nu kiu ca chng tng ng. Ta c th
chuyn s thnh s (sau ny khi hc v hng i tng, ta c th chuyn
Chng 4. Ton t
T r a n g | 49
C
+
+

gia cc i tng trong cng mt cy ph h). Ta khng th chuyn i t
s thnh xu, hay ngc li (bng cch thc hin php ton chuyn i
kiu). Ta c th chuyn i mt xu s thnh s v mt s thnh xu s
bng nhiu cch khc nhau, nhng vic s dng ton t chuyn i kiu l
khng c php. Khi chuyn i, ta s dng mt trong cc c php sau:
(kiu_d_liu)bin hoc (kiu_d_liu)(bin) hoc kiu_d_liu(bin).
Chng ta nn s dng kiu th 2 hoc 3 trnh cc nhm ln ng tic khi
biu thc phc tp.
Cc ton t khc
Trong phn lp trnh hng i tng, chng ta s lm quen thm
nhiu ton t khc. Theo trnh t trnh by trong cun gio trnh ny,
chng ta s cha tho lun thm v chng. Ta s tm hiu chi tit trong
phn hng i tng ca cun gio trnh ny.
Th t u tin ca cc ton t
Trong ton hc, chng ta bit rng khi tnh gi tr ca mt biu thc,
th lun c s u tin ca cc ton t nh: php nhn thc hin trc php
cng, php chia v nhn thc hin ng thi, u tin t tri sang phi
Trong cc ngn ng lp trnh ni chung cng nh C++ ni ring, cc ton t
cng c nhng u tin nht nh. Trong mt biu thc phc tp, ta cn
ch n u tin ca cc ton t, iu ny rt d gy ra sai st. Trong
bng sau y, ti xin a ra th t u tin ca cc ton t trong lp trnh
C++.
Mc u tin Ton t u tin cng loi
1 :: Tri-sang-phi
2 () [] . -> ++ -- (hu t) dynamic_cast
static_cast reinterpret_cast const_cast
typeid
Tri-sang-phi
3 ++ -- (tin t) ~ ! sizeof new delete Phi-sang-tri
* &
+ - (du dng m)
4 (type) (chuyn i kiu) Phi-sang-tri
5 .* ->* Tri-sang-phi
6 * / % Tri-sang-phi
7 + - (php ton cng, tr) Tri-sang-phi
8 << >> Tri-sang-phi
9 < > <= >= Tri-sang-phi
Chng 4. Ton t
T r a n g | 50
C
+
+

10 == != Tri-sang-phi
11 & Tri-sang-phi
12 ^ Tri-sang-phi
13 | Tri-sang-phi
14 && Tri-sang-phi
15 || Tri-sang-phi
16 ?: Phi-sang-tri
17 = *= /= %= += -= >>= <<= &= ^= |= Phi-sang-tri
18 , Tri-sang-phi
Cc ton t c thc hin theo mc u tin t trn xung. Nu cc ton
t cng mc, n s c thc hin theo u tin cng loi.
V d:
a = (b=0, c=0, b+c). Ton t gn = c u tin 17, cc ton t cng +
c u tin 7, ton t () c u tin 2 v ton t , c u tin 18.
Do , ton t () s c thc hin trc. By gi ta xt cc ton t
trong du (), ch rng cc biu thc b=0, c=0, b+c l cc biu thc ring
bit, chng c phn tch bi ton t phn tch (,). Theo th t u tin
ca ton t phy, n s thc hin t tri-sang-phi. Ngha l b=0, c=0 sau
l b+c. Cui cng n s thc hin ton t gn gi tr ca biu thc
phc hp bn phi cho bn tri. Kt qu l 0.
a = (1+2)*3/2++. Ton t gn ( u tin 17), ton t + ( u tin 7),
ton t * ( u tin 6), ton t / ( u tin 6), ton t ++ hu t (
u tin 2) v ton t () ( u tin 2). Ton t hu t ++ v ton t () s
thc hin trc. Theo u tin cng loi, n s thc thi t tri-sang-
phi. Nh vy, ton t () s c thc hin u tin. Ngha l ta nhn
c biu thc a = 3*3/2++. Tip theo, n thc hin ton t hu t ++,
tuy nhin ton t ny ch tng gi tr ca 2 ln 1 sau khi thc hin xong
cc php ton trong biu thc. n thi im ny, ta nhn c biu
thc a=3*3/2. Ton t * v / c cng u tin, n s c thc hin
theo th tr t tri sang phi, ngha l a=9/2=4. Kt qu 4.
Lu . Trong v d th hai, vic s dng php ton 2++ l khng hp l.
y, ch c tc dng minh ha trc quan. Cn 2 l mt hng s, ta khng th
thc hin php ton 2++ lm thay i gi tr ca hng. Trong C++, chng
ta cn thc hin php gn b = 2; sau l b++. Ngha l ta cn biu din
biu thc nh sau thu c mt kt qu chnh xc c th bo m thc
thi c trong C++.
Chng 4. Ton t
T r a n g | 51
C
+
+

a = (b=2, (1+2)*3/b++)
Bi tp 4.
Tnh ton cc biu thc sau, da vo u tin ca ton t, sau , vit
chng trnh trn C++ kim tra kt qu.
a. 2+2*4%3+ ++2;
b. 2++ + ++2*(3-- - --2)
c. 5++ - 3== --2-(4+2%3)
d. 5>>2^3*(1+2)


Chng 5. Xut Nhp c bn

T r a n g | 52
C
+
+

CHNG 5. XUT NHP C BN

n thi im ny, chng ta bit hai cch thc xut d liu ra
mn hnh nh vo vic s dng i tng cout v hm printf. Trong
chng ny, chng ta s tm hiu c th hn v cch xut-nhp d liu nh
vo thit b nhp d liu l bn phm, v thit b hin th d liu xut ra l
mn hnh my tnh. Trong th vin chun ca C++, cc hm xut nhp c
bn nm trong tp header l iostream.
i vi th vin ny ta cn lu mt s im. C hai lp th vin c
chc nng h tr cc hm xut nhp c bn l iostream v iostream.h.
V bn cht, cch thc s dng chng khng c nhiu s khc bit. Tuy
nhin vic s dng th vin iostream c nhiu u im hn hn so vi th
vin iostream.h. Th vin iostream.h ra i cch y qu lu (trn 15
nm) trong khi th vin iostream mi hn rt nhiu. Vic s dng mt th
vin mi, chun mc hn bao gi cng tt hn. Th vin iostream h tr c
kiu char ln kiu w_char. Th vin iostream c c t trong namespace
std, trong khi th vin iostream.h c khai bo ton cc. Vic khai bo
ton cc bao gi cng chim dng khng gian b nh ln hn. V vy, nu
mun thc hin vic nhp xut d liu c bn trong C++, ta nn s dng
th vin iostream thay v s dng iostream.h.
Tng qut ha, nu cc lp th vin c hai dng tn ti song song l .h
v khng c .h (string v string.h, new v new.h), th chng ta nn s dng
th vin khng c .h. Trong trng hp khng c dng tng ng, ta bt
buc phi s dng th vin .h (v d math.h).
Xut d liu chun cout
u tin, ta kho st vic xut d liu ra mn hnh nh i tng
cout. N c s dng kt hp vi ton t chn d liu << (k hiu ging
ton t dch bit tra i).
C php:
cout<<bin_1<<<<bin_n;
Trong , bin_1,,bin_n: l cc bin s. Chng c khi to gi
tr. Nu bin cha khi to gi tr, ta s nhn c mt li khi thc thi
chng trnh. Chng trnh dch s thng bo v vic s dng bin m
Chng 5. Xut Nhp c bn

T r a n g | 53
C
+
+

khng khi to gi tr cho n. Cc bin ny c th l bin thuc kiu d liu
nguyn thy hoc tham chiu. i vi cc bin l cc i tng th hin ca
cc lp, ta s tho lun mc chng cht ton t nhp xut trong chng
lp trnh hng i tng. Sau y l mt vi v d v vic s dng i
tng cout:
cout<<Hello, world !;//In cu Hello, world ! ra mn hnh
cout<<120;//In s 120 ra mn hnh
cout<<x;//In gi tr ca bin x ra mn hnh
i tng cout kt hp vi ton t << c th c ghp nhiu ln.
cout<<Chao ban<< ban may tuoi;
cout<<Chuc mung<<endl;
cout<<x<<+<<y<<=<<(x+y);
Nh trong v d trn, mun xung dng, ta s dng k hiu endl, hoc
ta c th s dng k hiu \n m ta lm quen trong chng trc. V mt
ng ngha, th khng c mt s khc nhau no trong hai cch vit ny. Khi
lm vic vi i tng cout, ta c mt s cch thc nh dng d liu c
cung cp mc 8 ca chng 17 cui gio trnh ny.
Nhp d liu chun cin
nhp d liu ta c th s dng hm scanf nh i vi C. Nhng
theo xu hng lp trnh C++ hin i, hy s dng i tng cin. N c
s dng kt hp vi ton t trch tch d liu >> (ging ton t dch bit
phi). Sau ton t ny, bt buc l mt bin lu d liu c tch ra.
C php:
cin>>bin_1>>>>bin_n;
Cc bin s bin_1,, bin_n cn c khai bo. Thng thng,
nhng bin ny cha c khi to gi tr. Sau y l mt vi v d v vic
s dng i tng cout:
int age;
cin>>age;
float f;
cin>>f;
string s;
cin>>s;
Ch rng kiu d liu ca bin c s dng trong i tng cin
ny. Nu c mt s vi phm no v kiu d liu (v d bin l int, nhng khi
Chng 5. Xut Nhp c bn

T r a n g | 54
C
+
+

nhp ta li nhp vo mt k t khng phi l s) th chng trnh dch s b
qua vic khi to gi tr cho bin . Chng trnh hon ton khng pht
sinh li (process returned 0).
Khi s dng i tng cout v cin, ta cn khai bo khng gian s
dng namespace l std. Hoc, c th vit ngn gn hn std::
Chng trnh 1 Chng trnh 2
#include <iostream>
using namespace std;
int main(){
cout<<Hello;
}
#include <iostream>
int main(){
std::cout<<Hello;
}
i tng cin v xu k t: trong v d trn, ti s dng i tng cin
tch mt xu k t v gn cho bin xu k t s. Khi s dng i tng cin
vi xu k t, cn lu mt im: i tng cin s dng vic trch tch nu
n c thy mt k t trng trong xu k t (c ngha, nu xu nhp vo
l Toi di hoc th n ch tch c xu Toi v gn cho bin s). khc
phc nhc im ny ca i tng cin, C++ cung cp cho chng ta mt
hm khc l hm getline, c chc nng tng t.
C php:
getline(chun_nhp_d_liu, tn_bin_xu)
Khi nhp xut d liu t bn phm v mn hnh, tham s
chun_nhp_xut_d_liu lun s dng l cin. Nu lm vic vi tp tin file,
th tham s ny s tng ng vi tn ca file. Chng ta s tm hiu trng
hp ny trong chng 16 ca gio trnh.
Chng trnh
#include <iostream>
#include <string>
using namespace std;
int main()
{
Chng 5. Xut Nhp c bn

T r a n g | 55
C
+
+

string s;
cout<<Nhap ten: ;
getline(cin, s);
cout<<Chao ban <<s;
return 0;
}
Nhp d liu nh lp stringstream
s dng lp stringstream, chng ta cn khai bo tp header l
<sstream>. Lp ny cho php mt i tng da trn c s ca xu c th
c chuyn i nh mt lung stream. Trong th vin sstream, ta c ba
lp i tng lung xu c bn: stringstream, istringstream v
ostringstream. Cc lung ny c th c s dng tch hoc chn xu,
n c bit hu dng khi chuyn mt xu thnh s v ngc li. V d, nu
mun tch mt s integer t mt xu 1201, ta c th vit nh sau:
string mystr = 1201;
int mynum;
stringstream(mystr)>>mynum;
y khng phi l cch thc duy nht gip ta chuyn i mt xu
thnh s. Trong th vin string, cung cp cho chng ta cc hm thc thi
cng vic nh hm atof (xu s thc thnh s thc), atoll (xu thnh s
nguyn di thnh s nguyn di),... Tuy nhin, cc hm ny ch yu lm vic
vi xu k t ca C, tc l char*.
V d sau y s cho thy cch s dng lp stringstream nhp d
liu t bn phm.
Chng trnh
#include<iostream>
#include<sstream>
using namespace std;
int main()
Chng 5. Xut Nhp c bn

T r a n g | 56
C
+
+

{
string mystr;
int mynum;
getline(cin,mystr);
stringstream(mystr)>>mynum;
cout<<mynum;
return 0;
}
Thay v trc tip trch lc s nguyn nhp vo, ta s dng hm getline
trch lc d liu nhp vo di dng xu k t. Sau , chng ta s dng
lp stringstream chuyn i xu thnh s. V d sau y cho php
chng ta nhp vo mt dy gi tr, sau in ra tng ca cc s va nhp. S
nhp vo c phn tch vi nhau bng du hai chm :.
Chng trnh Kt qu
#include <iostream>
#include <sstream>

using namespace std;

int main()
{
string temp, s;
getline(cin, s);
istringstream ss(s);
double sum = 0;
while (getline(ss, temp, ':') )
{
float a;
stringstream(temp)>>a;
sum+=a;
}
cout<<Sum = <<sum;
return 0;
}
1:2:3:4:5
Sum = 15

Chng 5. Xut Nhp c bn

T r a n g | 57
C
+
+

Gii thch: trong v d trn, hm getline c thm mt bin th (sau
ny, chng ta s gi chng l cc chng cht hm). N c tt c 4 dng bin
th. Phng php ny, thng c s dng khi d liu nhp vo qu
nhiu. Chng ta c th cho ngi dng nhp vo thnh mt xu, khi ta s
tin hnh x l nh lp istringstream ny.
c ci nhn c th hn v cc lp stringstream, istringstream,
ostringstream; hy tham kho thm thng tin trong phn tr gip ca
MSDN
5
(Microsoft Developer Network).

5
http://www.msdn.microsoft.com/en-us/visualc/default.aspx
Chng 6. Cc cu trc lnh iu khin
Trang | 58

CHNG 6. CC CU TRC LNH IU
KHIN

Mt chng trnh khi thc thi, n khng ch n thun l mt dy cc
cu lnh tun t. Trong qu trnh x l, n c th kim tra iu kin ri
thc thi on m, lp i lp li mt on m no Vi mc ch , C++
cung cp cho chng ta cc cu trc iu khin.
Vi cc cu trc iu khin m chng ta s tm hiu trong chng
ny, ta s cp n hai khi nim: cu lnh (mnh - statement) v khi
lnh (block).
Cu lnh: l mt lnh c kt thc bng du chm phy (;). N c th l
lnh n gin hoc lnh c cu trc. Cc lnh n gin nh nhp xut d
liu; cc khai bo bin, hng; lnh gn Cc lnh gn, xut nhpl cc lnh
n. Cc lnh iu kin, la chn, lp m chng ta tm hiu trong chng
ny l cc lnh c cu trc.
Khi lnh: l mt dy cc cu lnh. Trong C++, khi lnh c t trong
cp du {}.
Cu trc lnh c iu kin: if v else
T kha if thng c s dng khi mun thc thi mt on chng
trnh vi mt iu kin no . Cu trc ca cu lnh if trong trng hp
ny
C php:
if (biu_thc_iu_kin_ng)
{
Cc_lnh;
}

Gii thch: kim tra gi tr ca biu thc iu kin, nu ng th cc lnh
bn trong s c thc hin; ngc li, lnh s khng c thc hin.
V d
Chng 6. Cc cu trc lnh iu khin

T r a n g | 59
C
+
+

if (x>0)
cout<<x<< la so duong;
if((x>0)&&(y>0))
{
cout<<x<< la so duong<<endl;
cout<<y<< la so duong;
}
Nu c nhiu cu lnh chu s chi phi ca cu lnh if, th chng s
c t trong khi lnh.
Trong trng hp nu biu_thc_iu_kin sai, ta cn thc thi mt
mnh khc. Khi , ta s s dng thm t kha else.
C php:
if(biu_thc_iu_kin_ng)
{

}else
{

}
V d
if (x%2==0)
cout<<x<< la so chan;
else
cout<<x<< la so le;
Cu trc if (ln else) c th lng vo nhau. Khi , chng ta s c mt
cu trc lnh phc hp.
V d
if(x>0)
Chng 6. Cc cu trc lnh iu khin

T r a n g | 60
C
+
+

cout<<x<< la so duong;
else if(x<0)
cout<<x<< la so am;
else
cout<<x<< la so 0;
Bi tp 5.
1. Vit chng trnh gii phng trnh bc 2, vi cc h s nhp vo t
bn phm.
2. Vit chng trnh tnh gi tr ca hm s sau:
() =

,
(|()|) , >
(

+ )
()
, <

3. Vit chng trnh gii h phng trnh ba n y bng cng thc
nh thc Cramer.

Cu trc lp
Trong thc t, chng ta gp nhiu tnh hung lp i lp li. Vi mc ch
ny, ngn ng C++ cung cp cho chng ta cc cu trc lp tng ng.
1. Vng lp while
C php:
while (biu_thc_iu_kin_ng)
{
.
}
Gii thch: Nu biu_thc_iu_kin ng, cc lnh bn trong vng lp s
c thc hin cho n khi n nhn gi tr sai.
V d Kt qu
#include<iostream>
using namespace std;
Nhap n:5
5
Chng 6. Cc cu trc lnh iu khin

T r a n g | 61
C
+
+

int main()
{
int n;
cout<<Nhap n:;
cin>>n;
while (n>0){
cout<<n<<endl;
n--;
}
return 0;
}
4
3
2
1
Gii thch: u tin nhp vo gi tr cho bin n. N nhp vo y l 5. Vng
lp while kim tra iu kin n>0. iu kin ny ng, nn cc lnh trong
vng lp s c thc hin. N s in ra gi tr ca n l 5. Sau , gi tr ca n
gim i 1, tc l n = 4. Vng lp li tip tc thc hin, v n>0 cn ng. Qu
trnh ny c tip tc, cho n khi n=0. Khi , iu kin n>0 l sai. Do ,
vng lp s dng li. Gi tr in ra mn hnh l cc s t 5 gim n 1.
Lu : khi s dng vng lp while cn lu cc im sau y:
Vng lp phi c tnh dng. Ngha l biu_thc_iu_kin phi c trng
hp sai. Trong mt s tnh hung, ngi ta vn s dng vng lp v hn,
nhng cn c c ch thot khi vng lp khi cn thit.
Nu c nhiu lnh chu s chi phi ca while, th chng cn c t
trong du khi lnh.
2. Vng lp dowhile
C php:
do
{
.
}while (biu_thc_iu_kin_ng);
Chng 6. Cc cu trc lnh iu khin

T r a n g | 62
C
+
+

Gii thch: Thc hin cc lnh trong vng lp, sau kim tra
biu_thc_iu_kin. Nu biu_thc_iu_kin cn ng, th tip tc lp.
V d Kt qu
#include<iostream>
using namespace std;
int main(){
int n;
cout<<Nhap n:;
cin>>n;
do {
cout<<n<<endl;
n--;
}while(n>0);
return 0;
}
Nhap n:5
5
4
3
2
1
0
Gii thch: u tin nhp vo gi tr cho bin n. Gi tr n nhp vo y l 5.
Vng lp dowhile s thc thi cc lnh bn trong n. N s in ra gi tr ca
n l 5. Sau , gi tr ca n gim i 1, tc l n = 4. Vng lp kim tra gi tr
ca biu thc n>0. V biu thc ny ng, nn n tip tc lp. Qu trnh ny
c tip tc cho n khi n=0. Gi tr n=0 vn c in ra, sau khi kim tra n>0
khng cn ng na, vng lp kt thc. Khc vi vng lp while trn, n
s in ra gi tr t 5 gim n 0.
Lu : khi s dng vng lp dowhile cn lu cc im sau y:
Vng lp phi c tnh dng. Ngha l biu_thc_iu_kin phi c trng
hp sai. Trong mt s tnh hung, ngi ta vn s dng vng lp v hn,
nhng cn c c ch thot khi vng lp khi cn thit.
Nu c nhiu lnh chu s chi phi ca dowhile, th chng cn c t
trong du khi lnh.
Chng 6. Cc cu trc lnh iu khin

T r a n g | 63
C
+
+

Vng lp dowhile lun thc hin cc lnh bn trong n, t nht 1 ln.
3. Vng lp for
C php:
for (biu_thc_khi_to; biu_thc_gii_hn; biu_thc_tng_gim)
{
.
}
Gii thch: Thc hin vng lp, vi s vng lp t biu_thc_khi_to cho
n biu_thc_gii_hn theo mc tng l biu_thc_tng_gim.
V d Kt qu
#include<iostream>
using namespace std;
int main()
{
int n, i;
cout<<Nhap n:;
cin>>n;
for (i=0; i<=n;i++) {
cout<<i<<endl;
};
return 0;
}
Nhap n:5
0
1
2
3
4
5
Gii thch: u tin nhp vo gi tr cho bin n. Gi tr n nhp vo y l 5.
Vng lp for s thc thi cc lnh bn trong vi s vng lp l t 0 n 5,
theo bc nhy l 1 tng ng vi i++.
Lu : khi s dng vng lp for cn lu cc im sau y:
Chng 6. Cc cu trc lnh iu khin

T r a n g | 64
C
+
+

Cc tham s trong vng lp for c th khuyt mt hoc vi (thm ch l
tt c) tham s. Tuy nhin, du chm phy l lun bt buc. S bc lp
ca vng lp for s c tnh nh sau:
___ ___
___
+1
Nu c nhiu lnh chu s chi phi ca for, th chng cn c t trong
du khi lnh.
Ta c th thc hin vic khai bo bin trc tip bn trong du ngoc n
ca vng lp for.
V d Kt qu
#include<iostream>
using namespace std;
int main()
{
int n;
cout<<Nhap n:;
cin>>n;
for (int i=0; i<=n;i++) {
cout<<i<<endl;
};
return 0;
}
Nhap n:5
0
1
2
3
4
5
4. Cc cu lnh nhy
a. Cu lnh break
Lnh break dng thot ra khi vng lp. Thng thng, khi ta s
dng cc vng lp khng xc nh c s ln lp, trnh lp v hn,
ngi ta thng s dng cu lnh break thot khi vng lp.
Chng 6. Cc cu trc lnh iu khin

T r a n g | 65
C
+
+

V d Kt qu
#include<iostream>
using namespace std;
int main()
{
int n = 2;
for(;;){
cout<<n<<endl;
n--;
if (n<0) break;
}
return 0;
}
2
1
0
Gii thch: Gi tr khi to ca n = 2. Vng lp for s tin hnh in gi tr ca
n, sau , gim gi tr ca n i 1. Cu lnh iu kin bn trong for s kim
tra iu kin ca n. Nu n<0, th lnh break s c thc hin v vng lp b
hy.
b. Cu lnh continue
Cu lnh continue thng c dng trong cc vng lp. Khi lnh
continue c gi, bc lp hin ti s c b qua, v tin hnh bc lp
tip theo.
V d Kt qu
#include<iostream>
using namespace std;
int main()
{
for(int i=0;i<10;i++){
if (i%2!=0)
continue;
cout<<i<<endl;
}
return 0;
}
0
2
4
6
8
Chng 6. Cc cu trc lnh iu khin

T r a n g | 66
C
+
+

Gii thch: Vng lp for s thc thi cc lnh bn trong n. Bin i chy t 0
n 9, kim tra iu kin i c phi l s chn hay khng. Nu i l s l, th
cu lnh continue s c thc hin v bc lp hin ti s b b qua. Nu i
l s chn, th lnh continue s khng c gi v bc lp hin ti vn
c thc hin. Do , lnh cout ch c thc hin trong trng hp bin
i l chn. Nh vy, mi khi gi tr i l chn, n s in kt qu. Nu gi tr ca i
l l, th kt qu s khng c in ra.
c. Lnh goto
Lnh goto cho php to ra mt bc nhy n mt nhn c n nh
sn. Tn nhn s c t nh sau tn_nhn: v lnh goto s nhy n tn
nhn. Mt li khuyn cho chng ta l nn hn ch ti a vic s dng lnh
goto. Bi v lnh goto thng lm ph v cu trc ca lp trnh hin i.
Nhiu ngn ng lp trnh h nh C ra i sau C++ nh Java tuyt giao
hon ton vi cu lnh goto ny.
Chng trnh Kt qu
#include <iostream>
using namespace std;
int main()
{
int n = 5;
loop://Tn nhn
cout<<n<<endl;
n--;
if(n>0) goto loop;
return 0;
}
5
4
3
2
1
Gii thch: Gi tr khi to ca bin n l 5. Nhn c t tn l loop. Nhn
c th hiu nh mt v tr c nh du (bookmark). Chng trnh tin
hnh in gi tr ca bin n. Sau , gim gi tr ca n i. Cu lnh iu kin,
kim tra gi tr ca biu thc n>0, nu ng thi lnh goto c gi v n s
c chuyn n v tr c nh du l loop. Chng trnh li thc thi
thm ln na k t v tr loop . Nu n<=0, lnh goto khng c gi.
Chng trnh kt thc. Vic s dng cc cu lnh lp, hon ton c th thay
Chng 6. Cc cu trc lnh iu khin

T r a n g | 67
C
+
+

th cho lnh goto. Hy lun ghi nh: CH NN s dng goto khi thc s cn
thit.
d. Lnh exit
Lnh exit dng thot khi chng trnh v tr v mt m c ch
nh. M ch nh ny ty thuc vo h iu hnh, n c th s dng trong
chng trnh theo quy c nh sau: nu chng trnh kt thc bnh
thng, th m chng trnh l 0; nu c mt s c khng mong mun xy
ra, th m chng trnh l mt gi tr khc 0.
void exit(int m_ch_nh);
Nu tham s m_ch_nh khng c cp vo, tc l exit (khng c du
ngoc n), th n s tin hnh theo mc nh tc gi tr 0. Hm exit nm
trong th vin stdlib.h. y l mt hm tng i c nm trong th vin .h.
Ta ch c th s dng lnh exit nu khai bo th vin stdlib.h m khng c
th vin tng ng l stdlib.
Cu trc la chn: switch
C php:
switch(biu_thc){
case hng_1:
nhm_cc_lnh;
break;
case hng_2:
nhm_cc_lnh;
break;

default:
nhm_cc_lnh;
}
Chng 6. Cc cu trc lnh iu khin

T r a n g | 68
C
+
+

Gii thch: kim tra gi tr ca biu thc, nu gi tr ca biu thc ri vo
danh sch hng, th n s thc hin cc lnh trong tng trng hp case
tng ng (nu l hng_1 cc lnh trong trng hp case hng_1, .). Nu
biu thc khng thuc vo danh sch hng, th n s thc hin lnh trong
trng hp default.
Chng trnh Kt qu
#include <iostream>
using namespace std;
int main()
{
char n;
cout<<Ban la nam hay nu b/g:<<endl;
cin>>n;
switch(n)
{
case b:
cout<<Nam;
break;
case g:
cout<<Nu;
break;
default:
cout<<Khong xac dinh;
}
return 0;
}
Ban la nam hay nu b/g:b
Nam
Gii thch: chng trnh buc ngi dng nhp vo mt k t (b boy) hay
(g girl). Nu ngi dng nhp vo mt k t khc, chng trnh vn tnh
n trng hp ny. K t m ngi dng nhp vo c lu trong bin n.
Cu lnh switch s kim tra bin nhp vo c nm trong danh sch hng
hay khng (danh sch hng y l b v g). Nu c, th tng ng vi b
n s thc hin trng hp case b, nu l g n s thc hin trng hp
case g. Lnh break trong mi trng hp c tc dng l thot ra khi cu
lnh la chn (cng mang tnh lp), nu khng c lnh break, tt c cc
trng hp u c xt duyt v nu ri vo trng hp no th cc lnh
tng ng s c thc thi, ng thi lnh trng hp bn di n cng
Chng 6. Cc cu trc lnh iu khin

T r a n g | 69
C
+
+

c thc thi. Trong trng hp, k t nhp vo khng tng ng trong
danh sch hng, n s thc thi trng hp default. V default l trng hp
cui cng, nn n khng cn lnh break.
Ch :
Lnh switch ch c la chn s dng khi cn kim tra gi tr ca
mt biu thc c tng ng vi mt tp cc hng s no hay khng (s
tng ng y c th l thuc hoc khng thuc tng ng vi khi nim
trong tp hp). Cc hng_1, hng_2, c th l mt vng lin tc, hoc gin
on (nh cc s t 0..1, a..d,). Nhng nht thit cc gi tr tng ng
vi cc trng hp case phi l hng s (hoc khong hng).
int a = 1;
switch(a>0)
{
case true:
cout<<"Duong";
break;
case false:
cout<<"Am";
break;
default:
cout<<"Khong";
}
Lin tc
int a = 1;
switch(a)
{
case 1: case 2: case 3:
cout<<"Xuan";
break;
case 4: case 5: case 6:
cout<<"Ha";
break;
case 7: case 8: case 9:
cout<<"Thu";
break;
case 10: case 11: case 12:
cout<<"Dong";
break;
default:
cout<<"Khong phai thang cua nam";
Ri rc
Chng 6. Cc cu trc lnh iu khin

T r a n g | 70
C
+
+

}
Biu thc trong lnh switch nht thit khng phi l mt kiu c cu
trc (mng, xu,). V d sau y s pht sinh li khi bin dch, do biu thc
tng ng vi mt xu.
string s = abc;
switch(s)
{
case a:
case ab:
case abc:
default:
}
Error
Trong hu ht cc ngn ng lp trnh, i a s u khng cho php tham
s trong switch l mt xu (cng nh lnh case of trong h Pascal Delphi).
Tuy nhin, ngn ng C# vn h tr xu k t trong tham s ca switch d
n l mt dn xut ca C++.
Mt iu cn lu , v bn cht th cu lnh switch s tng ng vi mt
dy cc cu lnh if. Chng hon ton c th thay th cho nhau. Cng tng
t, cc cu lnh lp while, do..while v for cng c th thay th cho nhau
mt cch hon ton. C ngha l chng ta ch cn nm c c php ca mt
trong ba cu lnh lp ny l c th vn dng trong mi trng hp. Tuy
nhin, chng vn c s dng trong cc trng hp mang tnh c trng.
iu ny rt hu ch cho nhng ngi tng lm quen vi ngn ng lp
trnh h Pascal Delphi. Bng sau y tng hp cc cch s dng ca cc
lnh c cu trc thng dng.
Tn lnh Cch dng
ifelse Khi cn kim tra mt hoc mt vi iu kin mang
tnh cht logic.
switch Khi cn kim tra iu kin hoc tnh thuc vo ca
mt bin s/biu thc trong mt danh sch hng
tng ng.
for Lp c s vng lp xc nh
while Cn kim tra iu kin lp trc khi thc hin
lnh, lp khng xc nh s vng lp.
dowhile Kim tra iu kin lp sau khi thc hin lnh, lp
khng xc nh s vng lp.
break Cn thot khi vng lp.
Chng 6. Cc cu trc lnh iu khin

T r a n g | 71
C
+
+

continue B qua vng lp hin ti, thc thi bc lp tip
theo.
goto Nhy n mt nhn c ch inh. Nn trnh s
dng, ch s dng trong nhng trng hp thc s
cn thit.

Bi tp 6.
1. S dng cc cu trc lp for, while, dowhile, goto xy dng cc
chng trnh tnh tch phn sau (vi mi cu trc xy dng mi
chng trnh) bng phng php hnh ch nht (tri, phi hoc
trung ta).
()


2. La chn cu trc lnh ph hp, tnh gi tr ca chui hu hn sau
y

=

3. Tnh cc tng sau y
=

++

+

=
!

+
!

++
!


=

+
+

+ !
++
()

+!

=
!
+
+
!
+
++
( )!
+

=
!
+
!
++()
!

vi n, x nhp vo t bn phm. Yu cu xy dng hm.

Chng 7. Hm
Trang | 72

CHNG 7. HM

Hm l mt tp hp cc cu lnh, n c thc thi khi c gi t mt v
tr khc trong chng trnh. Hy quan st lc bn di y:

Trong lc ny, cc hm c vit trong cc th vin khc nhau.
Trong chng trnh chnh, chng ta c th gi cc hm trong cc th vin,
ln cc hm c khai bo trong chng trnh chnh.
Nh vo vic s dng hm, chng ta c th phn chia chng trnh
thnh cc modul nh. i lc, ngi ta gi cch phn chia chng trnh
Th vin 1
Hm 1
Hm 2
Hm 3

Th vin 2
Hm 1
Hm 2
Hm 3

Th vin n
Hm 1
Hm 2
Hm 3

Chng trnh chnh
Hm 1
Hm main{
Gi Hm 1 (Th vin 1);
Gi Hm 2 (Th vin 2);
Gi Hm 3 (Th vin n);
Gi Hm 1 (chng trnh chnh)

Hnh 16 S minh ha vic s dng hm
Chng 7. Hm

T r a n g | 73
C
+
+

thnh cc hm nh th ny l cch gii quyt bi ton theo phng php
chia tr. Cch phn chia ny c rt nhiu u im:
Lm cho chng trnh tr nn gn gng d c hn.
D ci bin chng trnh.
D kim tra theo cc modul.
l tng xy dng hm. Vy hm c khai bo v s dng nh th
no. Chng ta s tm hiu trong chng ny.
Khai bo v s dng hm
C php:
kiu_d_liu tn_hm(danh_sch_tham_s)
{
Thn hm;
}
Trong ,
o kiu_d_liu: l kiu d liu m hm tr v.
o tn_hm: l tn ca hm, do ngi lp trnh t. Tn hm khng c
cha k t c bit, khng c bt u bng s, khng cha k t trng,
khng trng vi t kha.
o danh_sch_tham_s: l danh sch cc tham s dng nh cc bin cc
b. Nu c nhiu tham s, th chng s c phn tch theo cc du
phy.
o Thn hm: l ni dung m ngi lp trnh xy dng nn. Nu hm tr v
kiu d liu khc void, ta cn s dng lnh return tr v bin cha
kt qu v c cng kiu d liu vi kiu d liu ca hm. Nu hm tr v
kiu d liu void th iu ny l khng cn thit.
V d Kt qu
#include <iostream>
using namespace std;
int add(int a, int b)
{
3
Chng 7. Hm

T r a n g | 74
C
+
+

return a+b;
}
int main()
{
cout<<add(1, 2);
return 0;
}
Gii thch: Mi chng trnh trong C++ lun bt u bi hm main. iu
c ngha l cc lnh trong hm main s c thc thi mt cch tun t. i
tng cout s in gi tr ca hm add(1,2). Khi gi n hm add, n s nh x
n hm add c khai bo trn, n ch to ra mt li gi hm n
hm c xy dng c tn tng ng (chng ta cn lu n iu ny
phn bit vi khi nim hm ni tuyn s c tm hiu trong cc mc
tip theo). Vi a, b l cc tham s hnh thc, chng s c thay th bng
cc gi tr c th l 1 v 2. Hm add ny s tr v gi tr l tng ca a v b
nh t kha return.
Cch khai bo hm trong v d trn c gi l khai bo trc tip. Chng ta
cng cn mt cch khai bo hm gin tip na, m ta thng gi l khai bo
hm prototype nh sau:
V d Kt qu
#include <iostream>
using namespace std;
int add(int a, int b);
int main()
{
cout<<add(1, 2);
return 0;
3
Chng 7. Hm

T r a n g | 75
C
+
+

}
int add(int a, int b)
{
return a+b;
}
Trong khai bo hm dng ny, cu trc khai bo hm khuyt phn thn
hm. Ch c khai bo phn tn ca hm theo c php chun. Ta c th t
hm xy dng hon chnh bt k v tr no. Cch khai bo hm prototype
c nhiu u im:
- Khng cn quan tm n th t khai bo hm. Nu khng s dng khai
bo prototype, th hm khai bo sau mi c php gi hm khai bo trc
n. iu ngc li l khng c php. Nhng i vi khai bo prototype
th ta hon ton khng cn quan tm n iu ny.
- Ta c th tch phn khai bo prototype v t n vo trong mt tp tin
mi, thng l tp tin tiu .h (vi tn gi ty vo ngi lp trnh quy
nh), phn thn hm li cha trong mt tp khc, thng l .cpp hoc
trong chnh tp cha chng trnh chnh. Cch lm ny gip chng trnh
sng sa hn rt nhiu. Trong cc d n lp trnh ln, ngi ta thng
phn tch theo dng ny. Chng ta s xt v d minh ha sau.
Trong v d minh ha ny, d n ca ti gm c hai tp: tieude.h cha
khai bo prototype v main.cpp cha thn hm v hm main.
i vi Codeblocks, hy thc hin theo cc bc sau:
- To mi mt d n C++ v lu li. Trong d n ny, mc nh Codeblocks
s to mt tp main.cpp.
- Vo New > File > chn C/C++ header. Sau , hy chn v tr lu tr tp
tiu (thng thng, ta nn to cc th mc khc nhau lu tp .h cng
nh tp .cpp nh ti trnh by trn).
i vi Eclipse, thc hin nh sau:
- Kch chut phi vo th mc cn t tp .h, chn New > Header File.
Chng 7. Hm

T r a n g | 76
C
+
+

- Kch chut phi vo th mc cn t tp .cpp, chn New > Source File.
i vi Visual Studio 2010, kch chut phi vo tn d n, chn Add New
Item. Sau chn header file .h.
Tp tieude.h Tp main.cpp
#ifndef TIEUDE_H_INCLUDED
#define TIEUDE_H_INCLUDED

int sum(int, int);
void showmsg(void);

#endif // TIEUDE_H_INCLUDED
#include <iostream>
#include "tieude.h"
using namespace std;
int main()
{
showmsg();
return 0;
}
void showmsg(){
cout<<sum(1, 3);
}
int sum(int a, int b){
return a+b;
}
Trong tp tieude.h, ta ch vic nhp cc khai bo prototype vo gia #define
v #endif. Trong tp main.cpp, ta cn b sung khai bo th vin #include
tieude.h. Ch rng, tn tp tiu nm trong du nhy kp , m khng
phi l du <>. Cc hm trong chng trnh chnh c th s dng m khng
cn quan tm n th t khai bo. Nh chng ta thy, cc hm khai bo sau
hm main (iu ny ch c th c php i vi khai bo prototype). Hm
showmsg khai bo trc hm sum nhng c th gi c hm sum. Th t
tiu ca hm trong tp tiu hon ton khng quan trng v n khng
nh hng vic s dng cc hm theo th t trc sau.
Lu :
Khi s dng khai bo prototype trn cc tp tin .h, ta cn lu , nu d
n c s dng namespace, v d std, ta ch c th s dng c php truy
cp std:: m khng c s dng using namespace std trong tp .h ny.
Nu tp .cpp v tp .h nm trong cng th mc, th phn #include trong
tp cpp c th vit tn tp tiu trong du . Nu chng khng nm
trong cng th mc, ta cn ch ng dn tng i cho n. V d tp
headers.h nm trong th mc headers v tp main.cpp nm trong th
mc cpps. Nu tp headers.h l tp tiu ca tp main.cpp, ta cn
Chng 7. Hm

T r a n g | 77
C
+
+

include n trong main.cpp. Gi s headers v cpps nm trong cng th
mc src. Khi , trong tp main.cpp, hy khai bo nh sau:
#include../headers/headers.h. Trong , du ../ dch li mt mc
trong cu trc cy th mc (dch li t th mc headers mt mc chnh
l th mc src), sau l headers/headers.h.
Phm vi tc dng ca bin
Nh ti gii thiu trn, bin ton cc l nhng bin c khai
bo ngoi tt c cc hm (hay khng bao trong bt k du {} no). Cc bin
ny c tc dng trong ton b chng trnh. Ta c th gi n trong hm
main, hay trong cc hm khc. Ngc li, nhng bin cn li gi l cc bin
cc b. Nhng bin cc b c khai bo trong phm vi no (c xc nh
nh du {}) th ch c tc dng trong phm vi m thi.
V d Gii thch
#include <iostream>
using namespace std;
int global;
int add(int a, int b)
{
local result = a + b;
return result;
}
int main()
{
int local1;
if(local1>0)
{
int local2;
- Bin global l bin ton cc, n
c tc dng trong ton b
chng trnh. Ta c th s dng
n trong hm main, hm add
- Bin local, local1, local2 l cc
bin cc b. Bin local c khai
bo trong hm add, n c phm
vi tc dng trong phm vi ca
hm ny. Bin cc b local1 c
khai bo trong hm main. N
cng ch c tc dng trong hm
main. Bin local2 c khai bo
trong phm vi tc dng ca cu
lnh if, n ch c tc dng trong
khi lnh ny. Nu ta gi bin
ny ngoi khi lnh ca if,
chng trnh dch s bo li.
Chng 7. Hm

T r a n g | 78
C
+
+

}
return 0;
}
Hm khng tr v gi tr - Hm void.
Nh chng ta thy trong cc v d trn, cc hm m chng ta s
dng l cc hm c gi tr tr v. i vi cc loi hm ny, hm tr v
mt gi tr no , ta s dng t kha return. Gi tr hm tr v phi c kiu
d liu cng loi vi kiu d liu m ta quy nh khi khai bo hm.
Chng ta cng bt gp tnh hung: nhiu lc hm m ta xy dng khng tr
v mt gi tr no, hoc tr v nhiu hn mt gi tr. Khi , chng ta s
dng khai bo hm void. i vi hm khng tr v gi tr, ta c th tham
kho v d sau. Cn i vi hm tr v nhiu hn mt gi tr, chng ta s
tho lun k hn trong phn tham bin.
V d Kt qu
#include<iostream>
using namespace std;
void showMsg()
{
cout<<Hello, world !;
}
int main()
{
showMsg();
return 0;
}
Hello, world !
Ch :
Chng 7. Hm

T r a n g | 79
C
+
+

V hm c kiu d liu tr v lun tr v mt gi tr c th, nn chng
ta c th s dng trc tip loi hm ny trong cc biu thc tnh ton (v d
a=b+sin(x)). iu ny l khng th i vi hm void.
Khi s dng cc hm khng c tham s hnh thc, nu ta gi hm theo
cch sau: tn_hm(); l cch gi hm ng. Nu gi hm theo cch:
tn_hm;, th d chng trnh dch khng bo li, nhng kt qu nhiu khi
khng chnh xc. V vy, chng ta nn gi hm theo cch u tin.
Tham bin v tham tr
Cho n thi im ny, cc hm m chng ta nghin cu u
truyn tham s theo tham tr. iu ny c ngha l khi gi hm, cc gi tr
t cc i s truyn vo trong hm s c sao chp sang cc tham s ny,
cc tham s ch ng vai tr l cc tham s hnh thc, chng khng lu
li gi tr cho cc i s truyn vo, m cc gi tr b cc lnh trong
hm lm thay i.
V d Gii thch
#include <iostream>
using namespace std;
void setNum(int a)
{
a = 0;
}
int main()
{
int b = 1;
setNum(b);
cout<<b;
return 0;
Nu tham s a trong hm setNum
c s dng nh trn (n thun
l int a) th n c quy nh l
truyn theo tham tr.
Khi truyn theo tham tr, gi tr ca
bin xut hin trong li gi hm ny,
s khng thay i sau khi thot ra
khi hm. iu ny c ngha l gi tr
ca bin b trc khi gi hm l 1,
sau khi gi hm, n vn nhn gi tr
l 1.
Chng 7. Hm

T r a n g | 80
C
+
+

}
Nu mun thay i gi tr ca bin khi truyn tham s trong hm, ta
s dng khai bo tham bin. Vi vic quy nh cc tham s truyn theo
tham bin, th khi khai bo ta ch b sung vo du & trc tn tham s .
Bng cch ny, cc bin l i s trong li gi hm s b lm thay i gi tr
sau khi kt thc li gi hm.
V d Gii thch
#include <iostream>
using namespace std;
void setNum(int &a)
{
a = 0;
}
int main()
{
int b = 1;
setNum(b);
cout<<b;
return 0;
}
Nu tham s a trong hm setNum
c s dng nh trn (int &a) th
n c quy nh l truyn theo
tham bin.
Khi truyn theo tham bin, gi tr
ca bin xut hin trong li gi hm
ny, s thay i sau khi thot ra khi
hm. iu ny c ngha l gi tr ca
bin b trc khi gi hm l 1, sau khi
gi hm, n vn nhn gi tr l 0.
Vic s dng khai bo hm theo tham bin c u im: ta bit rng,
mt hm ch c th tr v mt gi tr duy nht. Nu trng hp, ta mong
mun hm tr v nhiu gi tr, ta c th s dng hm void kt hp vi vic
truyn tham s cho hm theo tham bin. V d sau y s cho ta thy r
iu ny.
V d Kt qu
Chng 7. Hm

T r a n g | 81
C
+
+

#include <iostream>
using namespace std;
void swap(int &a, int &b)
{
int c = a;
a = b;
b = c;
}
int main()
{
int m = 1;
int n = 2;
swap(m, n);
cout<<m=<<m<<, n=<<n;
return 0;
}
m= 2, n=1
Gii thch: trong khai bo hm swap, tham s a v b c quy nh truyn
theo tham bin. Hm ny s thc hin vic hon i gi tr ca hai tham s
hnh thc a v b. Trong hm main, hai bin m, n c gi tr tng ng l 1 v
2. Khi gi hm swap, th hai bin ny s b hon i gi tr cho nhau. Do ,
kt qu in ra l m=2, n=1 (v tham s c truyn theo tham bin). Nh
vy, hm trong trng hp ny c th xem nh tr v hn mt gi tr mong
mun.
Lu : Cch truyn tham bin nh trn ch p dng cho C++, trong C ta ch
c th truyn tham bin nh con tr. Cch ny, vn cn hot ng tt trn
C++.
Chng 7. Hm

T r a n g | 82
C
+
+

V d Kt qu
#include <iostream>
using namespace std;
void swap(int *a, int *b)
{
int *c;//hoc n thun ch l c
*c = *a;
*a = *b;
*b = *c;
}
int main()
{
int m = 1;
int n = 2;
swap(&m, &n);
cout<<m=<<m<<, n=<<n;
return 0;
}
m= 2, n=1
Gi tr mc nh ca tham s hnh thc
Khi khai bo cc tham s hnh thc bn trong hm. Nu cc tham s
c gn gi tr mc nh, th khi gi hm, chng ta s c mt vi cch
gi tng ng vi s lng khc nhau ca cc tham s.
Chng trnh Kt qu
#include<iostream> 1
Chng 7. Hm

T r a n g | 83
C
+
+

using namespace std;
int add(int a, int b=0, int c=0)
{
return a+b+c;
}
int main()
{
cout<<add(1)<<endl;
cout<<add(1,2)<<endl;
cout<<add(1,2,3)<<endl;
return 0;
}
3
6
Gii thch: Hm add c khai bo vi ba tham s hnh thc. Tham s th
nht l khng th thiu, v n khng quy nh gi tr mc nh. Vi hai tham
s b, c cn li, ta c th khuyt. Trong trng hp khuyt, n s nhn
gi tr mc nh m ta gn cho n (c th y l 0). Do , khi gi hm
add(1), n s tng ng vi li gi hm add(1,0,0), tc gi tr l tng ca
1+0+0 bng 1. Tng t, khi gi hm add(1,2) th s tng ng vi
add(1,2,0) v cho kt qu l 3. Khi gi hm y ba tham s add(1,2,3) s
cho kt qu l 6.
Chng cht hm
Trong C++, hai hm khc nhau c th c cng tn, nhng danh sch
tham s ca chng phi khc nhau. Chng c bit n vi tn gi l
chng cht hm. Khi nim chng cht hm khc hon ton vi khi nim
qu ti hm m chng ta s tm hiu trong phn lp trnh hng i tng.
V d Kt qu
#include<iostream> 3
Chng 7. Hm

T r a n g | 84
C
+
+

#include<string>
using namespace std;
int add(int a, int b)
{
return a+b;
}
string add(string a, string b)
{
return a+b;
}
int main()
{
cout<<add(1,2)<<endl;
cout<<add(ab,cd)<<endl;
return 0;
}
abcd
Gii thch: Hai hm m ta xy dng c cng tn l add. Hm add u tin c
chc nng cng hai s. Hm add th hai c chc nng cng hai xu k t.
Kiu d liu tr v v tham s hnh thc ca chng cng khc nhau.
Hm ni tuyn
Ch nh inline trc khai bo mt hm s gip trnh bin dch nhn
bit hm ny c khai bo l ni tuyn. Khng c mt s thay i no
ng k gia hm bnh thng vi hm ni tuyn. Ch c mt im khc
bit duy nht l: vi hm ni tuyn, trnh bin dch s khi to mt thn
hm v chn n vo v tr c gi ti mi thi im m hm c gi,
thay v n ch chn li gi hm. Vic lm ny s ci thin ng k tc bin
dch chng trnh.
Chng 7. Hm

T r a n g | 85
C
+
+

inline type tn_hm(danh_sch_tham_s)
{
Thn hm;
}
Trong hu ht cc trnh bin dch hin i, vic quy nh hm l inline
l khng cn thit. Nu mt hm c th s dng khai bo inline, th chng
trnh dch s t ng ti u m ngun c th s dng n. Ngc li, nu
mt hm khng th s dng khai bo inline, th chng trnh dch s b qua
khai bo ny. Ch nh inline ch c tc dng nh hng cho chng trnh
dch.
Hm quy
Hm quy l nhng hm gi li chnh n. N hu dng trong cc
tc v nh sp xp (Quicksort) hoc tnh ton cc biu thc truy hi, gii
cc bi ton bng gii thut cng tn Hm quy tng ng vi khi
nim quy np trong ton hc. Ta c th s dng nh ngha giai tha theo
quy np ton hc nh sau
! =
, =
. ( )!, > 0

V chng ta c th xy dng hm quy tng ng vi php tnh giai tha
ny nh sau
V d Kt qu
#include <iostream>
using namespace std;
long Fac(long a)
{
if(a>0)
return a*Fac(a-1);
else
return 1;
}
6
Chng 7. Hm

T r a n g | 86
C
+
+

int main()
{
long num = 3;
cout<<Fac(num);
return 0;
}
Gii thch: hm Fac s tnh gi tr giai tha ca a theo cng thc tnh trn.
Nu a>0, th hm s tr v gi tr l a*Fac(a-1), hm Fac(a-1) li gi n
chnh n, v qu trnh ny c tip tc cho n khi gi tr a = 0. Vic s dng
li gi hm Fac(0) s cho kt qu tng ng l 1.
Lu : hm quy cng nh vng lp, n c th lp v hn, nu iu kin
dng khng c m bo.
Ta xt thm mt v d s dng quy. Tnh tng:

= 1 +2 ++
Vi cng thc ny, ta c th phn tch nh sau

=
1 +2 ++( 1)

1
+ =
1
+
T phn tch ny, ta d dng thy cng thc di dng truy hi:

=
1, = 1

1
+, > 1

V d Kt qu
#include <iostream>
using namespace std;
long S(int n)
{
if(n == 1)
6
Chng 7. Hm

T r a n g | 87
C
+
+

return 1;
else
return n+S(n-1);
}
int main()
{
int n = 3;
cout<<S(n);
return 0;
}

Bi tp 7.
1. Xy dng hm gii phng trnh

() = +
2. Xy dng hm tnh tng ca n s nguyn t u tin, vi n l s nhp
vo t bn phm.
3. Xy dng hm kim tra mt s c phi l s chnh phng hay khng.
S chnh phng l s nguyn c th biu din di dng ly tha
ca mt s nguyn.
4. Xy dng hm quy tnh tng ca n s nguyn dng t 0 n n.
5. Xy dng hm quy tnh xc nh s hng th n ca dy sau y

=

Vi, n nhp vo t bn phm.
6. Cho mt dy 5 s nguyn. Hy xy dng cc hm sau:
a. Hm nhp vo 5 s nguyn .
b. Hm sp xp 5 s nguyn theo th t tng dn.
c. Hm tnh tng ca 5 s nguyn .
d. Xut cc kt qu: cc s nguyn sau khi sp xp v tng ca chng.

Chng 8. Cc kiu d liu c cu trc
Trang | 88

CHNG 8. CC KIU D LIU C CU TRC

Mng
Mt mng l mt dy cc phn t c cng loi d liu c sp xp
lin tc trong b nh my tnh. Chng c th c truy cp theo ch s ca
n.
iu ny c u im l chng ta c th khai bo 5 bin gi tr kiu
nguyn nh vo khai bo mng, m khng cn phi khai bo ring bit.
0 1 2 3 4
Mng int

Khai bo mng
kiu_d_liu tn_mng[s_phn_t];

V d
string humans[5]; //Khai bo mng humans c 5 phn t xu k t
int numbers[10]; //Khai bo mng numbers c 5 phn t s nguyn

Cc ch s ca mng c nh th t t v tr 0. truy cp n
phn t mng, chng ta truy cp theo ch s nh sau humans[0],
humans[1], tng ng vi cc phn t th nht, tha hai trong mng
humans.
Khi to mng
Vic khi to gi tr cho mng c th s dng cp du {}.
string humans[5] = {Lan, Nam, Binh, Hoa, Hieu};
Khi truy cp vo mng theo ch s, th humans[0]=Lan,
humans[1]=Nam,
Chng 8. Cc kiu d liu c cu trc

T r a n g | 89
C
+
+

Mt cch thc na khi to gi tr cho mng, l ta s dng ton t
gn cho tng phn t. vt ton b mng ( nhp d liu cho mng hoc
xut d liu t mng hoc lm vic vi cc phn t ca mng), ta c th s
dng vng lp for.
int numbers[10];
for (int i=0; i<10; i++)
numbers[i]=i;

Mng nhiu chiu
Mng nhiu chiu c th c xem nh l mng ca mng. Mng hai
chiu l mng ca mng mt chiu, mng ba chiu l mng ca mng hai
chiu,
//Khai bo ma trn
int matrix[4][4];//Ma trn c 16 phn t (4 dng, 4 ct)

Chng ta c th minh ha khai bo ma trn trc quan nh sau:
0 1 2 3 4
0
1 matrix[1][3]
2
3
4
Tng t, ta c th to ra cc khai bo mng nhiu chiu khc. Vic
truy cp vo mng xt duyt cc phn t ca n, c th c thc hin
vi s cu lnh lp lng nhau chnh l s chiu ca mng: mng hai chiu
hai vng lp lng nhau, mng ba chiu ba vng lp lng nhau,
//In gi tr ca ton mng
for(int i=0; i<4; i++){
for(int j=0;j<4;j++)
cout<<matrix[i][j]<< ;
cout<<endl;
Chng 8. Cc kiu d liu c cu trc

T r a n g | 90
C
+
+

}

Mng gi nhiu chiu
Nu ta khai bo mng nh sau
//Khai bo ma trn
int matrix[4*4];//Ma trn c 16 phn t
th mng ny gi l mng gi nhiu chiu (gi hai chiu). S phn t ca
mng gi hai chiu ny bng s phn t ca mng hai chiu. Thc cht ca
mng gi nhiu chiu l mng mt chiu. Cc thao tc x l vi mng gi
nhiu chiu c thc thi nh mng mt chiu.
Ta cn lu rng, vic chuyn i ch s qua li gia mng nhiu
chiu v mng gi nhiu chiu l hon ton c th thc hin c. V d sau
y s in ra gi tr ca cc phn t theo dng ma trn bng cch s dng
khai bo mng hai chiu v mng gi hai chiu.
Mng hai chiu Mng gi hai chiu
int matrix[4][4];
//Nhp mng
for(int i=0; i<4; i++)
for(int j=0;j<4;j++)
matrix[i][j]=i+j;
//In gi tr mng
for(int i=0; i<4; i++){
for(int j=0;j<4;j++)
cout<<matrix[i][j]<< ;
cout<<endl;
}

int matrix[4*4];
//Nhp mng
for(int i=0; i<4; i++)
for(int j=0;j<4;j++)
matrix[i*4+j]=i+j;
//In gi tr mng
for(int i=0;i<4;i++){
for(int j=0; j<4;j++)
cout<<matrix[i*4+j]<< ;
cout<<endl;
}
Mng l tham s hnh thc: khi s dng mng lm tham s hnh thc, cn
lu cc im sau y:
Trong trng hp mng mt chiu, ta c th khng cn khai bo kch
thc ca mng (v d type tn_hm(int args[])).
Trong trng hp mng nhiu chiu, th ch c s phn t trong chiu
th nht l c th khng cn khai bo, cn cc chiu cn li, nht thit
phi khai bo (v d type tn_hm(int args[][10][10])).
Mng c truyn theo tham bin.
Chng 8. Cc kiu d liu c cu trc

T r a n g | 91
C
+
+

Cch tt nht khi s dng mng lm tham s hnh thc l hy s dng n
di dng con tr. Chi tit v con tr s c trnh by trong chng
sau.
Bi tp 8.
1. Xy dng cc hm sau y
a. Nhp vo mt mng hai chiu cc s nguyn.
b. Thc hin cc php cng, nhn hai mng ny.
c. Xc nh phn t ln nht, nh nht trong mi dng.
d. Xy dng mi mt ma trn t ma trn c, trong cc phn t ca
ma trn c ny c gi tr chn s bng chnh n cng vi phn t
ln nht ca dng . Cc phn t l s bng chnh n tr cho
phn t nh nht ca dng . Tng ng vi ch s , ta s xy
dng nn ma trn mi t ma trn c cho.
V d:
1 2
3 2
Phn t ln nht ca dng 1: 2
Phn t ln nht ca dng 2: 3
Phn t nh nht ca dng 1: 1
Phn t nh nht ca dng 2: 2
Phn t 1x1 l l, nn n bng 1-1=0, v y chnh l phn t 1x1
trong ma trn mi. Tng t cho cc phn t cn li. Ma trn mi
thu c l
0 4
1 5
2. Cho mng mt chiu, vit chng trnh hon i vng cc gi tr ca
mng (phn t u tr thnh phn t cui, ). V d {1, 2, 3}, sau
khi hon i, ta thu c {2, 3, 1}
3. Cho ma trn, hy s dng phng php kh Gauss a ma trn
ny v dng tam gic trn.

Xu k t
Nh ti gii thiu, th vin chun ca C++ cha mt lp string rt
mnh m, m n c th hu dng trong vic thc thi cc tc v x l xu.
Tuy nhin, bi v xu l mt mng cc k t, do , chng ta c th x l xu
nh x l trn mng.
Chng 8. Cc kiu d liu c cu trc

T r a n g | 92
C
+
+

V d, ta c mt khai bo xu nh sau
char strings [20];
Xu strings ny cha 20 k t.
Vic khi to gi tr cho mt xu hon ton tng t nh khi to gi
tr cho mng. Tuy nhin, chng ta c thm mt cch khi to thun li hn
nh sau
strings = Chao ban;
Khi phn b vo trong b nh, xu ny s c biu din nh mng.
Tuy nhin, phn t cui cng trong mng k t ny l phn t kt thc xu,
c k hiu l \0.
C h a o b a n \0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Vic khai bo xu theo kiu mng k t hay theo kiu string l hon
ton tng ng nhau. V vy, chng ta c th ty la chn cch x l
chng. Ngoi ra, mng cng c th c khai bo nh con tr. V vy, vi
xu k t, chng ta c ba cch khai bo: s dng mng k t, s dng con tr
v khai bo xu string. Chi tit v con tr, chng ta s hc trong chng sau.

Chng 9. Con tr
Trang | 93

CHNG 9. CON TR

Khi mt bin c lu vo trong cc nh, thng thng ta khng
quan tm n cch b tr theo v tr vt l ca n, chng ta n thun ch
truy cp n cc bin theo nh danh ca n. B nh ca my tnh c t
chc theo cc nh, mi mt nh l kch thc nh nht m my tnh c
th qun l cn gi l bytes. Mi nh c nh du theo mt cch lin
tc. Cc nh trong cng mt khi nh c nh du theo cng mt ch
s nh khi nh trc cng 1. Theo cch thc t chc ny, mi nh
c mt a ch nh danh duy nht v tt c cc nh thuc vo mt mu
lin tip. V d, nu chng ta tm kim nh 1776, chng ta bit rng n s
l nh nm ngay v tr gia nh 1775 v 1777, hay chnh xc hn l
nh sau 776 nh so vi nh 1000 (hay trc nh 2776 l 1000
nh).

Ton t tham chiu &
Khi m t mt bin, h iu hnh s cung cp mt s lng nh cn
thit lu tr gi tr ca bin. Chng ta khng quyt nh mt cch trc
tip v tr chnh xc lu tr bin bn trong mng cc nh . May mn
thay, tc v ny hon ton t ng trong sut qu trnh Runtime ca h
iu hnh. Tuy nhin, trong mt vi trng hp, chng ta c th quan tm
n a ch m cc bin c lu tr iu khin chng.
a ch m cc bin lu bn trong b nh c gi l s tham chiu
n bin . S tham chiu n bin c th nhn c bng cch b sung
du & trc nh danh ca bin n c gi l a ch ca bin .
V d:
int a = 10;
int *adr = &a;

Khi khi gn bin *adr cho a ch ca bin a, th t thi im ny,
vic truy cp tn bin a vi tham chiu & hon ton khng lin quan n gi
tr ca n, nhng ta vn nhn c gi tr ca bin a nh vo bin *adr.
Chng 9. Con tr

T r a n g | 94
C
+
+

Gi s bin andy c lu vo trong b nh ti nh 1776. Chng ta
c th minh ha on chng trnh sau bng lc bn di
int andy = 25;
int fred = andy;
int* ted = &andy;


andy
25
1775 1776 1777


fred & -ted
Hnh 17 Tham chiu trong con tr
u tin gi tr 25 s c gn cho bin andy, bin fred c khi to
t bin andy (sao chp gi tr). Bin ted s tham chiu n a ch ca bin
andy, m khng sao chp gi tr ca bin ny vo nh ca n.

Ton t tham chiu ngc *
Mt bin tham chiu n bin khc gi l con tr. Con tr s tr n
bin tham chiu. Bng vic s dng con tr, chng ta c th truy cp trc
tip n gi tr ca bin c tham chiu n. thc thi c iu ny,
chng ta t trc nh danh ca bin tr du *, khi , n ng vai tr l
ton t tham chiu ngc v n c th gi l gi tr tr bi.
Bi vy, chng ta c th vit nh sau
beth = *ted;

Chng ta c th gi: beth tng ng vi gi tr tr bi ted. minh
ha iu ny, chng ta c th tham kho lc sau:

Chng 9. Con tr

T r a n g | 95
C
+
+

ted
1776

1775 1776 1777
25 b nh

25
beth
Hnh 18 Tham chiu ngc trong con tr
Lc ny tng ng vi on chng trnh sau
beth = ted;//beth tng ng vi ted
beth = *ted;//beth tng ng vi gi tr tr bi ted
Cn phn bit chnh xc gia bin ted tr n gi tr 1776, trong khi
*ted tr n gi tr lu ti 1776, tc l 25. Nh vy, chng ta cn phi
phn bit mt cch chnh xc hai ton t: ton t tham chiu & v ton t
tham chiu ngc*.
Ton t tham chiu &: c l a ch ca.
Ton t tham chiu ngc *: c l gi tr tr bi.
Nh vy, mt bin c th tham chiu nh ton t & v c th tham chiu
ngc bi ton t *.
Gi s chng ta c
int andy = 25;
int *ted = &andy;
Khi , cc biu thc sau y s cho gi tr ng (gi s a ch ca bin
andy c lu ti nh 1776)
andy == 25;
&andy == ted;//=1776
*ted == 25;
Chng 9. Con tr

T r a n g | 96
C
+
+

Ta c th pht biu tng qut biu thc *ted = &andy nh sau: con tr *ted
tr vo a ch ca andy, tng ng vi a ch ny ca nh, ta c th nhn
c gi tr tng ng l gi tr lu ti nh ny.
Khai bo bin con tr
Ta c th ly gi tr m con tr tr n mt cch trc tip, n cn thit
khi chng ta mun khai bo kiu d liu tng ng vi n. C php khai
bo con tr nh sau:
type *tn_con_tr;
V d
int *pint;
char *pchar;
float *pfloat;
Trong v d trn, chng ta khai bo ba con tr c kiu d liu khc
nhau, nhng v bn cht, chng pint, pchar, pfloat l nhng con tr v
chng c cng s nh trong khng gian b nh (trn h thng windows
32bit, chng chim 4byte ta c th s dng hm sizeof kim tra kch
thc thc trn h thng my tnh ang s dng). Tuy nhin, d liu m
cc con tr tr n li c kch thc khc nhau tng ng vi int, char v
float m chng ta tm hiu (tng ng trn h windows 32 bit ln lt l
4, 1, 4).
V d Kt qu
#include<iostream>
using namespace std;
int main()
{
int *pint;
long long *pll;
cout<<sizeof(pint)<<endl;
cout<<sizeof(pll)<<endl;
cout<<sizeof(*pint)<<endl;
cout<<sizeof(*pll)<<endl;
return 0;
}
4
4
4
8
Gii thch: trong v d ny, bin pint v pll dng lu a ch ca con tr,
chng lun c kch thc mc nh l 4 bytes. Cc bin *pint v *pll l cc
Chng 9. Con tr

T r a n g | 97
C
+
+

bin tr vo cc kiu d liu int v long long tng ng. Bin int c kch
thc 4 bytes v bin long long c kch thc 8 bytes.
Lu , trong khai bo ny, du * khng phi l ton t tham chiu
ngc, n n thun l con tr. Chng c cng k hiu, nhng l hai th
hon ton khc nhau.
V d Kt qu
#include<iostream>
using namespace std;
int main()
{
int fval, sval;
int *p;
p = &fval;
*p = 10;
p = &sval;
*p=20;
cout<<fval<<endl;
cout<<sval<<endl;
return 0;
}
10
20
Gii thch: Bng cch s dng bin con tr *p, chng ta lm thay i gi
tr ca bin fval v sval. Bin tr ny trong ln u tin, n tr n a ch
ca bin fval, t nh ca a ch ny, n nh x n gi tr m ta khi gn
l 10. Do , gi tr ca bin fval cng nh x tng ng n 10. Tng t
cho bin sval.
minh ha con tr c th to ra s sai khc gi tr trong cng mt
chng trnh, chng ta tham kho v d sau
V d Kt qu
#include<iostream>
using namespace std;
int main()
{
int fval=5, sval=15;
int *p1, *p2;
p1 = &fval;
p2 = &sval;
*p1 = 10;
10
20
Chng 9. Con tr

T r a n g | 98
C
+
+

*p2 = *p1;
p1 = p2;
*p1 = 20;
cout<<fval<<endl;
cout<<sval<<endl;
return 0;
}
Gii thch: Cc bin *p1 v *p2 tr n a ch ca fval v sval. Nh vy,
*p1=10, s to cho vng a ch m n tr n, nh x n gi tr 10 (c
ngha l ti thi im ny fval = 10, sval = 15). Dng lnh *p2=*p1 s lm
cho bin tr *p2 tr n gi tr m *p1 tr n (tc *p2 = 10). V ti thi
im ny, bin sval c gi tr tng ng l 10 (do nh x theo vng a ch
m *p2 tr n). Dng lnh p1=p2 s gn a ch m p2 tr n (a ch ca
bin sval) cho a ch m p1 tr n (a ch ca bin fval), nh vy, ti thi
im ny sval=fval=10. Dng lnh *p1=20 s to cho vng a ch m *p1
tr n (cng l a ch ca bin *p2 v fval) nh x n gi tr 20, ngha l
fval = 20. V vy, khi kt thc chng trnh, fval = 10, sval = 20. C hai bin
*p1 v *p2 u tr n a ch ca bin fval.
Mt con tr c khai bo d liu ca n l mt loi d liu no .
Do , nu c mt bin khng phi l con tr c cng kiu d liu, chng ta
c th s dng khai bo thu gn
int *p1, *p2, num;
Con tr, mng v xu k t
Nh ti ni trn, mng c th c khai bo theo kiu truyn
thng hoc theo cu trc con tr. V d, ti c mt mng s nguyn, chng
c 20 phn t
int numbers[20]; //Khai bo truyn thng
int *p = new int[20]; //Khai bo con tr
Hoc ta c khai bo mt bin xu k t theo mt trong 3 cch sau
char xau[20]; //Khai bo truyn thng
char *xau; //Khai bo con tr
string xau;//Khai bo xu
Khi to gi tr cho con tr khi n ng vai tr l mng
Th nht: ta s dng php gn sao chp ton b mng ln con tr
Chng 9. Con tr

T r a n g | 99
C
+
+

p = numbers;//p l con tr, numbers l mng

Th hai: khi to trc tip cho tng phn t
int *p;
for (int i=0; i<20; i++){
*(p+i)=numbers[i];
}
Chng trnh nhp xut d liu bng vic s dng con tr.
Chng trnh Kt qu
#include<iostream>
using namespace std;
void Input(int *p, int length)
{
for (int i=0; i<length; i++){
cin>>*(p+i);
}
}
void Output(int *p, int length)
{
for (int i=0; i<length; i++){
cout<<*(p+i)<< ;
}
}
int main()
{
int *a;
int lengtha;
cout<<Nhap do dai: ;
cin>>lengtha;
Input(a, lengtha);
cout<<========<<endl;
Output(a, lengtha);
return 0;
}
Nhap do dai: 4
6
8
9
0
========
6 8 9 0
Gii thch: bin con tr lun c truyn theo kiu tham bin, do , chng
ta khng cn b sung du & vo bn trc tn bin. Hm Input dng
nhp mng s nguyn c di length, hm Output dng xut d liu t
mng nguyn . Khi truy xut t bin con tr, ngoi cch xut nh trn, ta
Chng 9. Con tr

T r a n g | 100
C
+
+

cn c th vit p[i] tng ng nh mng p[i] v *(p+i) u l phn t th
i. Ngha l ta hon ton c th vit
cin>>p[i]; cout<<p[i];
cin>>*(p+i); cout<<*(p+i);
int c = p[i]+q[j]; int c = *(p+i)+*(q+j);
Vic s dng con tr thay cho xu cng hon ton tng t. Nhng hy
lu , phn t cui cng ca n l phn t \0.
Cc php ton s hc trn con tr
Cc php ton s hc trn con tr tng i khc vi php ton s
hc trn s nguyn. Chng ta cng tham kho cc php ton tng ng vi
n.
Php cng v php tr
Gi s, chng ta c ba con tr khai bo nh sau
char *pchar;
short *pshort;
int *pint;
v cc bin tr ny ln lt tr vo cc nh 1000, 2000 v 3000. Khi ta
vit
pchar++;
pshort++;
pint++;
n s ln lt nhy sang a ch ca nh tip theo ( nh dch sang phi
mt n v, tc l tng ng vi 1001, 2002 v 3004). iu ny cng rt
n gin. Kiu d liu char chim mt byte, nn tip theo s l a ch ca
hin ti +1. Kiu d liu short chim 2 byte, nn a ch tip theo +2.
Kiu d liu long chim 4 byte, nn a ch ca tip theo l +4.
Chng trnh Kt qu
int *p;
for(int i=0; i<4; i++){
*(p+i)=i;
cout<<*(p+i)<<" "<<(p+i)<<endl;

Chng 9. Con tr

T r a n g | 101
C
+
+

}
Ta c th thy gi tr v vng a ch ca bin tr nguyn nh trong kt qu
trn. D nhn thy rng a ch tng theo 4 byte (0x7ffd5000 tip theo
0x7ffd5004,)
hiu r hn, ta c th quan st lc sau y
1000 1001

pchar pchar++
2000 2001 2002 2003

pshort pshort++
3000 3001 3002 3003 3004 3005 3006 3007

plong plong++
Hnh 19 Tng/Gim a ch ca con tr
Kt qu ny tng ng vi pchar+1, pshort+1 v plong+1.
Hon ton tng t vi ton t ++p, p-- v --p.
Ton t tham chiu ngc v ton t tng-gim
C hai ton t tng v gim c u tin cao hn ton t tham chiu
ngc. Nu ta t
*p++;
Do ton t ++ c u tin cao hn ton t *, nn biu thc ny tng ng
vi *(p++). V vy, biu thc ny c ngha l ly gi tr nh x bi nh tip
theo.
Ta cn ch rng, biu thc ny hon ton khc vi
(*p)++;
Chng 9. Con tr

T r a n g | 102
C
+
+

Trong biu thc ny, du () c u tin cao nht, nn biu thc *p s thc
hin trc, do , gi tr ca biu thc ny l gi tr nh x bi nh hin
ti cng thm 1.
Biu thc
*p++ = *q++;
Bi v ton t ++ c u tin cao hn ton t *, c hai bin p v q u
tng, nhng bi v chng u l ton t hu t, nn ton t * s c thc
hin trc, sau mi tng a ch ca bin tng ng. Nh vy, biu thc
trn tng ng vi
*p = *q;
++p; // hay p=p+1;
++q; // hay q=q+1
Trong trng hp ny, chng ta nn s dng du () c mt cch nhn
nhn r rng hn.
Con tr tr vo con tr
C++ cho php s dng con tr a tng, ngha l con tr tr vo con
tr. khai bo con tr loi ny, chng ta ch cn b sung thm vo bin tr
mt ton t *.
char a;
char *b;
char **c;
a = z;
b = &a;
c = &b;
minh ha iu ny, chng ta c th to mt a ch ngu nhin
trong b nh cho mi bin, v d l 7230, 8092 v 10502.
a b c
z 7230 8092
7230 8092 10502
Gi tr ca mi bin c vit trong mi . Di mi l a ch
tng ng ca trong b nh. a ch ca bin a l 7230, gi tr ca
nh tng ng l z. Bin *b tr vo a ch ca bin a v gi tr tng ng
Chng 9. Con tr

T r a n g | 103
C
+
+

ca bin b nh x n gi tr ca nh bin a tc gi tr l z. Bin c tr
vo a ch ca b, n s nh x gin tip n gi tr ca a tc gi tr z.
S tng ng gia con tr tr vo con tr khc v mng hai chiu
Vic khai bo bin **c nh trn, c th xem nh l mng hai chiu.
Chng ta li xt bi ton ma trn.
Chng trnh Kt qu
#include <iostream>
using namespace std;
int main()
{
//Khai bo ma trn
int **matrix;
//Khi to ma trn
matrix = new int*[3];//dng
for(int i=0; i<3; i++)//phn t
matrix[i] = new int[3];
//Nhp ma trn
for (int i=0; i<3; i++)
for (int j=0; j<3; j++)
{
*(*(matrix+i)+j)=i+j;
}
//Xut ma trn
for (int i=0; i<3; i++){
for (int j=0; j<3; j++)
cout<<*(*(matrix+i)+j)<< ;
cout<<endl;
}
//Xa ma trn
delete[] matrix;
return 0;
}
0 1 2
1 2 3
2 3 4
T nay tr i, khi x l bi ton trn mng, ta hon ton c th s dng con
tr x l. Chng hon ton tng ng nhau. Ch c duy nht mt s
khc bit trong khai bo: nu khai bo theo kiu truyn thng, ta cn ch ra
kch thc ngay khi khai bo, cn khai bo theo kiu con tr, ta c th ch
nh kch thc sau nh vo ton t new. Chng ta s tm hiu chi tit v
ton t new trong chng tip theo.
Chng 9. Con tr

T r a n g | 104
C
+
+

Con tr void
Con tr void l loi con tr c bit. Trong C++, void dng quy nh
s khng tn ti ca mt kiu d liu (hay kiu d liu rng). V vy, con
tr void l con tr tr vo gi tr c kiu d liu void (cng v l , m n
khng xc nh di v thuc tnh tham chiu ngc).
Con tr void cho php tr sang mt kiu d liu bt k. Nhng khi
chuyn i, chng c mt gii hn rt ln: d liu tr bi chng khng th
trc tip tham chiu ngc, v v nguyn nhn ny, chng ta cn p kiu a
ch ca con tr void sang mt con tr khc m n c mt kiu d liu c th
trc khi tham chiu ngc tr li.
Chng trnh Kt qu
#include<iostream>
using namespace std;
void increase(void* data, int psize)
{
if(psize==sizeof(char))
{
char* pchar;
pchar=(char*)data;
++(*pchar);
}else if(psize==sizeof(int))
{
int* pint;
pint = (int*)data;
++(*pint);
}
}
int main()
{
char a = x;
int b = 1602;
increase(&a, sizeof(a));
increase(&b, sizeof(b));
cout<<a<<, <<b<<endl;
return 0;
}
y, 1603
Gii thch: hm increase c hai tham s: tham s data l mt con tr void,
tham s psize l kch thc ca con tr data. Cu lnh if s kim tra iu
kin xem bin tr data thuc kiu d liu no nu psize==sizeof(char) th
Chng 9. Con tr

T r a n g | 105
C
+
+

n l con tr kiu char, tng t nu psize==sizeof(int) th n l con tr
kiu int. V y, ta cha xc nh c n l con tr kiu g, nn ta s s
dng tham s l con tr void. Nu l con tr char, ta s s dng bin tr
pchar khi to gi tr cho n bng cch p kiu t con tr void. Hon
ton tng t cho bin tr pint. Mc ch ca hm increase l tm gi tr
tip theo ca tham s data. Trong hm main, ta s dng hai bin char v int.
Gi tr tip theo ca k t x l k t y, ca s 1602 l 1603.
Con tr null
Mt con tr null l con tr dng khi gn cho mt bin tr c kiu
d liu bt k. Trong C++, n c quy nh l 0.
int *p;
p = 0;
char *c;
c = 0;

Ta khng nn nhm ln gia con tr null v con tr void. Mt con tr
null l mt gi tr c th m mi con tr u c th tr n, v n c th tr
n mi v tr. Trong khi , con tr void l con tr c bit, n c th tr
n vi v tr.
Con tr hm
C++ cho php thc thi tnh ton vi con tr tr vo hm. Khi thc thi
iu ny, n s xem hm nh l mt tham s tr vo mt hm khc, nhng
chng khng tn ti tham chiu ngc. khai bo mt con tr hm, chng
ta cn khai bo n nh khai bo prototype cho mt hm, nhng tn ca
hm s c bao trong du () ng thi b sung * pha trc tn ca n.
Chng trnh Kt qu
#include<iostream>
using namespace std;
int addition(int a, int b)
{
return a+b;
}
int substraction(int a, int b)
{
return a-b;
12
8
Chng 9. Con tr

T r a n g | 106
C
+
+

}
int operation (int x, int y, int (*functocall) (int, int))
{
int g;
g=(*functocall)(x,y);
return (g);
}
int main()
{
int m, n;
int (*minus)(int, int) = substraction;
m = operation(7, 5, addition);
cout<<m<<endl;
n = operation(20, m, minus);
cout<<n;
return 0;
}
Gii thch: Hai hm addition v substraction thc hin cc chc nng cng
v tr hai s nguyn. Hm operation s gi hm tng ng vi con tr hm
c ch nh. Trong hm main, con tr hm minus s tng ng vi hm
substraction. Khi gi hm operation, ty theo con tr hm quy nh tham
s th ba, n s tr n hm tng ng c ch nh: operation(7, 5,
addition) tr n hm addition, tc cng hai s 7 v 5. Tng t,
operation(20, m, minus) s tng ng vi operation(20, m, substraction)
v cho kt qu l php tr 20 cho m.
Bi tp 9.
1. Hy xy dng ba hm cng hai s nguyn addi, cng hai s thc addf v
cng hai xu adds bng cch s dng con tr hm. Hm tng qut s c
t tn l add.
2. S dng con tr hm xy dng hm gii phng trnh bc nht v
phng trnh bc 2.
3. S dng con tr hm tnh cc tch phn sau bng phng php hnh
thang hoc hnh ch nht (phi, tri hoc trung v).
()


()



Chng 10. B nh ng
Trang | 107

CHNG 10. B NH NG

Mc ch to ra bin con tr l khng ch x l cc tc v tnh ton,
m cn c th qun l b nh my tnh. thc hin iu ny, chng ta cn
khai bo s nh cung cp cho mi bin con tr, khi khng cn cn dng
n chng na, chng ta c th gii phng cc nh ny i. thc hin
c nhng tc v ny, trong C++ cung cp cho ta hai ton t l new v
delete.
Ton t new v new[]
yu cu b nh ng, chng ta s dng ton t new, theo sau n l
kiu d liu. Nu n l mng ca nhiu phn t, th s phn t s c n
nh bn trong du [] ngay sau kiu d liu. Khi , n s tr v con tr tr
vo khi nh u tin.
int*num = new int;//Khai bo bin tr int 4 byte
int*nums = new int[10];//Khai bo bin tr nums vi 4*10 bytes
Ti xin nhc li ln na, mt kiu d liu tng ng vi mt s lng
cc nh c quy nh sn. Nh trong trng hp ny, trn h iu hnh
windows 32bit, bin num s chim 4 bytes b nh bng 2
4.8
gi tr. Cn
bin nums th chim 40 byte b nh, tng ng vi 2
40.8
gi tr. Nu s
dng hm sizeof kim tra kch thc ca bin *nums trong trng hp
ny, ta s nhn c 4. S d nh vy l v, sau khi khi to 10 phn t kiu
int, con tr s t vo phn t u tin, cho nn, khi s dng sizeof trong
trng hp ny l sizeof ca phn t u tin (tc kiu int). Do , kt qu
thu c l 4 bytes.
Khi khi to cho bin tr tr vo bin tr khc (tm gi l bin tr
nhiu tng). Ta cn khi to cho bin tr chung. Tng ng vi mi bin
tr chung, s c mt mng cc bin tr khc tng ng. Do , ta cn khi
to cho dy bin tr ny, nh vo vng lp for. Tng t nh vy, chng ta
c th khi to cho bin tr a tng (c th l hai, ba, bn).
int***num;
int length = 10;
//khi to bin tr chung
num = new int**[length];
Chng 10. B nh ng

T r a n g | 108
C
+
+

//khi to bin tr tng 1
for (int i=0; i<length; i++)
num[i]=new int*[length];
//khi to bin tr tng 2
for (int i=0; i<length; i++)
for(int j=0; j<length; j++)
num[i][j]=new int[length];

truy cp n tng nh, ta c th truy cp theo num[i][j][k] hoc
*(*(*(num+i)+j)+k). Nh vy, ta c th thy rng, thc cht con tr cng l
mt mng. Ch c mt im khc bit c bn l mng c kch thc c nh
ngay khi khai bo, con con tr c kch thc c ch nh khi ta cn s
dng bi ton t new.
B nh ng c yu cu bi chng trnh, v h iu hnh s cung
cp cho n t b nh heap. Tuy nhin, b nh my tnh cng hu hn, v n
c th b cn kit. Chnh v l , chng ta cn n mt k thut kim tra
tnh trng ny ca b nh. C++ (v thm ch C) cung cp cho ta hai phng
thc chun kim tra: vt qua ngoi l (throw bad_alloc) v khng vt
qua ngoi l (nothrow bad_alloc).
Bng vic s dng mt ngoi l l bad_alloc, h thng s b qua khi
qu trnh cung ng nh b tht bi (theo mc nh). Ngoi l l mt tnh
nng mnh m ca C++, chng ta s tm hiu chi tit nhng chng sau.
Nu gp mt ngoi l, chng ta cn cho bit c b qua tip tc chy
chng trnh hay khng. Ton t new cung cp theo phng thc mc nh
l vt qua (throw bad_alloc).
bobby = new int[5];
//Nu tht bi, ngoi l s b vt qua throw bad_alloc
Nu khng vt qua ngoi l, m c gng tip tc chy chng trnh, th
bobby = new (nothrow) int[5];
//Khng vt qua ngoi l, chng trnh c gng tip tc
Nu s dng vt qua ngoi l throw bad_alloc, trong trng hp
cung ng nh b tht bi, con tr s tr v con tr null, v chng trnh
vn tip tc. Chng ta ch cn kim tra bin tr bobby. Nu n l null th qu
trnh cung cp b nh ng tht bi v ngc li th thnh cng. y l cch
lm th cng, chng ta c th s dng cu trc try catch x l tnh
Chng 10. B nh ng

T r a n g | 109
C
+
+

hung ny. Chi tit, chng ta s tho lun k hn trong phn sau. Lu rng,
hai ngoi l ny nm trong th vin <new>.
Ton t delete v delete[]
Nu khi bin tr khng cn dng n na, chng ta c th xa b cc
nh ca n gii phng b nh ng. Qu trnh ny c thc thi bi
ton t delete.
delete num;
delete[] nums;
Cch vit th nht dng gii phng con tr n tng. Cch th hai
dng cho con tr a tng (hai tng tr ln).
Ton t delete ch c tc dng vi con tr c khi to bi ton t
new hoc con tr null.
Chng trnh Kt qu
#include <iostream>
#include <new>
using namespace std;
int main()
{
double *ptr[ 5];
for ( int i = 0; i < 5; i++ )
{
ptr[ i ] = new (nothrow) double[ 50000000 ];
if (ptr[i]!=0)
cout << "Allocation is ok";
else
cout<<Allocation fail;
}
delete[] ptr;
return 0;
}
Allocation is ok
Allocation is ok
Allocation is ok
Allocation is ok
Allocation fail
Trong ANSI-C, hm malloc, calloc, realloc v free c dng thay cho
new v delete v hin nhin chng cng hot ng trn C++. Chng ta
khng tho lun chi tit v hm ny, v theo xu hng ca lp trnh C++
hin i, ngi ta s dng hai ton t new v delete m ta tho lun trn.

Chng 11. Kiu d liu struct v Con tr struct
Trang | 110

CHNG 11. KIU D LIU STRUCT V CON
TR STRUCT
Kiu d liu mng m chng ta tho lun trn ch gip chng ta
lu mt tp d liu cng loi. Nu chng ta khng n thun lu tr cng
loi d liu, m c th l nhiu kiu d liu khc nhau, th mng khng th
gii quyt c vn . Trong C++ (v c C) cung cp cho chng ta mt kiu
d liu gip ta gii quyt vn ny, l struct.
Struct
Mt d liu struct l mt nhm cc phn t c th c kiu d liu
khc nhau c t cng mt tn. Cc phn t d liu ny c gi l cc
thnh vin ca struct. Cu trc khai bo struct trong C++ nh sau
struct tn_struct{
type thnh_vin_1;
type thnh_vin_2;

} [tn_i_tng_struct];
Trong :
struct l mt t kha.
tn_struct l tn kiu d liu struct m ta nh ngha.
thnh_vin_1, l cc phn t thnh vin ca struct.
tn_i_tng_struct: l tn bin thuc kiu tn_struct.
Hai cch khai bo sau y l tng ng.
V d 1 V d 2
struct product{
int weight;
float price;
}
product apple;
product banana, melon;
struct product{
int weight;
float price;
}apple, banana, melon;
Gii thch: trong hai v d trn product l kiu d liu struct m ta to ra.
N gm c hai thnh vin l weight v price. Tng ng vi kiu d liu
Chng 11. Kiu d liu struct v Con tr struct

T r a n g | 111
C
+
+

ny, ta c cc bin apple, banana, melon. khai bo n, ta c th s dng
mt trong hai cch theo nh hai v d ny. Cn lu rng, cc bin apple,
banana, melon l cc bin thuc kiu d liu product.
truy cp n cc thnh vin ca bin struct, ta s dng ton t chm (.).
apple.weight = 200;
apple.price = 2;
banana.weight = 150;
banana.price = 1;

Chng ta c th hiu apple.weight l khi lng ca to, apple.price l
gi tin ca to... C th xem mi thnh vin ca mt bin struct nh l mt
bin c lp m ta c th truy cp bng cch
tn_bin.phn_t_thnh_vin. Ta hon ton c th thc hin cc php
ton tng ng vi mi d liu thnh vin ny (ngha l cc php ton
tng ng vi cc php ton trn kiu d liu ca cc phn t thnh vin
: nu phn t thnh vin l kiu nguyn th ta c th thc hin cc php
ton s nguyn vi thnh vin ny, nu phn t thnh vin l kiu xu th
c th thc thi cc php ton vi xu cho bin thnh vin ny,).
V d, ti mua 400gam to, v 300g chui. Gi ca mi 100g to l 1$, v
100g chui l 0.7$. Cn tnh ton s tin m ti cn tr.
V d
apple.weight = 400;
apple.price = (float)apple.weight*1/100;
banana.weight = 300;
banana.price = banana.weight*0.7/100;
float money = apple.price+banana.price;
Nh trong v d trn, ti c th thc hin cc php ton s hc vi cc phn
t thnh vin l kiu s nh cc bin s bnh thng.
Struct l mt kiu d liu do ngi dng nh ngha (nh vo t kha
struct t kha struct vit thng). Ta cng c th khai bo mt mng cc
phn t thuc kiu struct. V d sau y minh ha cho vic mua bn khi i
siu th.


Chng 11. Kiu d liu struct v Con tr struct

T r a n g | 112
C
+
+

Bi ton: Trong siu th, gi to v chui c n nh trn tng sn phm
ty thuc cht lng ca sn phm, khng ph thuc vo khi lng ca n.
a. Tnh khi lng hng ha (kg) m ngi tiu dng mua.
b. Nu khch hng mua hng tr gi trn 10$, th ngi tiu dng s c
khuyn mi. Hy kim tra xem ngi tiu dng c c khuyn mi
hay khng.
Bit rng s lng to v chui do ngi tiu dng la chn.
Chng trnh Kt qu
#include<iostream>
using namespace std;
#define MAX 10
struct product{
int weight;
float price;
}apples[MAX], bananas[MAX];
/*
Khai bo hm
*/
void buyProducts(product pd, string
name, int &weight, float &price)
{
int i = 0;
cout<<Buy <<name<<endl;
while (true){
cout<<weight and price: <<endl;
cin>>pd[i].weight;
cin>>pd[i].price;
weight += pd[i].weight;
price += pd[i].price;
cout<<Continue to buy <<name<<
(y/n) ?;
char yn;
cin>>yn;
if((yn==n)||(yn==N)) break;
else i++;
}
}
int main()
{
Buy apples
weight and price
100
2
Continue to buy apples (y/n) ?y
weight and price
200
3
Continue to buy apples (y/n) ?n
Buy bananas
weight and price
150
1
Continue to buy bananas (y/n)
?y
weight and price
250
3
Continue to buy bananas (y/n)
?n
Total weight: 0.7
No Promotion
Chng 11. Kiu d liu struct v Con tr struct

T r a n g | 113
C
+
+

int weight = 0;
float price = 0;
buyProducts(apples, apples, weight,
price);
buyProducts(bananas, bananas,
weight, price);
cout<<Total weight:
<<(float)weight/1000<<endl;
if(price>10)
cout<<Promotion;
else
cout<<No Promotion;
return 0;
}
Gii thch:
Mng apples v bananas thuc kiu d liu product. Hm
buyProducts dng tnh ton khi lng v tng gi hng ha mi loi
mua c. Nu tham s products trong hm l apples, th n s tnh tng
ng vi khi lng tng cng v tng n gi ca apples. Tng t cho
bananas. Ta s dng vng lp while v ta khng bit chnh xc s lng
hng ha m ngi dng la chn. Tuy nhin, con s tng khng th vt
hng s MAX m ta nh ngha. Bin weight v price c truyn theo
tham bin, do , trc php cng dn (ton t cng ng nht +=), ta
khng cn khi to gi tr 0 cho chng, ta c th khi to cho chng ngay
u hm main. Nu khi to u hm buyProducts, th ta ch c th tnh
c khi lng v gi ca tng loi mt m thi (khi , nu mun tnh
ton cho c hai sn phm, ta b sung thm bin lu li cc gi tr ny).
Sau khi gi hm ny hai ln, tng ng vi apples v bananas, th bin
weight lu li tng khi lng ca c hai sn phm, bin price lu li gi
ca c hai sn phm. Khi lng c quy i sang kg, nn ta s chia cho
1000. Nu quy nh n v l kg, th iu ny l khng cn thit.
Trong phn thc thi chng trnh, ngi tiu dng mua hai qu
to v hai qu chui. Qu to th nht c khi lng 100g v gi 2$, qu to
th hai 200g v 3$. Qu chui th nht c khi lng 150g v gi 1$, qu
chui th hai 250g v 3$.

Chng 11. Kiu d liu struct v Con tr struct

T r a n g | 114
C
+
+

Con tr struct
Tng ng vi mng struct, ta cng c con tr tr vo struct. Vi con
tr tr vo struct, ta c th to ra mt mng struct ng.
Khai bo con tr struct: c hai cch khai bo
struct product{
int weight;
float price;
}*apples;
struct product{
int weight;
float price;
};
product* apples;
Tham chiu: hon ton tng t nh con tr tr vo kiu d liu nguyn
thy.
struct product{
int weight;
float price;
}apples1;

products* apples2;
apples2 = &apples1;
Truy cp gi tr ca phn t thnh vin: c hai cch truy cp
apples2->weight
apples2->price
*(apples2.weight)
*(apples2.price)
Ta cn lu s khc nhau gia apples2->weight v *apples2.weight.
Trng hp u n s tng ng vi *(apples2.weight) v theo u
tin ca ton t, du () s thc hin trc tin, ngha l thnh vin weight
ca apples2. Tip l php ton *. iu ny c th hiu l con tr apples2
tr vo a ch ca bin thnh vin weight ca apples 2. Trng hp th
hai, l gi tr tr bi bin thnh vin weight ca apples2 (ton t . c u
tin cao hn ton t *).
struct product{
int weight;
float price;
}*apples2;
.
apples2->weight

struct product{
int *weight;
float price;
}apples2;

*apples2.weight
Chng 11. Kiu d liu struct v Con tr struct

T r a n g | 115
C
+
+

Struct lng nhau
Struct c th c khai bo lng nhau. Chng ta c th khai bo lng bn
trong, hoc khai bo tun t
Khai bo lng nhau Khai bo tun t
struct family{
string father;
string mother;
struct children{
string son;
string daughter;
}first, second;
}myfamily;
struct children{
string son;
string daughter;
};
struct family{
string father;
string mother;
children first, second;
}myfamily;
Khi , vic truy cp cng tng t nh trn
myfamily.first.son
.
Nu l con tr, ta cng c cch truy cp tng t.
struct family{
string father;
string mother;
struct children{
string son;
string daughter;
}*first, second;
}*myfamily;
myfamily->first->son
myfamily->second.son
Kch thc b nh ca struct
Kch thc ca struct theo l thuyt n s l kch thc tng cng ca
cc d liu thnh vin. Tuy nhin, theo cch thc t chc b nh, cc d
liu thnh vin ca mt struct s c sp xp lin k nhau. Vic t chc b
nh ca h thng my tnh 32bit s theo xu hng l nhm 4 bytes. iu
ny c ngha l, nu d liu thnh vin th nht lp vo mt s byte b
nh, v nu cn tha, th h iu hnh s xem xt a d liu thnh vin
tip theo vo. Nu d liu thnh vin tip theo chim mt s lng cc byte
b nh cn tha, th n s c lp vo phn b nh cn tha . Nhng
nu vt qu, th h thng s c nh hng b sung thm mt nhm 4
byte b nh mi cha d liu thnh vin tip theo (nu cn nhiu hn
Chng 11. Kiu d liu struct v Con tr struct

T r a n g | 116
C
+
+

th cung cp tip nhm 4 byte na). Cn i vi s byte cn tha, n vn
c trng.
V d 1 V d 2
struct number{
char a;
int b;
char c;
}mynum;

cout<<sizeof(mynum);
//12
struct number{
char a;
char c;
int b;
}mynum;

cout<<sizeof(mynum);
//8
Gii thch:
Trong v d 1:
char 1byte
int 4byte
u tin, d liu thnh vin char s
lp y nhm 4byte, char chim
1byte nn cn tha 3 byte. D liu
thnh vin tip theo l int. V int
chim 4byte, nhng ch tha c 3
byte, n khng ch cho int. Do ,
h thng s t ng cung cp thm 3
byte lp y phn cn tha. Tip
theo, s cung cp nhm 4 byte cho
int. Khng c byte tha trong trng
hp ny. Kiu d liu thnh vin
char cn li chim 1byte, nhng h
thng cung cp cho n 4 byte, cn
tha 3 byte. S byte tha ny s
c lp y. Nh vy, s byte trong
trng hp ny l
(1+3)+4+(1+3)=12 byte.
Trong v d 2:
Cng tng t v d 1. D liu thnh
vin char th nht chim 1 byte, h
thng cung cp 4 byte, nh vy tha
3 byte. Kiu d liu thnh vin tip
theo cng kiu char, chim 1byte, n
c th lp vo s byte cn tha. Ti
thi im ny, cn tha 2 byte. Tip
theo, ta xt n d liu thnh vin
int. D liu ny chim 4 byte, nhng
ch cn tha 2 byte, do h thng
s lp y 2 byte ny v cung cp
thm 4 byte mi cho int. Nh vy, s
byte trong trng hp ny l
(1+1+2)+4=8 byte.
Nh vy, ty vo kiu d liu thnh vin, ta cn chn mt cch sp xp hp
l c mt kt qu ti u v b nh. Hy quan st lc sp xp b nh
hng ti u nh bn di (trng hp 2).

char char int

Chng 12. Cc kiu d liu khc
Trang | 117

CHNG 12. CC KIU D LIU KHC

Kiu d liu t nh ngha
Ta c th nh ngha mt kiu d liu mi thng qua mt kiu d liu
tn ti
typedef kiu_d_liu_tn_ti tn_kiu_d_liu_mi;

Sau khi khai bo kiu d liu mi, ta c th s dng n nh kiu d liu
thng thng
typedef char C;
typedef char* pchar;
typedef char string50[50];

C mychar;
pchar p;
string50 str;
Kiu d liu union thng
Vi t kha union, ta c th khai bo mt kiu d liu mi t cc kiu
d liu tn ti.
union Tn_kiu_union{
kiu_d_liu_thnh_vin_1 tn_thnh_vin_1;
kiu_d_liu_thnh_vin_2 tn_thnh_vin_2;

}bin_kiu_d_liu_union;
Khi khi bo kiu union, cc d liu thnh vin s c khai bo trn cng
mt khng gian b nh vt l. Kch thc ca n l kch thc ca kiu d
liu thnh vin ln nht.
V d
union myType{
char C;
double Db;
} newType;
//8 byte, v double = 8byte, char = 1byte.
Chng 12. Cc kiu d liu khc

T r a n g | 118
C
+
+


//S dng
bin_kiu_d_liu_union.tn_thnh_vin
Kiu d liu union n danh
Hon ton tng t vi kiu d liu union thng, nhng ta khng
cn ch nh tn bin union mi to ra
union Tn_kiu_union{
kiu_d_liu_thnh_vin_1 tn_thnh_vin_1;
kiu_d_liu_thnh_vin_2 tn_thnh_vin_2;

};
Khi khai bo bin thuc kiu union n danh, ta c th khai bo nh sau
V d

union Tn_kiu_union tn_bin;
tn_bin.tn_thnh_vin


Kiu d liu enum
Kiu d liu enum c to mi c th cha nhiu d liu khc nhau
m khng c s gii hn v gi tr.
enum Tn_kiu_enum{
gi_tr_1;
gi_tr_2;

}Tn_th_hin_enum;
Chng ta c th tham kho thm cc v d sau y
enum colors{black=0, blue, green, cyan, red} mycolor;
enum colors{black=0, blue, green, cyan, red};
colors mycolor;
Enum l mt loi d liu cha cc bin c nh ch s. Do , cc gi tr
hng ca n lun l s nguyn ( lm ch s).
Chng 12. Cc kiu d liu khc

T r a n g | 119
C
+
+

V d
#include<iostream>

using namespace std;
enum colors{red, green, blue};

int main()
{
for(int i=0; i<3; i++)
if (colors(i)==green) cout<<"green"<<endl;
return 0;
}

Chng 13. Lp trnh hng i tng
Trang | 120

CHNG 13. LP TRNH HNG I
TNG

Lch s hnh thnh
Trc khi k thut lp trnh hng i tng ra i, con ngi tri qua
cc thi k lp trnh tuyn tnh, lp trnh hng th tc.
1. Lp trnh tuyn tnh
My tnh u tin c lp trnh bng m nh phn, s dng cc cng
tc c kh np chng trnh. Cng vi s xut hin ca cc thit b lu
tr ln v b nh my tnh c dung lng ln, nn cc ngn ng lp trnh
cp cao bt u xut hin. Cc ngn ng lp trnh ny c thit k lm
cho cng vic lp trnh tr nn n gin hn. Cc chng trnh ban u
ch yu lin quan n tnh ton, chng tng i ngn. Chng ch yu
chy theo cc dng lnh mt cch tun t, dng trc chy trc, dng sau
chy sau.
Nhc im:
o Nu ta cn s dng mt on lnh no nhiu ln, th ta phi sao chp
n nhiu ln.
o Khng c kh nng kim sot phm vi nhn thy ca bin.
o Chng trnh di dng, kh hiu, kh nng cp.

2. Lp trnh hng th tc
Vi nhng nhc im trn, i hi c mt ngn ng lp trnh mi thay
th. chnh l nguyn nhn ra i ca ngn ng lp trnh hng th tc.
V bn cht, chng trnh c chia nh thnh cc modul (n v chng
trnh). Mi n v chng trnh cha cc hm hay th tc (nn gi l
hng th tc). Tuy tch ri thnh cc modul ring bit, nhng ngn ng
lp trnh hng th tc vn m bo thng tin thng sut gia cc modul
nh vo c ch hot ng ca hm, c ch truyn theo tham bin v tham
tr. Vi lp trnh hng th tc, mt chng trnh ln c th c chia nh
Chng 13. Lp trnh hng i tng

T r a n g | 121
C
+
+

thnh cc modul, mi lp trnh vin c th m nhn. Tiu biu trong s
ny l C, Pascal.
Nhc im:
o Cc hm v th tc thng gn kt vi nhau, nu mun nng cp
chng trnh, thng phi chnh sa tt c cc hm v th tc lin
quan.
o Khng ph hp vi xu th hin i v khng m t c thc th trong
cuc sng thc.
3. Lp trnh hng i tng
a. Gii thiu
Vi xu th hin i, ngn ng lp trnh hng i tng ra i. C
s ca lp trnh hng i tng l i tng. i tng l s th hin ca
mt thc th trong th gii thc. Mt thc th trong th gii thc thng
c: cc c trng v cc hnh ng. V d: con ngi trong th gii thc c
cc c trng nh - tn gi, tui, mu tc, mu mt, mu da v cc hnh
ng nh n, ni, chy, nhy Cch thc lp trnh ny m t mt cch
chnh xc cc s vt, con ngi trong th gii thc.
By gi, ta s xt mt vi v d cho thy s cn thit ca lp trnh
hng i tng.
V d 1. Chng ta mun xy dng mt chng trnh qun l sinh vin.
Khi , ta cn lu tr cc thng tin lin quan n i tng sinh vin ny:
h tn sinh vin, m s sinh vin, ngy thng nm sinh, qu qun, im cc
mn, im tng kt,. v rt nhiu thng tin khc lin quan. Sau khi kt
thc nm hc, sinh vin s nhn c nh gi kt qu hc tp ca mnh.
Chng ta cn c phng thc tip nhn kt qu sinh vin c th phn
ng li vi nhng g m mnh nhn c, h phi thc hin cc hnh ng
hc tp, tham gia vo cc hot ng ca trng, ca khoa l nhng
hnh ng m mi sinh vin cn thc hin.
V d 2. Chng ta s im qua mt s tnh nng trong chng trnh son
tho vn bn Word ca Microsoft. Chng ta s tho lun v cc i tng
Drawing trong Word. Mi i tng u c cc thuc tnh: mu vin, dng
ng vin, kch thc vin, mu sc vin, mu nn, c vn bn hay khng
trong i tng drawingKhi chng ta bin i hnh dng ca mi i
Chng 13. Lp trnh hng i tng

T r a n g | 122
C
+
+

tng: ko gin, lm lch xing, quay vng chng ta cn a ra mt
thng ip cc i tng hnh th ny thay i theo. Cc hnh ng ny
thuc quyn s hu ca i tng.
Trong hai v d minh ha trn, chng ta thy rng hng tip cn theo
lp trnh hng i tng l rt gn gi vi cuc sng thc. Chng ta
khng quan tm n nhng kha cnh khng cn thit ca i tng,
chng ta ch tp trung vo cc c trng v cc hnh ng ca i tng.
K t thi im ny tr i, chng ta s gi cc c trng ca i tng l
cc thuc tnh thnh vin ca i tng (hoc d liu thnh vin, bin
thnh vin ca i tng) v cc hnh ng ca i tng l cc phng
thc thnh vin (hay hm thnh vin) ca i tng. Cc cch gi d liu
thnh vin, thuc tnh thnh vin, bin thnh vin hay thuc tnh (tng
ng phng thc thnh vin, hm thnh vin, phng thc) l khng c
s phn bit. Ti ch a ra nhiu cch gi khc nhau chng ta c th
quen khi tham kho cc gio trnh khc nhau. Bi l, nhiu gio trnh chn
la cc cch gi khc nhau. Cc cch gi ny cng ty thuc vo ngn ng
lp trnh (trong C++ thng thng ngi ta s dng khi nim d liu
thnh vin member data hoc bin thnh vin member variable v hm
thnh vin member function, trong khi , cc ngn ng nh Java, Delphi
hay C# li s dng khi nim phng thc method v thuc tnh
property). Khi nim thnh vin s p dng cho c d liu thnh vin ln
hm thnh vin.
Phng chm ca lp trnh hng th tc theo gio s Niklaus Wirth
Chng trnh = Cu trc d liu + Gii thut
Cn phng chm ca lp trnh hng i tng l
Chng trnh = i tng + D liu
Tiu biu trong s ny l C++, Java, C#, Delphi, Python
b. Phng php phn tch v thit k hng i tng
Trc khi bt u vit mt chng trnh theo hng i tng, th ta cn
phn tch v thit k cc i tng. T s cu trc nhn c, chng ta
c th xy dng nn chng trnh. Chi tit v cch thc phn tch v thit
k i tng, chng ta s c tm hiu k hn trong hc phn phn tch
thit k h thng thng tin. Trong ni dung ca gio trnh ny, chng ta ch
tho lun mt phn nh, gip cc bn c th xy dng nn mt cu trc
chng trnh theo hng i tng. S cu trc trong lp trnh hng
i tng c s dng ph bin l s m t trn ngn ng UML
(Unified Modeling Languages). UML l ngn ng chuyn dng m hnh
Chng 13. Lp trnh hng i tng

T r a n g | 123
C
+
+

ha cc i tng. N khng ch c p dng trong lp trnh, m cn c
s dng rng ri trong cc lnh vc khc ca cuc sng. Trong UML c
nhiu dng s c hoch nh. Nhng trong phm tr ca lp trnh
hng i tng, s lp l s m t gn gi nht. Do , ti s trnh by
cch xy dng mt chng trnh c m t bng s lp.
Mt s k hiu cn lu trong UML. Trc khi tm hiu cch m hnh ha
mt bi ton trong UML, chng ta cn tm hiu mt s k hiu c s dng
trong UML. Cc k hiu ny c th khc nhau trong nhiu chng trnh m
phng. Nhng k hiu m ti s dng y l k hiu dng trn Visual
Studio 2010.
K hiu ngha

Lp

Thuc tnh hoc phng thc private

Thuc tnh hoc phng thc protected

Thuc tnh hoc phng thc public


Biu din tnh k tha. Mi tn lun
hng v lp c s. Chiu cn li lun
ch vo lp con.

Thuc tnh

Phng thc
Phn tch v thit k m hnh. Vic phn tch v thit k mt m hnh l
cng vic i hi cc nh thit k phi c mt t duy tt. i vi mt bi
ton phn tch v thit k, khng phi ch c duy nht mt m hnh kt qu,
m c th c mt vi, thm ch l nhiu m hnh khc nhau. Tuy nhin, cng
vic chn la mt m hnh ti u l iu cn thit. Trong ni dung gio
trnh ny, ti ch gii thiu s qua v cch hoch nh mt m hnh. Chng
ta s khng i su nghin cu vn ny. Trong hc phn phn tch v thit
k h thng thng tin s trnh by chi tit v c th hn.
Cc bc phn tch v thit k. phn tch v thit k mt m hnh
hng i tng, cn thc hin cc giai on sau y:
Chng 13. Lp trnh hng i tng

T r a n g | 124
C
+
+

- Bc 1. M t bi ton. Mt bi ton s c miu t di dng ngn ng
t nhin. N ch yu da vo yu cu ca khc hng v s tr gip khch
hng.
- Bc 2. c t cc yu cu. Sau khi phn tch cc nhn t tham gia vo
trong m hnh, ta cn tin hnh xem xt cc tc nhn tc ng vo tng
nhn t. Mi quan h gia cc nhn t
- Bc 3. Trch chn i tng. Sau khi tng hp cc tc nhn v nhn t
trong m hnh. Chng ta cn tin hnh la chn chng. Vic loi b cc
nhn t v tc nhn khng cn thit l rt quan trng. N s gip cho m
hnh tp trung vo cc nhn t quan trng v cn thit, trnh phn tch v
thit k trn lan.
- Bc 3. M hnh ha cc lp i tng. Sau khi chn la cc i tng
cn thit. Chng ta phn tch tng i tng. Khi phn tch i tng, ta cn
lu tp trung vo nhng th ct li ca mi i tng, trnh a vo
nhng phng thc v thuc tnh khng cn thit, khng quan trng ca
i tng chnh l tnh tru tng ha ca d liu. Khi phn tch,
chng ta cng cn lu n cc tnh cht chung ca tng i tng. Nu
cc i tng c nhiu tnh cht chung, chng ta nn xy dng mt i
tng mi, cha cc tnh cht chung , mi i tng cn li s tha k t
i tng ny, nhn c cc tnh cht chung.
- Bc 4. Thit k tng i tng. Chng ta cn m bo rng, mi i
tng phi c cc phng thc v thuc tnh ring ln cc phng thc v
thuc tnh chia s. Cc phng thc ring ch c bn thn i tng mi c
quyn thay i. Cc phng thc chia s c th c truy cp bi i tng
khc theo cc mc khc nhau.
- Bc 5. Xy dng v kim th m hnh. Bt tay vo xy dng m hnh.
y, chng ta s dng ngn ng UML m t. Sau khi xy dng xong m
hnh, cn tin hnh kim th m hnh. Kim th cc m hnh trong cc tnh
hung thc t l cn thit m bo rng m hnh nhn c l ph hp,
trc khi bt tay vo vit chng trnh.
Trn y, ch l nhng bc ngh chng ta c mt ci nhn tng qut
khi phn tch v thit k. C th c nhiu cch phn tch v thit k mt
m hnh. Nhng hy lun m bo rng, m hnh thu c khng nhng
t hiu qu cao, m cn m bo rng n phi d dng bo tr v nng cp.
Mi khi c mt li xut hin, chng ta cng cn bit khoanh vng thu
nh phm vi pht hin li.
Chng ta s ly mt v d nh. Phn tch hng i tng m hnh qun
l ca hng bn xe p. Trong m hnh ny, ta cn qun l cc nhm i
tng sau: i tng xe p, i tng chi nhnh bn hng, i tng
khch hng v i tng nhn vin bn hng.
- i tng xe p: chng ta cn qun l m s xe (m s gm hai phn:
phn id chi nhnh bn hng + m s vch), loi xe, mu sc, gi bn, nc
Chng 13. Lp trnh hng i tng

T r a n g | 125
C
+
+

sn xut (cc thuc tnh chung). i tng xe p a hnh: s bnh rng,
cch ln rng (bng tay/t ng), chng sooc. i tng xe p du lch: xe
n/i, t ng (h tr t chy bng in hay khng), chiu sng
(c/khng). Xe ua th thao: iu chnh cao (c/khng), cc ch p
(p th gin, p tng tc, p chm).
- i tng khch hng v nhn vin bn hng: h v tn, s CMND. i
tng khch hng: cch thc thanh ton (tin mt/chuyn khon), cch
thc giao hng (nhn ti ch/ a n tn nh). i tng nhn vin bn
hng: id chi nhnh bn hng, ngy thng nm sinh, qu qun, a ch, m s
thu, lng
- i tng chi nhnh bn hng: id chi nhnh bn hng, a ch.
Nu yu cu qun l nhiu hn cc thng tin ca tng i tng, khi ta
cn b sung thm cc thuc tnh tng ng ny.
i vi cc phng thc thc thi hnh ng, tng ng vi mi thuc tnh,
ta c hai phng thc ch nh v tip nhn. V d, i tng nhn vin,
c h v tn. Tng ng vi thuc tnh ny, ta c phng thc ch nh
t tn cho nhn vin (t tn l thit lp tn gi trong phn mm qun l)
v tip nhn tn khi c yu cu.
i tng khch hng c phng thc quyt nh (quyt nh thc hin
giao dch). i tng nhn vin bn hng c phng thc tip nhn (nhn
giao dch). i tng a im bn hng c phng thc nhn hng (nu
hng cn y th khng tip nhn thm).
Theo nh phn tch trn, i tng xe p l i tng chung. Cc i
tng xe p th thao, xe p du lch, xe p a hnh k tha t lp xe p.
i tng con ngi qun l thng tin chung. V cc i tng nhn
vin v khch hng tha k t lp con ngi. Cui cng l i tng chi
nhnh bn hng. Theo nh cch phn tch ny, ta c s lp nh sau:

Hnh 20 Minh ha s lp
Chng 13. Lp trnh hng i tng

T r a n g | 126
C
+
+

Trong s ny, cc phng thc v thuc tnh ca mi lp i tng nh
phn tch trn. trnh rm r, cc phng thc ch biu din s
lc.
Lp v i tng
Lp l s biu din ca i tng trong lp trnh v ngc li i
tng l s th hin ca lp. Mt i tng gm c: thuc tnh v phng
thc. Chng ta c th xem mt lp nh l mt kiu d liu, cn i tng l
bin. Lp c khai bo nh t kha class
class tn_lp{
cc_thuc_tnh
cc_phng_thc
} [tn_i_tng];
tn_lp: l tn ca lp.
tn_i_tng: l tn ca i tng.
Khai bo lp tng i ging khai bo struct.
Cc thuc tnh c khai bo nh khai bo bin. Cc phng thc c
khai bo nh khai bo hm. Chng c th c ch nh bng mt trong ba
t kha: private, protected v public.
o private: cc thnh vin (bin thnh vin hoc hm thnh vin) ca cng
mt lp hoc t mt hm bn ca n c th truy cp.
o protected: cc thnh vin ca cng mt lp hoc t mt hm bn ca n
hoc t mt lp dn xut ca n hoc bn ca mt lp dn xut ca n
u c th truy cp. Mc truy cp ln nht trong trng hp ny l bn
ca lp dn xut. Chng ta s tho lun thm trong nhng phn sau.
o public: cc thnh vin c th truy cp ln nhau t mi lp.
Theo mc nh, nu khng ch nh t kha, th private c n nh.
class Humans{
string name;
int age;
public:
void setName(string);
void setAge(string);
string getName(void);
int getAge(void);
Chng 13. Lp trnh hng i tng

T r a n g | 127
C
+
+

}man;
Humans l tn lp, cha cc thuc tnh l name v age, chng khng c
ch nh t kha, nn private s c s dng. Cc phng thc setName,
setAge, getName v getAge c ch nh l public. Trong trng hp ny,
man l mt i tng th hin ca lp Humans.
Sau khi khai bo lp, ta cn b sung phn thn lp tng ng vi cc hm
thnh vin. Hoc ta c th b sung trc tip vo trong lp tng t khai
bo hm trc tip, hoc s dng khai bo prototype. i vi khai bo
prototype, xc nh mt phng thc l ca mt lp no , ta s dng
ton t phm vi :: theo sau tn lp.
Chng trnh Kt qu
#include<iostream>
using namespace std;
class Humans{
string name;
int age;
public:
void setName(string);
void setAge(int);
string getName(void);
int getAge(void);
};
void Humans::setName(string s){
name = s;
}
void Humans::setAge (int a){
age = a;
}
string Humans::getName(void){
return name;
}
int Humans::getAge(void){
return age;
}
int main(){
Humans man;
man.setName(Jack);
man.setAge(21);
cout<<The man: <<man.getName()<<, age
The man: Jack, age 21
Chng 13. Lp trnh hng i tng

T r a n g | 128
C
+
+

<<man.getAge();
return 0;
}
Gii thch: Hm setName s gn bin s cho thnh vin name, tng t cho
hm setAge s gn bin a cho thnh vin age. Hm getName tr v d liu
nhn c t thnh vin name v hm getAge nhn c d liu t
thnh vin age. Hai phng thc setName v setAge gi l phng thc
setter. Phng thc getName v getAge gi l phng thc getter. Cc
phng thc setter dng nhp d liu cho cc thuc tnh thnh vin, cc
phng thc getter dng nhn gi tr t cc thuc tnh thnh vin
c nhp bi setter (hoc phng thc khi to). Chng ta cn lu rng,
hm main khng thuc lp Humans, do , n khng th truy xut n cc
thuc tnh thnh vin trong trng hp ny, v chng c khai bo mc
nh l private.
Ton t phm vi :: s gii hn s truy cp bt hp l ca nhng hm
khng thuc lp Humans hay l bn ca Humans. y l mt cch thc
quy nh mt phng thc c phi l thnh vin ca mt lp hay khng.
Cch thc th hai, c th khai bo hm trc tip ngay bn trong lp. V bn
cht, hai cch ny khng c s khc bit no.
Lp cng c tc dng nh l mt kiu d liu, do , ta cng c th
khai bo nhiu i tng ca cng mt lp hay mng cc i tng.
Chng trnh Kt qu
#include<iostream>
using namespace std;

class Humans{
string name;
int age;
public:
void setName(string);
void setAge(int);
string getName(void);
int getAge(void);
};

void Humans::setName(string s){
name = s;
Name and age of Student
1
Nam
21
Name and age of Student
2
Binh
22
Name and age of Student
3
Xuan
22
Name and age of Student
4
Tuan
Chng 13. Lp trnh hng i tng

T r a n g | 129
C
+
+

}
void Humans::setAge (int a){
age = a;
}
string Humans::getName(void){
return name;
}
int Humans::getAge(void){
return age;
}
#define MAX 5

int main(){
Humans man[MAX];
for(int i=0; i<MAX; i++){
string s;
int a;
cout<<"Name and age of Student "
<<(i+1)<<endl;
cin>>s;
cin>>a;
man[i].setName(s);
man[i].setAge(a);
}
cout<<"=====Students====="<<endl;
for(int i=0; i<MAX; i++)
cout<<"The man: "<<man[i].getName()<<",
age "<<man[i].getAge()<<endl;
return 0;
}
21
Name and age of Student
5
Lan
22
=====Students=====
The man: Nam, age 21
The man: Binh, age 22
The man: Xuan, age 22
The man: Tuan, age 21
The man: Lan, age 22
Trong trng hp ny, bin man l mt mng cc i tng Humans.
Chng trnh minh ha cho vic nhp tn sinh vin, tui ca h v lu vo
mt mng. Sau , xut kt qu ra mn hnh. D l cng l s th hin ca
lp Humans, nhng cc i tng man[1], man[2], c cc thuc tnh hon
ton khc nhau.
C s ca lp trnh hng i tng l d liu thnh vin v cc hm
thnh vin ca mt i tng. Chng ta hon ton khng s dng mt tp
cc bin ton cc truyn qua mt hm (hay tp cc bin cc b truyn
theo tham bin), m thay vo , chng ta s dng cc i tng cng vi
Chng 13. Lp trnh hng i tng

T r a n g | 130
C
+
+

d liu thnh vin v hm thnh vin ca n. Cc hm thnh vin tc ng
trc tip ln cc d liu thnh vin.
Hm to v hm hy
Trc khi s dng mt i tng, chng ta cn khi to gi tr cho n
trnh gp phi nhng gi tr khng mong mun khi thc thi chng
trnh. Mt cch thc m chng ta s dng trn l s dng phng thc
setter. Mt phng thc n gin hn, chng ta c th s dng hm khi
to (hay gi tt l hm to). Vic khai bo hm to cng tng t nh khai
bo hm thnh vin khc, tuy nhin nht thit tn hm to phi trng vi
tn lp.
Chng trnh V d
#include<iostream>
using namespace std;
class Humans{
string name;
int age;
public:
Humans(string, int);
string getName(void);
int getAge(void);
};
Humans::Humans (string s, int a){
name = s;
age = a;
}
string Humans::getName(void){
return name;
}
int Humans::getAge(void){
return age;
}
int main(){
Humans man(Jack, 21);
cout<<The man: <<man.getName()<<, age
<<man.getAge();
return 0;
}
The man: Jack, age 21
Hm to khng c kiu d liu tr v - tng ng vi kiu void. Tuy nhin
chng ta s khng s dng t kha void trc khai bo hm to.
Chng 13. Lp trnh hng i tng

T r a n g | 131
C
+
+

Nu mt i tng c to ra, nhng ta khng mun s dng
n n na, thu hi b nh, ta cn s dng mt phng thc hy b
cc d liu thnh vin ca n l hm hy. Hm hy cng l mt hm
thnh vin ca lp. N khng c kiu d liu tr v, nhng ta cng khng
s dng t kha void trc khai bo hm hy. Hm hy c tn trng vi
tn lp v pha trc tn hm hy l du ~. Hm hy s t ng c gi
khi phm vi hot ng ca i tng kt thc. Phm vi hot ng ca mt
i tng cng ging nh phm vi hot ng ca mt bin cc b - khai bo
trong phm vi no, th ch c tc dng trong phm vi .
Chng trnh V d
#include<iostream>
using namespace std;
class Humans{
string name;
int age;
public:
Humans(string, int);
~Human();
string getName(void);
int getAge(void);
};
Humans::Humans (string s, int a){
name = s;
age = a;
}
Humans::~Humans()
{
//do something
//delete pointer;
}
string Humans::getName(void){
return name;
}
int Humans::getAge(void){
return age;
}
int main(){
Humans man(Jack, 21);
cout<<The man: <<man.getName()<<, age
<<man.getAge();
The man: Jack, age 21
Chng 13. Lp trnh hng i tng

T r a n g | 132
C
+
+

return 0;
}
Chng cht hm to
Cng nh cc hm khc trong C++ cho php chng cht hm, hm to
cng c th b chng cht. Khi chng cht hm to th danh sch tham s
phi khc nhau (kiu d liu hoc s lng tham s). Chng ta cn nh
rng, khi chng cht hm th trnh bin dch s gi mt hm tng ng vi
danh sch tham s ca n. Trong trng hp chng cht hm to, th qu
trnh gi l t ng khi i tng c to ra, do , mt hm to s c
gi t ng tng ng vi danh sch tham s ca n.
Chng trnh V d
#include<iostream>
using namespace std;
class Humans{
string name;
int age;
public:
Humans(void);
Humans(string, int);
string getName(void);
int getAge(void);
};
Humans::Humans (void){
name = Default;
age = 21;
}
Humans::Humans (string s, int a){
name = s;
age = a;
}
string Humans::getName(void){
return name;
}
int Humans::getAge(void){
return age;
}
int main(){
Humans man(Jack, 21);
Humans default;
The man: Jack, age 21
The default: Default, age
21
Chng 13. Lp trnh hng i tng

T r a n g | 133
C
+
+

cout<<The man: <<man.getName()<<, age
<<man.getAge()<<endl;
cout<<The default: <<default.getName()<<,
age <<default.getAge();
return 0;
}
Gii thch: trong trng hp v d trn, to i tng thuc lp
Humans, ta c th s dng mt trong hai hm to tng ng:
Humans(void) hoc Humans(string, int). Nu gi theo phng thc hm
to khng i s, th tn gi v tui s c to mc nh. Cn nu gi theo
phng thc c i s, th tn gi v tui s c to theo tham s truyn
vo. Ta cng cn lu trong cch gi hm to, i vi hm to c i s, th
sau tn i tng, chng ta cn cung cp tham s tng ng vi tham s
hm to bn trong du (). Cn i vi hm to khng i s, th hy khai
bo n nh khai bo bin m khng h c bt k du () no.
Humans man(); //Sai
Humans man; //ng
Humans man = Humans(); //ng
Ch : Khi ta khng khai bo mt hm to mc nh khng tham s v ch
khai bo hm to mc nh c tham s, th vic khai bo mt i tng theo
cch Humans man; l khng c php. Nu ta khng to ra mt hm to
no, th iu ny l hp l.
Hm to sao chp
Mt i tng c th c to ra t hm to theo cch khi gn cc
d liu thnh vin ca n cho mt gi tr no . Chng ta hon ton c th
khi to mt i tng t mt i tng khc bng cch s dng ton t
gn. Tuy nhin, trong thc t, nu d liu ca i tng ln, phc tp, th
vic s dng ton t gn s thc thi rt chm v c th gy ra mt s li lin
quan n hy i tng trong vng b nh. khc phc nhc im ny,
ta c th s dng hm to sao chp. Khi s dng hm to sao chp, trnh
bin dch s sao chp ton b d liu thnh vin ca i tng sang i
tng khi to.
Humans man(Jack, 21);
//Sao chp trc tip
Humans man2 = man;
//Sao chp hm to
Chng 13. Lp trnh hng i tng

T r a n g | 134
C
+
+

Humans::Humans(const Humans& m){
name = m.name;
age = m.age;
}
Humans man2(man);
Chng ta lu rng, vic sao chp hm to s c quy nh theo tham
chiu hng const Humans&. Nu ta khng vit hm to sao chp, th trnh
bin dch s t ng lm gip(ngha l ta lun c th s dng cch khi to
i tng theo kiu Object newObj(oldObj); vi oldObj l i tng thuc
lp Object c to, d ta c to ra phng thc hm to sao chp hay
khng). Hay ni cch khc, hm to sao chp l mc nh i vi i a
s trnh bin dch ANSI C++ hin i (GCC, Visual C++, Borland C++,
Intel C++).
Tham chiu hng. Phng thc hm to sao chp (hoc tng qut l cc
phng thc c s dng tham chiu hng n lp i tng) c th thc
hin theo tham chiu hoc tham chiu hng (tng ng vi khng hoc c
t kha const), nhng hy lun quy nh l tham chiu (c ton t &). Khi
quy nh tham chiu, i tng tham chiu s tham chiu n a ch ca
i tng gc. D liu ca i tng tham chiu s c nh x theo a ch
ca i tng c tham chiu (khng thc hin vic sao chp trc tip m
l gin tip thng qua a ch ca bin tham chiu). Tuy nhin, cng v l do
ny m i tng c tham chiu c th b thay i gi tr (tng t nh
truyn theo tham bin). iu ny lm vi phm tnh ng gi trong lp trnh
hng i tng. Cng v l do ny, C++ cung cp cho ta t kha const
quy nh mt i tng khi c tham chiu s khng b lm thay i d
liu thnh vin v n c gi l tham chiu hng. Nh vy, ta cn phn
bit ba cch truyn tham s i tng trong mt phng thc: truyn theo
tham tr d liu ca i tng c th c thay i bn trong phng
thc nhng s thay i ny khng lu li, vic sao chp d liu trong
trng hp ny l thc thi trc tip nn thng ch p dng cho cc kiu
d liu nguyn thy n gin; truyn theo tham chiu d liu ca i
tng c th b thay i trong phng thc v n c lu li, n thc hin
vic sao chp d liu mt cch gin tip nn d liu c cu trc phc tp
(nh lp i tng, con tr) c th c sao chp nhanh hn rt nhiu so
vi truyn theo tham tr; tham chiu hng tng t nh tham chiu
nhng khng cho php thay i d liu ca i tng ngay c trong
phng thc.
Chng 13. Lp trnh hng i tng

T r a n g | 135
C
+
+

Hp l Khng hp l

class Humans{
string name;
int age;
public:
Humans(string, int);
Humans(const Humans&);
string getName(void);
int getAge(void);
};
Humans::Humans(const Humans&
m){
name = m.name;
age = m.age;
}


class Humans{
string name;
int age;
public:
Humans(string, int);
Humans(const Humans&);
~Human();
string getName(void);
int getAge(void);
};
Humans::Humans(const Humans&
m){
name = m.name;
age = m.age = 22;//Error
}

Ta c th thy trong trng hp khng hp l, chng ta quy nh i
tng c tham chiu m s cho php i tng khc tham chiu n n
theo tham chiu hng. Nhng i tng tham chiu n n, li c gng thay
i thuc tnh age ca n. Trong trng hp ny, chng trnh s pht sinh
li. Nu quy nh l tham chiu bnh thng (b i t kha const) th khai
bo c xem l hp l (tuy nhin vi phm tnh ng gi).
Khi mt phng thc ca lp i tng s dng tham s chnh l i tng
ca lp , chng ta c th truy cp trc tip n thuc tnh ca i tng
tham chiu k c n c quy nh l private (c tham chiu ln khng
tham chiu). Bn cnh , nu ta quy nh l tham chiu bnh thng, th ta
c th s dng cc phng thc nh getter v setter truy cp n cc
thuc tnh ca n. Nhng nu ta s dng tham chiu hng, th khng c
php truy cp n cc phng thc ca i tng tham chiu hng. Chng
ta ch c th truy cp n cc phng thc hng ca i tng tham chiu
hng ny. Phng thc hng l nhng phng thc c b sung vo t
kha const vo cui khai bo phng thc trong tiu hm prototype v
tiu trong khai bo hm y . Hy quan st cc v d sau y.
V d Tham chiu Hng V d Tham chiu

class PhanSo

class PhanSo
Chng 13. Lp trnh hng i tng

T r a n g | 136
C
+
+

{
private:
int Tu;
int Mau;
public:
//Khai bo cc hm to
PhanSo Nhan(const PhanSo&);
int GetTu(void);
int GetMau(void);
};

PhanSo PhanSo::Nhan(const
PhanSo& p)
{
return PhanSo(Tu*p.Tu,
Mau*p.Mau);
//khng c php vit
PhanSo(Tu*p.GetTu(),
Mau*p.GetMau());
}

int PhanSo::GetTu(void)
{
return Tu;
}

int PhanSo::GetMau(void)
{
return Mau;
}

{
private:
int Tu;
int Mau;
public:
//Khai bo cc hm to
PhanSo Nhan(PhanSo&);
int GetTu(void);
int GetMau(void);
};

PhanSo PhanSo::Nhan(PhanSo& p)
{
return PhanSo(Tu*p.GetTu(),
Mau*p.GetMau());
//hoc PhanSo(Tu*p.Tu,
Mau*p.Mau);
}

int PhanSo::GetTu(void)
{
return Tu;
}

int PhanSo::GetMau(void)
{
return Mau;
}

Trong trng hp ta mun s dng phng thc cho i tng tham chiu
hng, th cn khai bo phng thc GetTu v GetMau l phng thc hng.
Khi , chng ta s dng c php sau y:
int GetTu(void) const;
int GetMau(void) const;
Chng 13. Lp trnh hng i tng

T r a n g | 137
C
+
+


class PhanSo
{
private:
int Tu;
int Mau;
public:
//Khai bo cc hm to
PhanSo Nhan(const PhanSo&);
int GetTu(void) const;
int GetMau(void) const;
};

PhanSo PhanSo::Nhan(const PhanSo& p)
{
return PhanSo(Tu*p.Tu, Mau*p.Mau);
//hoc PhanSo(Tu*p.GetTu(), Mau*p.GetMau());
}

int PhanSo::GetTu(void) const
{
return Tu;
}

int PhanSo::GetMau(void) const
{
return Mau;
}

Vic b sung t kha const vo sau khai bo phng thc s gip cho i
tng tham chiu hng c th gi phng thc hng ny.
Thm mt khi nim na trong C++ m chng ta cn bit l phng thc
tham chiu. Mt phng thc tham chiu cho php ta s dng n nh mt
bin ta c th gn trc tip mt gi tr bin cho phng thc m khng
gp phi mt tr ngi no.
Chng trnh
#include <iostream>

using namespace std;

Chng 13. Lp trnh hng i tng

T r a n g | 138
C
+
+

class complex{
private:
float img;
float real;
public:
complex();
complex(float, float);
float &getimg();
float &getreal();
};

complex::complex( float a, float b )
{
img = a;
real = b;
}

complex::complex()
{
real = 0;
img = 0;
}

float & complex::getreal()
{
return real;
}

float & complex::getimg()
{
return img;
}

int main () {
complex c;
c.getreal() = 2;
c.getimg() = 1;
cout<<c.getreal()<<" + I*"<<c.getimg();
}
Trong v d ny, chng ta thy cc phng thc getter c khai bo l
phng thc tham chiu. Ta c th gn trc tip gi tr cho cc phng
thc ny. Trong trng hp ny, phng thc getter c c hai tnh nng:
Chng 13. Lp trnh hng i tng

T r a n g | 139
C
+
+

va l getter va l setter. Nhng vi tnh nng ca mt phng thc setter
n (tc ch thit lp mt gi tr duy nht).
Tnh ng gi Encapsulation
V d trn a ra cho ta hai phng n: nn hay khng nn s dng
t kha const. Cu tr li l hy nn quy nh vic sao chp hm to l
truyn theo tham chiu hng, bi l cc i tng khc nhau, khng c
quyn chnh sa d liu thnh vin ca nhau, n ch c th truyn thng
ip cho nhau m thi, vic chnh sa d liu thnh vin l do bn thn ca
i tng . iu ny l s th hin tnh ng gi trong lp trnh hng
i tng. Tnh ng gi ca lp trnh hng i tng cn th hin cc
mc cho php truy cp i vi d liu v hm thnh vin tng ng
vi t kho private, protected v public m ta tho lun trn.
Khi nim: tnh ng gi l tnh cht khng cho php ngi dng hay
i tng khc thay i d liu thnh vin ca i tng ni ti. Ch c cc
hm thnh vin ca i tng mi c quyn thay i trng thi ni ti
ca n m thi. Cc i tng khc mun thay i thuc tnh thnh vin ca
i tng ni ti, th chng cn truyn thng ip cho i tng, v vic
quyt nh thay i hay khng vn do i tng ni ti quyt nh.
Chng ta c th kho st v d sau: nu mt bnh nhn cn phi thay
ni tng c th sng, th vic thay th ni tng cn phi c s ng
ca bnh nhn. Khng ai c th t ng thc hin iu ny (ch khi bnh
nhn ri vo tnh trng hn m, th ngi nh bnh nhn mi quyt nh
thay h). Ni tng l cc thuc tnh c hu ca bnh nhn. Cc phng thc
thay th ni tng ca i tng bc s khng phi l phng thc thnh
vin ca i tng bnh nhn (bnh nhn khng th t thay th ni tng
cho mnh v bc s khng c quyn thay th ni tng cho bnh nhn nu
khng c s ng ca h). Do , h mun thc hin th cn c phng
thc ng ca bnh nhn (phng thc thnh vin ca i tng bnh
nhn). Phng thc ng ca bnh nhn ny cng khng th no p dng
cho bnh nhn kia (bnh nhn A khng th quyt nh thay th ni tng cho
bnh nhn B). Nh vy, d liu thnh vin ca i tng no, th ch c i
tng mi c quyn thay i.
Trong mt vi gio trnh, tnh cht ny cn c gi l tnh ng gi
v n du thng tin (encapsulation and information hiding).
Chng 13. Lp trnh hng i tng

T r a n g | 140
C
+
+

Con tr i tng
Chng ta lm quen vi mng i tng v chng ta cng bit
rng c s tng ng 1-1 gia mng v con tr. Trong phn ny, chng ta
s tho lun v con tr i tng. Chng ta vn s dng lp Humans trn
cho cc v d minh ha trong phn ny. Vic khai bo con tr i tng
hon ton tng t nh khai bo con tr d liu.
Humans *man;
truy cp n cc phng thc thnh vin bn ngoi lp (hm thnh
vin), ta s dng du -> (v ch c cc phng thc thnh vin c ch
nh l public). Khi gi phng thc khi to, ta c th gi theo cch m ta
s dng cho con tr d liu. Hoc c th s dng ton t new.
Chng trnh Kt qu

int main()
{
Humans man(Andy, 22);
Humans *man0 = &man;
//Hoc
Humans *man1 = new Humans(Jack, 21);
cout<<man0->getName()<<, <<endl<<man0-
>getAge()<<endl;
cout<<man1->getName()<<endl<<man1->getAge();
return 0;
}
Andy, 22
Jack, 21
Ngay sau ton t new, chng ta gi phng thc khi to ca n. Trong v
d trn, ta ang khi to mt i tng duy nht. Nu mun to mt danh
sch cc i tng theo dng con tr, ta c th s dng ton t new[] m ta
tho lun trn.
Chng 13. Lp trnh hng i tng

T r a n g | 141
C
+
+

Khi lin i n con tr, c nhiu vn lin quan n cch c. Chng ta
c th tng kt theo bng bn di y
Biu thc Cch c
*x tr bi x
&x a ch ca x
x.y thnh vin y ca i tng x
x->y thnh vin y ca i tng tr bi x
(*x).y thnh vin y ca i tng tr bi x
x[i] i tng th i tr bi x
Lp c khai bo nh t kha struct v union
Trong C++, mt lp c th c khai bo nh vo t kha struct hoc
t kha union. Chng ta bit t kha struct dng khai bo kiu d
liu struct v n cha cc d liu thnh vin. T kha union dng khai
bo kiu d liu union v cng cha cc d liu thnh vin. Tuy nhin,
chng vn c th cha cc hm thnh vin. Khi khai bo lp bng t kha
struct, khng c mt s khc bit no so vi t kha class. Ch c duy nht
mt s khc bit, l theo mc nh, nhng phng thc thnh vin v d
liu thnh vin no khng c ch nh t kha quy nh mc truy cp
(private, protected, public) th trong lp c khai bo bng t kha class
s l private cn trong lp c khai bo bng struct s l public. Cn i
vi t kha union c vi s khc bit, tuy khng th dng khai bo mt
lp hon ho nh t kha struct hay class, nhng n vn c th cha cc
phng thc bn trong n. Nu khng ch nh t kha quy nh mc truy
cp, th n s mc nh l public.
Nu vit mt lp vi y hm to, hm hy v cc phng thc
khc bng t kha class, th khi thay th bng t kha struct, s khng c
nhiu s thay i. Nu thay th bng t kha union, th trnh dch s thng
bo li. S d nh th l bi v d union cho php cha phng thc thnh
vin, nhng n khng h tr khai bo prototype, khng h tr d liu kiu
string.
Ch : Hy lun s dng t kha class khai bo lp.
Con tr this
Con tr this tr vo d liu thnh vin ca chnh n. iu ny c
ngha l con tr this ch c phm vi tc dng trong mt lp. Mt iu cc k
Chng 13. Lp trnh hng i tng

T r a n g | 142
C
+
+

quan trng, l con tr this ch hot ng vi cc d liu thnh vin v cc
hm thnh vin c khai bo l khng tnh (non-static). Cc d liu thnh
vin v hm thnh vin tnh (static) khng h tr con tr this.
V d trong phng thc hm to ca lp Complex trn, chng ta c th s
dng this->real truy cp thuc tnh real, this->img truy cp thuc
tnh img. Ta cng c th so snh mt i tng khc vi i tng ni ti
nh vo con tr this ny.
V d Kt qu
#include<iostream>
using namespace std;
class Complex{
float real;
float img;
public:
Complex(float, float);
bool isMe(const Complex&);
};
Complex::Complex(float real, float img){
this->real = real;
this->img = img;
}
bool Complex::isMe(const Complex& c){
if(&c==this)
return true;
else
return false;
}
int main(){
Complex a(3, 2);
Complex b(2, 2);
Complex *c = &a;
cout<<a.isMe(b)<<endl;
cout<<a.isMe(*c);
return 0;
}
0
1
Gii thch: vi vic s dng con tr this trong hm to, ta c th t tn cc
tham s trong hm to trng vi tn cc d liu ca lp. truy cp n
cc thuc tnh ca lp, ta s dng con tr this. Hm thnh vin isMe s kim
tra mt i tng c phi l chnh n hay khng (c cng a ch trn b
Chng 13. Lp trnh hng i tng

T r a n g | 143
C
+
+

nh). D l mt bn sao ca n (c d liu thnh vin ging nhau) th kt
qu nhn c cng l sai (0). Trong hm main, ta khi to hai i tng a
v b. i tng con tr c s tr vo a ch ca i tng a. iu ny c
ngha l c s c cng vng a ch vi a, cn b th khng. Khi gi hm
a.isMe(b) s cho kt qu l sai (0) v a.isMe(*c) s cho kt qu l ng (1).
Thnh vin tnh T kha static
Mt lp c th cha cc thnh vin tnh hoc khng tnh. Nu khng
ch nh t kha l static cho cc thnh vin, th theo mc nh, n s l non-
static. Nu mun quy nh cho mt thnh vin no l tnh, th ta b sung t
kha static vo trc n. Nu l thnh vin khng tnh, ta khng cn khai
bo bt k t kha no.
Mt d liu thnh vin tnh ca lp nh l mt bin ton cc ca lp
. Bi mi s thay i d liu thnh vin tnh ca i tng ny u c tc
dng ln ton b cc d liu thnh vin tnh ca cc i tng khc.
Mt phng thc khng tnh c quyn truy cp n cc d liu thnh
vin khng tnh. Mt phng thc tnh c th truy cp n d liu thnh
vin khng tnh. Trong trng hp ny, ta cn to ra mt s th hin ca
i tng v truy cp n cc thuc tnh khng tnh t i tng ny.
truy cp n thnh vin khng tnh, ta s dng mt s th hin ca i
tng, sau l du chm (hoc ->), tip n l thnh vin khng tnh.
truy cp n i tng tnh, ta s dng ton t phm vi ngay sau tn lp,
tip n l thnh vin tnh. Cc phng thc tnh v khng tnh c th truy
cp ln nhau.
V d Kt qu
#include <iostream>
using namespace std;
class Car
{
public:
string name;
int serial;
public:
static int count;
static void Show()
{
Car vehicle;
---Call by NonStatic method---
Name: Ford
Serial: 123
---Call by Static method---
Name: Ford
Serial: 123

Count: 2
Chng 13. Lp trnh hng i tng

T r a n g | 144
C
+
+

vehicle.name = "Ford";
vehicle.serial = 123;
cout << "\nName: " << vehicle.name;
cout << "\nSerial: " << vehicle.serial;
}
static void CallShowStatic(){
Show();
}
void CallShowNonStatic(){
Show();
}
};
int Car::count = 2;
int main()
{
Car a;
cout<<"---Call by NonStatic method---";
a.CallShowNonStatic();
cout<<"\n---Call by Static method---";
Car::CallShowStatic();
cout << "\n\nCount: " <<Car::count;
return 0;
}
Gii thch: Hm thnh vin Show l static, nn mun truy cp n cc d
liu thnh vin khng tnh th n cn to mt s th hin ca lp l i
tng vehicle. Hm CallShowStatic l static, hm CallShowNonStatic l
non-static u c th truy cp n hm Show l static mt cch trc tip.
Trong hm main, cc hm non-static c gi thng qua mt s th hin
lp, cn hm static c gi thng qua ton t phm vi. D liu static l
count cng c truy cp thng qua ton t phm vi.
Mc d thnh vin static c th c truy cp trc tip thng qua ton t
phm vi, nhng n cng chu s chi phi ca cc mc truy cp (private,
protected, public).
Ch c cc thnh vin khng tnh mi c th s dng con tr this.
Hm bn v lp bn
Hm bn: nu mt thnh vin ca lp c quy nh l private hoc
protected th ch c cc hm thnh vin ca lp mi c quyn truy cp n
n. Nu mt phng thc khng phi l thnh vin ca lp mun truy cp
Chng 13. Lp trnh hng i tng

T r a n g | 145
C
+
+

n, th n phi l hm bn ca lp . Phng thc bn c th c khai
bo nh t kha friend.
V d Kt qu
#include <iostream>
using namespace std;
class Rectangle
{
private:
int w;
int h;
public:
Rectangle(int, int);
friend int Area(Rectangle);
};
Rectangle::Rectangle(int w, int h){
this->w = w;
this->h = h;
}
int Area(Rectangle rec){
return (rec.w*rec.h);
}
int main()
{
Rectangle rec(2, 5);
cout<<Area(rec);
return 0;
}
10
Gii thch: hm Area l mt hm ton cc, n khng phi l thnh vin ca
lp (v khng s dng ton t phm vi khi khai bo). Nu ta c tnh truy cp
n cc d liu w v h th chng trnh dch s bo li, bi chng c quy
nh l private. Khi ta khai bo hm Area l hm bn, n s gii quyt vn
ny.
Lp bn: nu ta c hai lp A v B, v khai bo rng B l bn ca A, th
khi , cc phng thc ca lp A c th truy cp n cc thuc tnh private
v protected ca lp B.
V d Kt qu
#include <iostream>
using namespace std;
Square: 5x5
Chng 13. Lp trnh hng i tng

T r a n g | 146
C
+
+

class Rectangle
{
private:
int w;
int h;
public:
Rectangle(int, int);
friend class MakeSquare;
};
class MakeSquare{
private:
int w;
int h;
public:
MakeSquare(Rectangle);
void ShowSquare(void);
};
MakeSquare::MakeSquare(Rectangle rec){
this->w = max(rec.w, rec.h);
this->h = max(rec.w, rec.h);
}
void MakeSquare::ShowSquare(void){
cout<<"Square: "<<w<<"x"<<h;
}
int main()
{
Rectangle rec(2, 5);
MakeSquare mk(rec);
mk.ShowSquare();
return 0;
}
Gii thch: Lp Rectangle c quy nh l lp bn ca lp Square, do ,
lp Square c quyn truy cp n cc thuc tnh private v protected ca
lp Rectangle. Hm to ca lp Square truy cp n cc d liu thnh vin
ca lp Rectangle ly chiu di v chiu rng ca i tng rec (d
chng l private), to nn i tng mk. i tng Square c to mi
vi cnh ca n l s o ln nht cc cnh ca i tng Rectangle.
Ta cng lu rng A l bn ca B, th khng c ngha l B cng l bn ca A.
Nh vy, tnh bn c th l mt chiu hoc hai chiu ty thuc vo s quy
nh ca ngi lp trnh.
Chng 13. Lp trnh hng i tng

T r a n g | 147
C
+
+

Chng cht ton t
Trong ngn ng lp trnh hng i tng, c nhiu ngn ng h tr
chng cht ton t (cc ngn ng h tr bao gm C++, Delphi 2009,
C#,VB.net, nhng mc h tr khc nhau; cc ngn ng khng h tr
bao gm Java, Python,). Chng cht ton t (operator overloading) l cch
thc xy dng cc hm thnh vin m tn gi ca chng l cc ton t
c nh ngha trc (+, -, *, v.v.). C++ l ngn ng h tr chng cht
ton t hon ho. Cc ton t sau y c th c chng cht trong C++
Cc ton t c php chng cht
+ - * / = < > += -= *= /= << >> <<= >>= ==
!= <= >= ++ -- % & ^ ! | ~ &= ^= |= || &&
%= [] () , ->* -> new delete new[] delete[]

Cu trc khai bo chng cht ton t
type operator ton_t(tham s){thn hm}
V d sau y s minh ha cho vic chng cht ton t. Chng ta s xy
dng mt lp s phc, xy dng cc php ton cng hai s phc (php ton
hai ngi) v php tng s phc ln 1 n v thc v 1 n v o(php ton
mt ngi) bng cch s dng chng cht ton t.
V d Kt qu
#include<iostream>
using namespace std;
class Complex{
float real;
float img;
public:
Complex(float, float);
Complex operator +(const Complex&);
Complex operator ++(void);
void toString(void);
};
Complex::Complex(float a, float b){
real = a;
img = b;
}
Complex Complex::operator +(const Complex& b){
Complex c(0, 0);
c.real = real + b.real;
2 + 3*I
4 + 3*I
Chng 13. Lp trnh hng i tng

T r a n g | 148
C
+
+

c.img = img + b.img;
return c;
}
Complex Complex::operator ++(void){
Complex c(0, 0);
c.real += ++real;
c.img += ++img;
return c;
}
void Complex::toString(void){
cout<<real<<" + "<<img<<"*I"<<endl;
}
int main(){
Complex a(3, 2);
Complex b(-1, 1);
(a+b).toString();
(++a).toString();
return 0;
}
Ta lu rng, trong phng thc ton t, s tham s hnh thc lun
bng hng ca ton t tr 1. iu ny c ngha l vi php ton mt ngi s
khng c tham s hnh thc, vi ton t hai ngi s c mt tham s hnh
thc. iu ny l d hiu, bi c mt tham s mc nh chnh l bn
thn i tng ni ti (i tng tng ng vi con tr this). Php ton
cng, s cng i tng ni ti vi mt i tng khc. Php ton tng mt
n v thc, mt n v o s lm thay i gi tr ca n v thc v n v
o ca i tng ni ti ln 1. V cc ton t ny tr v kiu s phc, nn ta
hon ton c th thc hin php ton phc hp vi chng (tc l mt biu
thc c nhiu ton t loi ny thc hin trn cc hng t l cc s phc).
(a+ ++b+(a+b)).toString();
Bng vic s dng chng cht ton t, biu thc tnh ton s tr nn n
gin hn. Ta cng c th s dng cch gi a.operator+(b). Hai cch ny cho
kt qu nh nhau. i vi hm ton t + v ++ trn, ta c th vit ngn
gn hn m khng cn khai bo thm mt bin tm:
Complex Complex::operator +(const Complex& b){
return Complex(real + b.real, img + b.img);
}

Chng 13. Lp trnh hng i tng

T r a n g | 149
C
+
+

Complex Complex::operator ++(void){
return Complex(++real, ++img);
}
Vic thc hin cc ton t trn cc i tng cn yu cu i tng trc
phi c khi to gi tr. Ngha l phi c mt hm to cho i tng
. Mc d C++ h tr chng cht nhiu ton t, nhng ta khng nn lm
dng n. Chng ta nn s dng chng cht ton t vi mc ch ng n
(cng hai s phc th s dng ton t + m khng phi l ton t khc, ).
Vic s dng chng cht ton t nh l hm thnh vin p dng cho tt c
cc ton t m C++ h tr. Tr cc ton t gn, hp nht, () v ->. Cc ton
t cn li cng p dng cho cc hm ton cc. Hm ton cc cng nh hm
thnh vin, nhng n khng thuc mt lp no. Vic khai bo hm ton cc
s c thc hin nh sau
type operator@(A)
Trong , @ l k hiu ton t, A l tn lp.
V d Kt qu
#include<iostream>
using namespace std;
class Complex{
public:
float real;
float img;

Complex(float, float);
void toString(void);
};
Complex::Complex(float a, float b){
real = a;
img = b;
}
void Complex::toString(void){
cout<<real<<" + "<<img<<"*I"<<endl;
}
Complex operator -(const Complex &a, const Complex
&b){
return Complex(a.real - b.real, a.img - b.img);
}
int main(){
4 + 1*I
Chng 13. Lp trnh hng i tng

T r a n g | 150
C
+
+

Complex a(3, 2);
Complex b(-1, 1);
(a-b).toString();
return 0;
}
Gii thch: trong v d ny, hm ton t - khng phi l hm thnh vin ca
lp Complex. Do , mun truy cp n cc thuc tnh ca n, ta phi quy
nh cc thuc tnh ny l public hoc phi to thm cc phng thc getter
thu thp d liu hoc quy nh n l hm bn. Cng v n khng phi l
hm thnh vin ca lp Complex, nn s tham s trong php ton mt ngi
l 1, trong php ton hai ngi l 2.
i vi chng cht ton t nhp xut - IO overloading, chng ta c mt
s ch :
+ Nu khai bo hm ton t l mt thnh vin ca lp.
V d Kt qu
#include <iostream>

using namespace std;

class Vector2D{
private:
int x, y;
public:
Vector2D(){
x = 0;
y = 0;
}
Vector2D(int x1, int y1){
x = x1;
y = y1;
}
ostream& operator<<(ostream& os){
os<<"("<<x<<", "<< y<<")";
return os;
}
};

int main()
{
(4, 5)
Chng 13. Lp trnh hng i tng

T r a n g | 151
C
+
+

Vector2D ab(4, 5);
//ab.operator<<(cout);
ab<<(cout);
return 0;
}
Gii thch: hm ton t << s thc thi vic in gi tr ca i tng ni ti (v
n l thnh vin ca lp Vector2D). N l ton t n hng, do , trong
hm ton t khng c mt tham s Vector2D. i vi cch s dng ny, ta
ch c th gi n trong hm main bng mt trong hai cch sau:
ab.operator<<(cout) hoc ab<<(cout). C hai cch gi ny u khng trng
khp vi ton t xut (hay ton t chn d liu). Thng thng, ta s xut
d liu theo chun cout<<d_liu. thc hin iu ny, ta cn s dng
cch hai.
+ Nu khai bo hm ton t khng phi l thnh vin ca lp.
V d Kt qu
#include <iostream>

using namespace std;

class Vector2D{
private:
int x, y;
public:
Vector2D(){
x = 0;
y = 0;
}
Vector2D(int x1, int y1){
x = x1;
y = y1;
}
friend ostream& operator<<(ostream&, const Vector2D&);
};

ostream& operator<<(ostream& os, const Vector2D& v){
os<<"("<<v.x<<", "<<v.y<<")";
return os;
}

(4, 5)
Chng 13. Lp trnh hng i tng

T r a n g | 152
C
+
+

int main()
{
Vector2D ab(4, 5);
cout<<ab;
return 0;
}
Gii thch: trong v d ny, hm ton t l mt hm bn ca lp Vector2D.
N cha tham s Vector2D bi n khng phi l thnh vin ca lp ni ti.
Khi in gi tr, n s in gi tr ca Vector2D ny.
Khi s dng ton t nhp d liu >> (hay ton t trch tch d liu), ta khai
bo hon ton tng t. Kiu d liu tr v lc ny l istream& thay v s
dng ostream& nh trn. Chng ta tin hnh nhp d liu cho nn tham s
Vector2D trong hm cng cn thay i chng ta cn b i t kha const
bi l ta ang tin hnh nhp d liu cho n nn khng th quy nh truyn
gi tr theo tham chiu hng (tc khng cho php thay i gi tr).
V d Kt qu
#include <iostream>

using namespace std;

class Vector2D{
private:
int x, y;
public:
Vector2D(){
this->x = 0;
this->y = 0;
}
Vector2D(int x, int y){
this->x = x;
this->y = y;
}
friend istream& operator>>(istream&, Vector2D&);
};

istream& operator>>(istream& is, Vector2D& v){
is>>v.x>>v.y;
return is;
}
(4, 5)
Chng 13. Lp trnh hng i tng

T r a n g | 153
C
+
+


int main()
{
Vector2D ab;
cin>>ab;
return 0;
}
Cc kiu d liu ostream& v istream& nm trong th vin iostream ca
namespace std (du & quy nh l truyn theo tham chiu hoc phng
thc tham chiu).
Tnh k tha - Inheritance
Mt tnh nng theng cht ca lp trnh hng i tng l tnh k
tha. Nh vo tnh k tha, n cho php mt lp c th dn xut t mt lp
khc, chnh v th chng s t ng tip nhn cc thnh vin ca b m v
b sung thm cc thnh vin ca ring chng. Tnh k tha cho php lp
mi c th nhn c mi d liu thnh vin (private, protected, public) v
cc hm thnh vin (tr hm to, hm hy, hm bn v hm ton t gn =).
Ta c th xt v d v lp ng vt Animal v minh ha tnh k tha
bng lc bn di (Hnh 13).
Lp ng vt Animal c cc thuc tnh thnh vin: tn gi, cn nng. Cc
hm thnh vin: di chuyn, n. Ta xt hai lp dn xut ca n l lp mo Cat
v lp c Fish. Lp Cat c cc thuc tnh thnh vin ring: mu lng, mu
mt. Cc hm thnh vin ring: Bt chut, Leo cy. Lp Fish c cc thuc
tnh thnh vin ring: kiu vy, loi nc (nc ngt, nc mn, nc l).
Cc hm thnh vin: bi, sinh sn (cch thc sinh con nh th no).

Hnh 21 Tnh k tha
Chng 13. Lp trnh hng i tng

T r a n g | 154
C
+
+

Theo nh tnh tha k, lp Cat v Fish khng nhng c nhng thuc
tnh thnh vin v hm thnh vin ring ca tng lp, m n cn c nhng
thuc tnh thnh vin v hm thnh vin ca lp Animal.
T nay, ta s gi lp dn xut Cat v Fish l cc lp con v lp c
dn xut Animal l lp c s (hay lp cha). Ta cn lu rng, tn gi cng
mang tnh tng i, v mt lp c th l con ca lp ny, nhng li l lp
c s ca lp khc. Do , trnh nhm ln, trong nhng trng hp cn
phn bit, ta s gi c th l lp con ca lp no, hay lp c s ca lp no.
quy nh mt lp l dn xut t lp khc, ta s dng ton t : theo
cu trc sau
class Animal{

};
class Cat: T_kha_mc_truy _cp Animal{

};
class Fish: T_kha_mc_truy _cp Animal{

};
Theo cu trc khai bo ny, th Cat v Fish l lp con ca lp c s Animal.
V d Kt qu
#include <iostream>
using namespace std;
class Animal{
protected:
string name;
int weight;
public:
Animal(void);
Animal(string, int);
void move(void);
void eat(void);
};
class Cat:public Animal{
private:
-----Animal Object-----
I can eat
I can move
-----Cat Object-----
I can eat
I can move
I can catch mouse
I can climb tree
Chng 13. Lp trnh hng i tng

T r a n g | 155
C
+
+

string colorf;
string colore;
public:
Cat(string, int, string, string);
void catchmouse(void);
void climb(void);
};
void Animal::move(void){
cout<<"I can move"<<endl;
}
void Animal::eat(void){
cout<<"I can eat"<<endl;
}
Animal::Animal(){
this->name = "";
this->weight = 0;
}
Animal::Animal(string name, int weight){
this->name = name;
this->weight = weight;
}
void Cat::catchmouse(void){
cout<<"I can catch mouse"<<endl;
}
void Cat::climb(void){
cout<<"I can climb tree"<<endl;
}
Cat::Cat(string name, int weight, string colorfc,
string colorec){
this->name = name;
this->weight = weight;
this->colorf = colorf;
this->colore = colore;
}
int main()
{
Chng 13. Lp trnh hng i tng

T r a n g | 156
C
+
+

Animal an("Gau", 100);
Cat ca("Cat1", 3, "black", "blue");
cout<<"-----Animal Object-----"<<endl;
an.eat();
an.move();
cout<<"-----Cat Object-----"<<endl;
ca.eat();
ca.move();
ca.catchmouse();
ca.climb();
return 0;
}
Gii thch: trong chng trnh ny lp Cat tha k t lp Animal. N s k
tha mi d liu thnh vin v hm thnh vin ca lp Animal. hm to
ca lp Cat c th truy cp n cc d liu thnh vin ca lp Animal, th
cc d liu thnh vin ny phi c khai bo mc truy cp l protected
hoc public. i tng ca ca lp Cat ch c th truy cp n cc phng
thc thnh vin ca lp c s l Animal khi lp Animal ny c public
(Cat:public Animal). Mt iu cn lu na l hm to. Khi tha k, th
lp con s khng tha k hm to t lp c s, nhng lp c s cn c mt
hm to mc nh khng i s (hm to ny lun tn ti; nu ta khai bo
thm mt vi hm to, th cn khai bo mt hm to khng c i s).
Cc mc truy cp
Mc cho php truy cp n cc d liu thnh vin t mt lp c cho
trong bng sau
Phm vi public protected private
Thnh vin ca cng mt lp c php c php c php
Thnh vin ca lp dn xut c php c php khng c php
Cn li c php khng c php khng c php
Chng ta cn lu rng trong cch vit v tnh k tha Cat:public Animal c
mt s quy tc chuyn i. Nu cc thnh vin ca lp c s c mc truy
cp l A, khi tha k ta quy nh mc truy cp ca lp con i vi lp c s
l B (A v B c th l private < protected < public) v gi s rng A<B, th
Chng 13. Lp trnh hng i tng

T r a n g | 157
C
+
+

cc thnh vin ny ca lp cha s tr thnh cc thnh vin ca lp con c
mc truy cp l mc truy cp b nht A.
Nh ti gii thiu trn, mt bin thnh vin c ch nh t kha ch
mc truy cp l private th ch c cc phng thc trong cng mt lp hoc
cc phng thc bn mi c quyn truy cp (bao gm hm bn v lp bn).
Nu mc truy cp l public, th mi phng thc u c quyn truy cp
n. Chng ta s tm hiu k hn v t kha protected. Ti trnh by v
cc kh nng m mt phng thc c th truy cp n mt bin thnh vin
c khai bo l protected:
- Tng t nh cc mc truy cp ca private (chnh n v bn ca n).
- T cc phng thc ca mt lp dn xut.
- T cc phng thc bn ca lp dn xut (bao gm hm bn v lp bn).
i vi trng hp u tin, chng ta tm hiu n trong phn hm bn
v lp bn. Chng ta s kho st hai kh nng sau cng. i vi kh nng
th hai, hy quan st v d sau y:
V d Kt qu
#include <iostream>
using namespace std;
class Polygon{
protected:
int w, h;
public:
void SetValue(int w, int h){
this->w = w;
this->h = h;
}
};
class Rectangle:public Polygon{
public:
int GetArea(){
return w*h;
}
};

int main()
{
20
Chng 13. Lp trnh hng i tng

T r a n g | 158
C
+
+

Rectangle rec;
rec.SetValue(4, 5);
cout<<rec.GetArea();
return 0;
}
Gii thch: bn lu trong phng thc GetArea ca i tng Rectangle.
N s dng cc bin thnh vin c tha k t lp Polygon. Nhng bin
thnh vin ny c khai bo l protected, do , n c quyn truy cp n.
Trong trng hp, bn ca mt lp dn xut, ta c th quan st v d minh
ha sau y:
V d Kt qu
#include <iostream>
using namespace std;
class Polygon{
protected:
int w, h;
public:
void SetValue(int w, int h){
this->w = w;
this->h = h;
}
};
class Rectangle:public Polygon{
public:
int GetArea(){
return w*h;
}
friend void ShowWH(Rectangle);
};
void ShowWH(Rectangle p){
cout<<p.w<<"x"<<p.h;
}

int main()
{
Rectangle rec;
rec.SetValue(4, 5);
ShowWH(rec);
return 0;
}
4x5
Chng 13. Lp trnh hng i tng

T r a n g | 159
C
+
+

Gii thch: trong trng hp ny, phng thc ShowWH l bn ca lp dn
xut Rectangle, n c quyn truy cp n cc bin thnh vin c ch nh
protected.
Tnh a k tha Multiple Inheritance
Trong ngn ng lp trnh hng i tng, tnh k tha chia lm hai loi:
ngn ng n tha k v ngn ng a tha k.
Tnh n tha k: l tnh cht cho php mt lp ch c th k tha t
mt lp c s duy nht. Nu mun s dng tnh nng a tha k trong
ngn ng lp trnh loi ny, ta c th cn phi s dng n khi nim
giao din interface. Ngn ng n tha k tiu biu gm: Java, C#,
Delphi.
Tnh a tha k: l tnh cht cho php mt lp c th k tha t nhiu
lp c s. Ngn ng a tha k tiu biu gm: C++.
Khai bo tnh a k tha trong C++ tun theo c php sau
class A: TKMTC1 B, TKMTC2 C, TKMTC3 D,;
Trong ,
+ TKMTC1, TKMTC2, TKMTC3 l cc t kha ch mc truy cp. Chng c th
l public, protected hoc private.
+ Lp A gi l lp con; lp B, C, D gi l cc lp c s.
V d Kt qu
#include <iostream>
using namespace std;
class A{
int a;
public:
void showA(void);
};
class B{
int b;
public:
void showB(void);
};
Im A
Im B
Im C
Chng 13. Lp trnh hng i tng

T r a n g | 160
C
+
+

class C: public A, public B{
int c;
public:
void showC(void);
};
void A::showA(void){
cout<<"I'm A"<<endl;
}
void B::showB(void){
cout<<"I'm B"<<endl;
}
void C::showC(void){
cout<<"I'm C"<<endl;
}
int main()
{
C c;
c.showA();
c.showB();
c.showC();
return 0;
}
Gii thch: trong v d ny, lp C k tha t lp A v lp B. Khi ta khai bo c
l i tng ca lp C, do tnh k tha nn i tng c cha khng ch
thnh vin ca lp c, m cn c cc thnh vin ca lp A v B.
Tnh a hnh Polymorphism
Con tr tr vo lp c s
Mt trong nhng tnh nng theng cht ca lp dn xut l con tr tr
vo lp dn xut s tng thch kiu vi mt con tr ca lp c s.
chnh l s th hin ca tnh a hnh (cng mt lp c s, nhng mi con
tr ca lp dn xut c cc hnh thi th hin khc nhau). Tnh a hnh ny
mang li cho k thut lp trnh hng i tng thm nhng u im trong
vic to dng nhng tnh nng n gin nhng hu dng v linh hot.
Chng ta s bt u vit chng trnh v hnh ch nht v tam gic.
Lp ch nht v tam gic k tha t lp a gic v chng c nhng phng
Chng 13. Lp trnh hng i tng

T r a n g | 161
C
+
+

thc thnh vin ring. Phng thc thnh vin ny cng ni dung, nhng
li c cch th hin khc nhau (cng tnh din tch, nhng din tch hnh
ch nht v hnh tam gic c cng thc tnh khc nhau).
V d Kt qu
#include <iostream>
using namespace std;
class Polygon{
protected:
int w, h;
public:
void setValue(int w, int h){
this->w = w;
this->h = h;
}
};
class Rectangle:public Polygon{
public:
int area(){
return w*h;
}
};
class Triangle:public Polygon{
public:
int area(){
return w*h/2;
}
};
int main()
{
Rectangle rec;
Triangle tri;
Polygon *pol1 = &rec;
Polygon *pol2 = &tri;
pol1->setValue(4, 5);
pol2->setValue(4, 5);
Area of Rectangle: 20
Area of Triangle: 10
Chng 13. Lp trnh hng i tng

T r a n g | 162
C
+
+

cout<<"Area of Rectangle: "<<rec.area()<<endl;
cout<<"Area of Triangle: "<<tri.area()<<endl;
return 0;
}
Trong hm main, chng ta to ra hai con tr i tng ca lp
Polygon l pol1 v pol2. Chng ta truy cp tham chiu cho rec v tri n hai
con tr ny, v chng l hai i tng ca lp dn xut t Polygon, nn
php gn trong trng hp ny l hp l.
Ch c mt gii hn l vic s dng *pol1 v *pol2 thay th cho rec v
tri l khng th (ta khng th s dng phng thc pol1->area() hay pol2-
>area()). Bi v phng thc area() khng phi l mt thnh vin ca
Polygon. gii quyt vn ny, chng ta s s dng phng thc thnh
vin o.
Nh chng ta thy trong v d ny, hai i tng tri v rec l hai i
tng khc nhau tha k t polygon. Nhng chng c cng phng thc
area tnh din tch. Tuy nhin, cch tnh din tch ca hnh ch nht v
hnh tam gic l hon ton khc nhau.
Tnh a hnh. L tnh cht th hin nhiu hnh thi ca i tng.
Cc i tng khc nhau c th c cng phng thc thc thi mt hnh
ng. Nhng mi i tng li thc thi hnh ng theo cch ring ca
mnh, m khng ging nhau cho tt c cc i tng.
Thnh vin o
quy nh mt phng thc l o, chng ta s dng t kha
virtual. Nh vo phng thc o, ta c th nh ngha li mt phng thc
thnh vin ca lp c s bn trong lp dn xut.
V d Kt qu
#include <iostream>
using namespace std;
class Polygon{
protected:
int w, h;
public:
void setValue(int w, int h){
Area of Rectangle: 20
Area of Triangle: 10
Area of Polygon: 0
Chng 13. Lp trnh hng i tng

T r a n g | 163
C
+
+

this->w = w;
this->h = h;
}
virtual int area(){
return (0);
};
};
class Rectangle:public Polygon{
public:
int area(){
return w*h;
}
};
class Triangle:public Polygon{
public:
int area(){
return w*h/2;
}
};
int main()
{
Rectangle rec;
Triangle tri;
Polygon pol;
Polygon *pol1 = &rec;
Polygon *pol2 = &tri;
Polygon *pol3 = &pol;
pol1->setValue(4, 5);
pol2->setValue(4, 5);
pol3->setValue(4, 5);
cout<<"Area of Rectangle: "<<pol1-
>area()<<endl;
cout<<"Area of Triangle: "<<pol2-
>area()<<endl;
cout<<"Area of Polygon: "<<pol3-
>area()<<endl;
Chng 13. Lp trnh hng i tng

T r a n g | 164
C
+
+

return 0;
}
Nu g b t kha virtual th kt qu s l 0, 0 v 0. S d l v trong trng
hp ny area() l phng thc thnh vin ca lp Polygon. D phng
thc ny b qu ti trong cc lp thnh vin, nhng cc i tng *pol1,
*pol2, *pol3 l cc i tng ca lp Polygon, nn khi gi phng thc
area() l gi n phng thc area() ca Polygon.
Nh vy, vi t kha virtual, cc phng thc ca cc lp dn xut c th
thc hin cc phng thc thnh vin ring m phng thc thnh vin
c th trng tn vi phng thc thnh vin ca lp c s.
Ta cn lu rng, mt s ngn ng quy nh virtual l mc nh cho cc
phng thc thnh vin (nu khng khai bo t kha ny) nh Java, C#.
Nhng ngn ng lp trnh C++ th khng nh vy. Trong C++, t kha
virtual l khng mc nh cho cc phng thc thnh vin.
T kha virtual cn c thm mt ng dng trong nh ngha lp c s o.
Chng ta xt v d sau

Hnh 22 Lp c s o
Chng 13. Lp trnh hng i tng

T r a n g | 165
C
+
+

Trong cy tha k ny, ta thy rng lp F tha k t lp D v E. Lp D tha
k t lp A v B; lp E tha k t lp A v C. iu c ngha l lp F tha
k lp A 2 ln. Khi ta mun truy cp n thuc tnh a (tha k t lp D v E)
th trnh bin dch khng nhn bit c ta mun truy cp n gi tr a ca
lp no.
V d Kt qu
#include<iostream>

using namespace std;

class A
{
public:
int a;
};

class B
{
public:
int b;
};

class C
{
public:
int c;
};

class D:public A, public B
{
public:
int d;
};

class E:public A, public C
error C2385:
ambiguous access of 'a'
Chng 13. Lp trnh hng i tng

T r a n g | 166
C
+
+

{
public:
int e;
};

class F:public D, public E
{
public:
int f;
};

int main()
{
F f;
f.a = 1;//Li
return 0;
}
Trnh bin dch s thng bo li error C2385: ambiguous access of 'a'.
khc phc nhc im ny, ta s dng lp c s o. Khng c nhiu s
khc bit trong trng hp ny. n thun ch b sung t kha virtual vo
trc cc mc tha k ca lp D v E (bi hai lp ny u tha k t lp A
v c tha k bi lp F, l nguyn nhn gy nn li tha k lp A
nhiu ln).
V d Kt qu
#include<iostream>

using namespace std;

class A
{
public:
int a;
};

class B
Khng li
Chng 13. Lp trnh hng i tng

T r a n g | 167
C
+
+

{
public:
int b;
};

class C
{
public:
int c;
};

class D:virtual public A, public B
{
public:
int d;
};

class E:virtual public A, public C
{
public:
int e;
};

class F:public D, public E
{
public:
int f;
};

int main()
{
F f;
f.a = 1;
return 0;
}

Chng 13. Lp trnh hng i tng

T r a n g | 168
C
+
+

Thm mt khi nim m ta cn quan tm qu ti hm. Chng ta cn lu ,
khi nim chng cht hm thnh vin khc vi khi nim qu ti hm thnh
vin (i lc gi l ghi hm thnh vin). Chng cht hm thnh vin
(overload) l vic quy nh nhiu hm cng tn nhng khc tham s, cc
hm ny l thnh vin ca cng mt lp ni ti hoc cc hm ton cc.
Trong khi , qu ti hm thnh vin (override) l cc hm c cu trc
ging nhau nhng thuc hai lp khc nhau v mt trong s chng tha k
t lp cn li, khi , ta ni rng phng thc ca lp cha b phng
thc ca lp con qu ti.
Lp c s tru tng
Lp c s tru tng (abstract base class) c nhiu nt tng ng vi lp
Polygon ca v d trn. Ch c s khc bit l phng thc area() ca lp
Polygon khng thc hin hon ton chc nng ca mt hm m n thun
ta s khai bo virtual int area() = 0;. Ngha l ta ch b sung vo gi tr 0
sau ton t gn. Vi s khai bo dng ny, ngi ta gi l phng thc o
thun ty (pure virtual function). Mt lp c gi l lp c s tru tng,
khi n cha t nht mt phng thc thnh vin o thun ty.
S khc bit cn bn gia lp c s tru tng v lp a hnh l lp c s
tru tng khng th to ra mt s th hin cho n. Ngha l ta khng th
vit Polygon pol; nh trong v d trn. Ta ch c th s dng mt con tr,
tr n n v s dng cc tnh nng a hnh ca n m thi.
V d Kt qu
#include <iostream>
using namespace std;
class Polygon{
protected:
int w, h;
public:
void setValue(int w, int h){
this->w = w;
this->h = h;
}
virtual int area() = 0;
};
Area of Rectangle: 20
Area of Triangle: 10
Chng 13. Lp trnh hng i tng

T r a n g | 169
C
+
+

class Rectangle:public Polygon{
public:
int area(){
return w*h;
}
};
class Triangle:public Polygon{
public:
int area(){
return w*h/2;
}
};
int main()
{
Rectangle rec;
Triangle tri;
/* Polygon pol; Pht sinh li v Polygon l mt
lp tru tng, ta khng th to mt th hin cho
lp tru tng */
Polygon *pol1 = &rec;
Polygon *pol2 = &tri;
pol1->setValue(4, 5);
pol2->setValue(4, 5);
cout<<"Area of Rectangle: "<<pol1-
>area()<<endl;
cout<<"Area of Triangle: "<<pol2-
>area()<<endl;
return 0;
}
Trong v d trn, ta s dng mt phng thc o thun ty n gin. Khi
khai bo mt phng thc o thun ty, ta cn ch :
Tham s ca n nu rng th ta quy nh l void. Nu n l mt kiu
tham chiu (nh cc i tng ca lp) th ta nn quy nh l con tr
void* v sau ny, khi cn s dng n n, ta c th chuyn i con tr
void sang con tr i tng.
Gi tr tr v trong phng thc o thun ty NN quy nh l 0.
Chng 13. Lp trnh hng i tng

T r a n g | 170
C
+
+

V d sau y s cho ta thy cch s dng lp tru tng trong trng hp
tham s bn trong phng thc o thun ty l mt i tng. Ta c mt
lp tru tng Point (lp im) v hai lp Point2D v Point3D tha k
tha Point. Lp Point l mt lp tru tng cha phng thc o thun
ty l KhoangCach. Cc lp Point2D v Point3D s qu ti phng thc o
thun ty ny.
V d Kt qu
#include <iostream>
#include <math.h>

using namespace std;

class Point
{
protected:
float x, y;
public:
float& getX(void);
float& getY(void);
virtual float KhoangCach(void*)=0;
};

float& Point::getX(void)
{
return x;
}

float& Point::getY(void)
{
return y;
}

class Point2D:public Point
{
public:
float KhoangCach(void*);
};

class Point3D:public Point
{
.::-----Nhap toa do cho
hai Point2D u va v-----
::.
+ Toa do u:
1
1
+ Toa do v:
1
2
D(u,v) = 1
.::-----Nhap toa do cho
hai Point3D u va v-----
::.
+ Toa do u:
1
1
1
+ Toa do v:
1
1
2
D(u3,v3) = 1
Chng 13. Lp trnh hng i tng

T r a n g | 171
C
+
+

float z;
public:
float& getZ(void);
float KhoangCach(void*);
};

float Point2D::KhoangCach(void* p)
{
Point2D* q = (Point2D*)(p);
return sqrt(pow(q->x-x,2)+pow(q->y-y,2));
}

float& Point3D::getZ(void)
{
return z;
}

float Point3D::KhoangCach(void* p)
{
Point3D* q = (Point3D*)(p);
return sqrt(pow(q->x-x,2)+pow(q->y-
y,2)+pow(q->z-z,2));
}

int main()
{
Point2D v2;
Point2D u2;
cout<<".::-----Nhap toa do cho hai Point2D u
va v-----::."<<endl;
cout<<"+ Toa do u:"<<endl;
cin>>v2.getX();
cin>>v2.getY();
cout<<"+ Toa do v:"<<endl;
cin>>u2.getX();
cin>>u2.getY();
Point* u = &v2;
Point* v = &u2;
cout<<"D(u,v) = "<<u->KhoangCach(v);
Point3D v3;
Point3D u3;
cout<<endl<<".::-----Nhap toa do cho hai
Chng 13. Lp trnh hng i tng

T r a n g | 172
C
+
+

Point3D u va v-----::."<<endl;
cout<<"+ Toa do u:"<<endl;
cin>>v3.getX();
cin>>v3.getY();
cin>>v3.getZ();
cout<<"+ Toa do v:"<<endl;
cin>>u3.getX();
cin>>u3.getY();
cin>>u3.getZ();
Point* p = &v3;
Point* q = &u3;
cout<<"D(u3,v3) = "<<p->KhoangCach(q);
cout<<endl;
return 0;
}
Gii thch: chng ta cn ch rng, nu khai bo mt lp tru tng (cha
phng thc o thun ty) th lp tha k t n nn c mt phng thc
c khai bo hon ton trng khp vi phng thc o thun ty ny (v
tn gi, danh sch tham s; ch tr php gn = 0 v t kha virtual s khng
xut hin trong phng thc qu ti ca lp con). Nu ta khai bo khng
trng khp, th lp con s c phng thc o thun ty ny, v hin nhin
n cng s l lp tru tng.
Trong v d ny, khong cch c th l gia hai im Point2D hoc hai im
Point3D. Do , trong lp tru tng, ta s s dng void*. Trong lp con, ta
s chuyn i t void* sang Point2D* hoc Point3D* ty thuc vo lp
Point2D hay Point3D.
Tnh tru tng ha - Abstraction
Tnh tru tng ha l tnh cht ch tp trung vo nhng phn ct li ca
i tng, b qua nhng tiu tit khng cn thit. N cn th hin lp
tru tng c s: lp tru tng c s cha cc c tnh chung, tng qut
cho mt nhm i tng. Khi , nhm i tng s tha k t lp tru
tng ny nhn cc thuc tnh chung, ng thi b sung thm tnh nng
mi.
Khi phn tch mt nhm i tng, ta thng tm ra cc im chung v c
trng cho cc i tng, ri t xy dng nn mt lp tru tng c s
cha cc phng thc tc ng n cc cc c trng chung . Mi mt
i tng trong nhm i tng trn khi tha k t lp tru tng c s
Chng 13. Lp trnh hng i tng

T r a n g | 173
C
+
+

s c phng thc c trng cho nhm i tng ny. Tnh tru tng
cng l mt c trng ca ngn ng lp trnh hng i tng.
Hm mu Template Function
Trong nhiu trng hp chng ta cn xy dng hm m kiu d liu
ca cc tham s v kiu d liu ca hm tr v l khng tng minh (c
ngha l chng c dng tng qut, c th l s nguyn, s nguyn di, xu).
Khi , gii quyt vn ny, chng ta c th s dng qu ti hm nh
trn, con tr hm v thm mt cch thc na, l hm mu template
function. khai bo kiu d liu khng tng minh ny, chng ta c th
khai bo nh sau:
template <class T>
V d sau y minh ha vic s dng hm mu template function.
V d Kt qu
#include <iostream>
using namespace std;
template <class T>
T add(T a, T b)
{
return a+b;
}
int main()
{
cout<<add<int>(1, 2)<<endl;
cout<<add<string>(ab, cd)<<endl;
}
3
abcd
Gii thch: khai bo hm mu template function c dng to mt kiu
d liu khng tng minh. Vic xy dng hm add vi kiu d liu tr v l
kiu T v cc tham s ca n cng l kiu T. Do , hm add ny c th s
dng di dng tng qut, dng cng s, cng xu quy nh l cng
s, ta c th quy nh ngay sau tn hm: tn_hm<kiu_d_liu>. Nh vy,
trong v d trn, i tng cout th nht in ra gi tr tng ca hai s nguyn
1 v 2. i tng cout th hai in ra gi tr ghp ni ca hai xu ab v cd.
Lp mu Template class
Tng t hm template, ta cng c khai bo lp template.
template <class T>
Chng 13. Lp trnh hng i tng

T r a n g | 174
C
+
+

class mypair{
T values[2];
public:
mypair(T first, T second)
{
values[0]=first;
values[1]=second;
}
};
int main()
{
mypair<int>x(2, 3);
mypair<float>f(2.3, 3.3);
return 0;
}
Ta c th s hm to vi tham s first v second thuc loi T bng cc tham
s c th c n nh. V d mypair<int> x(1, 2) s s dng hm to ca
lp mypair to i tng cha hai thuc tnh l 1 v 2 thuc s nguyn.
Tng t cho trng hp mypair<float>f(2.3, 3.3).
Khi cn s dng nhiu kiu d liu khng tng minh, ta c th b sung
thm trong khai bo template:
template<class T, class U, class V,>
V khi triu gi phng thc, ta ch n thun ch ch danh kiu d liu
tng ng:
myclass<kiu_d_liu_1, kiu_d_liu_2, kiu_d_liu_3,..> i_tng;
Lp template c s dng rng ri trong lp trnh C++ bi c nhiu lp c
chung cc phng thc v d liu nhng chng ch khc nhau kiu d liu
cho cc bin thnh vin. V d nh trong lp s phc: cc d liu thnh vin
l phn thc v phn o c th l s nguyn, s thc. V d sau y s xy
dng lp s phc theo hng tip cn template class.
V d Kt qu
#include <iostream>

using namespace std;

template <class T>
real=1
image=2
real=3
image=4
4+I*6
Chng 13. Lp trnh hng i tng

T r a n g | 175
C
+
+

class complex{
private:
T real;
T imag;
public:
complex(void);
complex(T, T);
complex(const complex<T>&);
complex operator+(const complex<T>&);
template <class T, class charT, class traits> friend
basic_ostream<charT, traits>&
operator<<(basic_ostream<charT, traits>&, const
complex<T>&);
template <class T, class charT, class traits> friend
basic_istream<charT, traits>& operator>>(basic_istream<charT,
traits>&, complex<T>&);
};

template <class T>
complex<T>::complex(void)
{
real = 0;
imag = 0;
}

template <class T>
complex<T>::complex(T real, T imag)
{
this->real = real;
this->imag = imag;
}

template <class T>
complex<T>::complex(const complex<T>& c)
{
this->real = c.real;
this->imag = c.imag;
}

template <class T>
complex<T> complex<T>::operator+(const complex<T>& c)
{
Chng 13. Lp trnh hng i tng

T r a n g | 176
C
+
+

return complex(real+c.real, imag+c.imag);
}

template <class T, class charT, class traits>
basic_ostream<charT, traits>&
operator<<(basic_ostream<charT, traits>& os, const
complex<T>& c)
{
os<<c.real<<"+I*"<<c.imag;
return os;
}

template <class T, class charT, class traits>
basic_istream<charT, traits>& operator>>(basic_istream<charT,
traits>& is, complex<T>& c)
{
cout<<"real=";
is>>c.real;
cout<<"image=";
is>>c.imag;
return is;
}

int main () {
complex<int> c;
complex<int> d;
cin>>c>>d;
complex<int> x = c + d;
cout<<x;
return 0;
}
Gii thch: trong v d ny, khng c nhiu s khc bit so vi lp s phc
thng thng. Chng ta ch n thun b sung khai bo template<class T>
vo bn trc khai bo lp v khai bo phng thc c s dng kiu d
liu dng chung T. Ring i vi phng thc nhp xut d liu, cn lu :
ta khng th s dng kiu d liu thng thng l ostream& v istream&,
m thay vo l basic_ostream<?, ?> v basic_istream<?,?>. y cng l
hai lp template vi hai i s. iu ny gii thch ti sao trc cc ton t
nhp/xut li b sung thm khai bo template<class T, class charT, class
traits>. Chng ta cng cn ch thm mt im, tt c cc t complex trong
v d trn c phn thnh hai nhm: nhm kiu d liu complex v nhm
Chng 13. Lp trnh hng i tng

T r a n g | 177
C
+
+

tn hm complex. Tn hm to complex ta khng b sung kiu d liu ch
nh T ch n thun l complex. i vi cc t complex cn li, nht thit
phi ch nh kiu d liu T complex<T>. nh ngha class template ch c
phm vi tc dng trong lp hoc hm c ch nh ngay sau n. N khng
phi l mt khai bo c th dng chung. iu ny gii thch v sao ta li s
dng qu nhiu khai bo class template nh trn.

Tng kt v lp trnh hng i tng
C s ca lp trnh hng i tng l cc i tng v lp. i tng
l mt thc th trong th gii thc. Lp m t i tng bng ngn ng lp
trnh. Ngc li, mt i tng l mt s th hin (instance) ca lp.
Ngn ng lp trnh hng i tng c 4 c trng c bn:
- Tnh tru tng ha d liu (abstraction): l kha cnh m cc ngn
ng khng quan tm n nhng tiu tit ca i tng. N ch tp trung
vo nhng th ct li ca i tng. Tnh tru tng cn th hin khi
nim lp tru tng c s.
- Tnh ng gi (encapsulation) hay tnh ng gi v che du thng tin
(encapsulation and information hiding): l tnh cht ch mc chia s
thng tin. Mt i tng khc khng c quyn truy cp v lm thay i
thng tin ca i tng ni ti, ch c i tng ni ti mi quyt nh c
nn thay i thng tin ca mnh hay khng.
- Tnh a hnh (polymorphism): l nhiu hnh thi. Cc i tng khc
nhau c th c cng phng thc thc thi hnh ng, nhng cch thc thc
thi hnh ng c th khc nhau.
- Tnh tha k (hay k tha - inheritance): l tnh cht cho php cc i
tng tip nhn d liu t mt i tng khc m n tha k. Nh vo tnh
tha k, cc i tng c th s dng cc tnh nng ca i tng khc.
Tnh tha k chia lm hai loi: n tha k v a tha k. n tha k l
tnh cht ch cho php mt lp tha k t mt lp c s; cn tnh a tha
k cho php mt lp k tha t nhiu lp c s. C++ l ngn ng lp trnh
h tr a tha k.

Chng 14. Namespace
Trang | 178

CHNG 14. NAMESPACE

T kha namespace
Nh vo namespace, ta c th nhm cc thc th nh lp, i tng v cc
hm di mt tn gi tng ng vi t kha namespace. Theo cch ny,
cc phm vi ton cc li c chia nh ra thnh cc phm vi ton cc con,
m mi mt phm vi ton cc con ny c mt tn gi ring.
khai bo namespace, ta s dng t kha namespace theo c php sau
namespace tn_ca_namespace
{
cc_thc_th
}
truy cp n cc thc th ca namespace, ta s dng ton t phm vi ::
V d Kt qu
#include <iostream>
using namespace std;
namespace first
{
int var = 5;
}
namespace second
{
double var = 3.14;
}
int main()
{
cout<<first::var<<endl;
cout<<second::var<<endl;
return 0;
}
5
3.14
Nh ta thy, trong v d ny c hai bin ton cc l var (lu , hai bin var
ny u l bin ton cc v phm vi hot ng ca n l ton b chng
trnh). D l trng tn, nhng do chng thuc vo cc namespace khc
nhau, nn khai bo ny l hp l.
Chng 14. Namespace

T r a n g | 179
C
+
+

T kha using
T kha using c s dng a mt tn gi t namespace sang vng
khai bo hin ti. Khi s dng using namespace tn_namespace, chng ta
khng cn s dng tn_namespace khi gi n thc th ca n.
V d Kt qu
#include <iostream>
using namespace std;
namespace first
{
int x = 5;
int y = 5;
}
namespace second
{
double x = 1.60;
double y = 3.14;
}
int main()
{
using namespace first;
cout<<x <<endl;
cout<<y<<endl;
return 0;
}
5
5
Trong trng hp ny, khi s dng namespace first, chng ta c th s
dng cc bin trong namespace ca n m khng cn gi n tn ca
namespace. Nhng cng lu rng, nu using c hai namespace th trong
trng hp ny, ta khng th truy cp n cc bin x v y theo cch ny (v
chng trng tn), m ch c th truy cp theo cch s dng ton t phm vi
::
Ta cng c th s dng t kha using nh sau
V d Kt qu
#include <iostream>
using namespace std;
namespace first
{
int x = 5;
int y = 5;
5
3.14
Chng 14. Namespace

T r a n g | 180
C
+
+

}
namespace second
{
double x = 1.60;
double y = 3.14;
}
int main()
{
using first::x;
using second::y;
cout<<x <<endl;
cout<<y<<endl;
return 0;
}
Phm vi ca namespace
Mt namespace c khai bo s dng bng t kha using ch c tc dng
trong phm vi m n c khai bo. iu c ngha l nu ta using
namespace tn_namespace, th n ch c tc dng trong khi lnh m ta
khai bo.
V d Kt qu
#include <iostream>
using namespace std;
namespace first
{
int x = 5;
int y = 5;
}
namespace second
{
double x = 1.60;
double y = 3.14;
}
int main()
{
{
using namespace first;
cout<<x<<endl;
cout<<y<<endl;
}
{
5
5
1.6
3.14
Chng 14. Namespace

T r a n g | 181
C
+
+

using namespace second;
cout<<x<<endl;
cout<<y<<endl;
}
return 0;
}
Ti nh danh cho namespace
Nu mun khai bo mt tn mi cho namespace tn ti, hy s
dng c php
namespace tn_mi_ca_namespace = tn__khai_bo_ca_name_space;
Namespace std
Tt c cc tp trong th vin chun ca C++ u c khai bo nh l
thc th ca namespace std. iu gii thch ti sao khi vit mt chng
trnh trong C++ c s dng cc hm nhp xut c bn, cc kiu d liu nh
string th ta phi s dng khai bo using namespace std.

Chng 15. Ngoi l
Trang | 182

CHNG 15. NGOI L

Cc ngoi l l cch thc gip chng ta tc ng ngc tr li vi cc tnh
hung sinh ra ngoi l .
nm bt c ngoi l, chng ta s dng c php trycatch hoc throw.
Mnh trycatch
Nu vit mt chng trnh c kh nng ny sinh ngoi l, chng ta cn t
n vo trong khi lnh ca t kha try, nu ngoi l pht sinh, hnh ng
x l s c t trong khi lnh ca t kha catch.
V d Kt qu
#include <iostream>
using namespace std;
int main()
{
int a;
try{
throw 20;
}catch(int e){
cout<<e;
}
return 0;
}
20
Gii thch: Trong chng trnh ny, lnh throw ang c vt qua mt ngoi
l tng ng vi m 20, nhng ngoi l ny b nm bt bi cu lnh
trycatch. Do ngoi l pht sinh, nn lnh trong mnh catch c thc
thi.
Nu c nhiu ngoi l pht sinh, ta c th s dng cu trc a tng ca
mnh catch: try{}catch(){}catch(){}
Mnh throw
Khi khai bo mt hm, nu trong hm c kh nng pht sinh ngoi l,
chng ta c th ch nh t kha throw cho n
type tn_hm(danh_sch_tham_s) throw (int)
Chng 15. Ngoi l

T r a n g | 183
C
+
+

Nu ch c throw() ngha l khng ch nh loi d liu trong throw th
hm s cho php vt qua mi ngoi l. Nu hm khng c mnh throw
th s khng c php vt qua ngoi l.
Th vin chun exception
Th vin chun ca C++ cung cp cho chng ta mt th vin qun l cc
ngoi l l exception. N nm trong namespace std. Lp ny c mt hm
to mc nh, mt hm to sao chp, cc ton t, hm hy v mt hm
thnh vin o what(). Hm ny tr v con tr k t pht sinh ngoi l. N c
th c qu ti trong lp dn xut.
V d Kt qu
#include <iostream>
#include <exception>

using namespace std;

class myexception:public exception{
virtual const char* what() const throw(){
return Co ngoai le !;
}
};
int main(){
try{
myexception myex;
throw myex;
}catch(exception& e){
cout<<e.what();
}
return 0;
}
Co ngoai le !
Mi khi c ngoi l xy ra, mnh catch s c thc hin, v ngoi l s
c nm bt, kt qu in ra lun l cu thng bo Co ngoai le.
Khi ta xy dng mt ng dng c kh nng pht sinh ngoi l, ta cn quy
nh lp i tng c xy dng phi tha k t lp exception ny. iu
ny gip chng ta c th nm bt ngoi l v b qua chng bi trong mt s
trng hp cc ngoi l ny c th gy ra cc li khng mong mun cho ng
dng. V d sau y gip ng dng ca chng ta vt qua php chia cho 0
v tip tc thc thi chng trnh.
Chng 15. Ngoi l

T r a n g | 184
C
+
+

V d Kt qu
#include<iostream>

using namespace std;

class MyNumber:public exception
{
private:
float x, y;
public:
virtual const char* what() const throw()
{

return "Chia cho 0";
}
MyNumber(float, float);
float DivMe(void);
};

MyNumber::MyNumber(float x, float y)
{
this->x = x;
this->y = y;
}

float MyNumber::DivMe(void)
{
x/y;
}

int main()
{
MyNumber m(1, 0);
try
{
m.DivMe();
throw m;
}
catch(exception& e)
{
cout<<e.what();
}
Chia cho 0
Chng 15. Ngoi l

T r a n g | 185
C
+
+

return 0;
}
Gii thch: trong v d ny, lp khai bo c kh nng pht sinh ngoi l v
n thc hin php chia (ngoi l tng ng l chia cho 0). iu ny gii
thch v sao ta cn cho n tha k t lp exception. Mi khi gi tr nhp vo
cho bin thnh vin y l 0, th ngoi l Chia cho 0 s pht sinh. Khi ngoi l
pht sinh, ta s dng c php try bao bc quanh vng lnh pht sinh ra
ngoi l (c th l m.DivMe()). Khi ngoi l pht sinh, mnh catch s thc
thi v in ra li tng ng vi hm thnh vin what tc l Chia cho 0.

Chng 16. Lm vic vi file
Trang | 186

CHNG 16. LM VIC VI FILE

C++ cung cp cho ta cc lp sau y lm vic vi file
ofstream: lp ghi d liu ra file.
ifstream: lp c d liu t file.
fstream: lp c/ghi d liu t/ln file.
Cc lp ny l dn xut trc tip hoc gin tin t lp istream v ostream.
Chng ta s dng i tng cin l mt th hin ca lp istream v cout l
mt th hin ca lp ostream. Chng ta cng c th s dng cc i tng
ca lp ofstream, ifstream hoc fstream lm vic trc tip vi file. V d
sau y s cho thy iu ny
V d
#include <iostream>
#include <fstream>

using namespace std;

int main(){
ofstream myfile;
myfile.open(example.txt);
myfile.<<Ghi du lieu ra file;
myfile.close();
return 0;
}
V d ny ch n thun ghi cu Ghi du lieu ra file ln tp example.txt.
Chng ta s nghin cu tng bc khi lm vic vi cc i tng ca ba lp
m chng ta nu trn..
M file
m file trong chng trnh bng mt i tng stream, chng ta s
dng hm thnh vin open(tn_file, ch__m).
Trong ,
Chng 16. Lm vic vi file

T r a n g | 187
C
+
+

- tn_file: l tn ca file m chng ta cn m. Ta cn m bo cung cp
ng dn chnh xc n tp tin ny. Ta cng cn lu ng dn n tp
tin. ng dn c th l ng dn tuyt i hoc tng i. Nu cung cp
ng dn tng i, ta cn tun th nguyn tc nh khi lm vic vi tp
.cpp v .h nh ti trnh by trn.
- ch__m: l tham s ty chn, thng trong C++ n c th l cc c hiu
sau y:
C hiu Gii thch
ios::in M file c.
ios::out M file ghi.
ios::binary M file ch nh phn (thng p dng cho cc
file m ha).
ios::ate Thit lp v tr khi to ti v tr cui cng ca file.
Nu c hiu ny khng thit lp bt k gi tr no, v
tr khi to s t u file.
ios::app Mi d liu c ghi ra file s tin hnh b sung vo
cui file (khng ghi ln file). C hiu ny ch c th
s dng trong tc v m file ghi.
ios::trunc Nu mt file c m ghi tn ti, n s ghi
ln ni dung c.
Cc c hiu ny c th c kt hp bng cch s dng ton t dch bit OR
(|). V d, ti mun m mt file nh phn example.bin ghi d liu v b
sung d liu cui file ny, ti c th vit nh sau
ofstream myfile;
myfile.open(example.bin, ios::out|ios::app|ios::binary);
Thnh vin open ca cc lp ofstream, ifstream v fstream c tham s
ch__m mc nh (trong trng hp tham s ny khng c ch nh)
c a ra trong bng sau:
Lp ch__m mc nh
ofstream ios::out
ifstream ios::in
fstream ios::in|ios::out
Nu tham s c n nh mt gi tr c th, th tham s c s dng s
ghi ln tham s mc nh m khng phi l kt hp vi tham s mc
nh. V d, nu s dng ofstream m file vi tham s ch__m c
Chng 16. Lm vic vi file

T r a n g | 188
C
+
+

quy nh l ios::binary, th tham s m s l ios::binary m khng phi l
ios::out|ios::binary.
Nu s dng hm khi to cho cc lp ny, th phng thc thnh vin
open s t ng c triu gi. Ngha l ta c th vit
ofstream myfile(example.bin, ios::out|ios::app, ios::binary);
thay cho cch vit trn.
kim tra mt file m thnh cng hay cha, chng ta c th s dng
phng thc is_open. Nu m thnh cng, n s tr v gi tr true v
ngc li, nu m khng thnh cng, n s tr v gi tr false.
ng file
Khi chng ta hon tt cng vic vi mt file, chng ta cn thc hin thao tc
ng file li. Tc v ny l bt buc nu ta hon tt cc tc v trn file.
Khi , ta ch n thun triu gi phng thc thnh vin close
myfile.close();
Nu phng thc hy ca i tng c triu gi, phng thc close s
t ng c gi theo.
File vn bn
i vi mt file vn bn, th c hiu ios::binary s khng bao gi c s
dng. Nhng file vn bn ch n thun cha vn bn. c ghi d liu
trn file ny ta s dng ton t xut nhp d liu (<< v >>).
Ghi d liu ln file vn bn
#include <iostream>
#include<fstream>

using namespace std;

int main(){
ofstream myfile (example.txt);
if (myfile.is_open(){
myfile<<Dong 1 da ghi\n;
myfile<<Dong 2 da ghi\n;
myfile.close();
}
else cout<<Khong the ghi du lieu len file;
Chng 16. Lm vic vi file

T r a n g | 189
C
+
+

return 0;
}
V d trn cho thy vic ghi d liu ln file vn bn nh vo ton t <<. V
d tip theo sau y s minh ha cho vic c d liu t file vn bn bng
ton t >>.
c d liu t file vn bn
#include <iostream>
#include<fstream>
#include<string>

using namespace std;

int main(){
ifstream myfile (example.txt);
if (myfile.is_open(){
while(!myfile.eof()){
getline(myfile, line);
cout<<line<<endl;
}
myfile.close();
}
else cout<<Khong the ghi du lieu len file;
return 0;
}
Trong v d ny, chng ta c s dng hm thnh vin eof ca i tng
ifstream. Hm thnh vin ny c chc nng kim tra v tr c l v tr
cui cng ca file hay cha, nu cha, d liu t file s tip tc c c.
Ngc li, n s dng vic c d liu.
Kim tra trng thi ca cc c hiu
V d trn cho ta mt cc thc kim tra trng thi ca cc c hiu. Bng
sau y s lit k cc trng thi c hiu c th c s dng trong C++.
Trng thi Gii thch
bad() Nu tc v c/ghi file b li, n s tr v gi tr true;
ngc li, n s tr v gi tr false.
fail() Tr v gi tr true trong trng hp nh bad(), nhng
nu gp li v nh dng, n cng tr v gi tr true (v
d c s t mt file vn bn).
eof() Tr v gi tr true nu file c c n v tr cui
Chng 16. Lm vic vi file

T r a n g | 190
C
+
+

cng ca file, ngc li, tr v gi tr false.
good() N s tr v gi tr true nu bad(), fail() v eof() khng
pht sinh li.
thit lp li cc mc kim tra trng thi c hiu, ta s dng phng thc
thnh vin clear().
Con tr get v put
Mi i tng lung xut nhp u c t nht mt con tr lung:
- Lung ifstream c con tr istream m ta gi l con tr get tr vo phn
t c th c d liu.
- Lung ofstream c con tr ostream m ta gi l con tr put tr vo
phn t c th ghi d liu.
- Lung fstream c c hai con tr get v put c v ghi d liu.
Nhng con tr lung ni ti ny tr vo v tr c v ghi vi lung c th s
dng cc hm thnh vin sau y:
Hm thnh vin tellg() v tellp()
Hai hm thnh vin ny khng c tham s v tr v gi tr ca mt kiu d
liu dng pos_type. Kiu d liu ny bn cht l mt s nguyn integer. N
m t v tr hin ti ca ca con tr lung get v con tr lung put.
Hm thnh vin seekg() v seekp()
Nhng hm thnh vin ny cho php chng ta thay i v tr hin ti ca
con tr lung get v put. C hai hm ny c chng cht vi hai prototype
khc nhau. Prototype th nht:
seekg(v_tr);
seekp(v_tr);
Vic s dng cc prototype ny gip lm thay i v tr tuyt i (v tr ny
tnh t u file). Kiu d liu ca tham s ny trng vi kiu d liu ca hai
hm tellg() v tellp() trn.
Prototype th hai:
seekg(v_tr, kiu);
Chng 16. Lm vic vi file

T r a n g | 191
C
+
+

seekp(v_tr, kiu);
Vic s dng prototype ny s lm thay i v tr hin ti ca con tr get v
con tr put c xc nh theo v tr tng i theo tham s v_tr v tham
s kiu. Tham s v_tr ca mt thnh vin thuc kiu d liu off_type, n
cng l mt kiu s nguyn, n tng ng vi v tr ca con tr get/put
c t vo. Tham s kiu l mt kiu d liu seekdir, n l mt kiu enum
xc nh v_tr ca con tr get/put k t tham s kiu, n c th nhn
mt trong cc gi tr sau y.
ios::beg v_tr c m t v tr bt u ca lung
ios::cur v_tr c m t v tr hin ti ca lung
ios::end v_tr c m t v tr cui ca lung
iu ny c ngha l hm chng cht hai tham s ny cng tng t hm
mt tham s, nhng v tr bt u tnh trong hm mt tham s lun l t v
tr u tin, cn hm hai tham s c ba v tr c th bt u m bt u
(ios::beg), hin ti (ios::cur) hay cui file (ios::end).
Ta hy quan st v d sau y
V d Kt qu
1. #include <iostream>
2. #include <fstream>
3. using namespace std;
4. int main(){
5. long begin, end;
6. ifstream myfile(example.txt);
7. begin = myfile.tellg();
8. myfile.seekg(0, ios::end);
9. end = myfile.tellg();
10. myfile.close();
11. cout<<Size=<<(end-begin)<< bytes;
12. return 0;
13. }
Size=10 bytes
Gii thch: trong chng trnh trn chng ta ang m mt file example.txt.
Chng ta m kch thc ca file ny. Khi m file, con tr get s t vo v
tr u file. Khi , dng lnh 7 s gn gi tr khi u cho bin begin (trong
trng hp ny s l 0). Dng lnh 8 s t con tr get vo v tr cui cng
ca file (v tr 0 k t cui file tnh ln). Dng lnh 9 s gn v tr hin ti v
tr cui file cho bin end. iu c ngha l gi tr end-begin chnh l kch
Chng 16. Lm vic vi file

T r a n g | 192
C
+
+

thc ca file. Ta cng cn lu rng, trong file vn bn, mt k t tng
ng vi 1 byte cng chnh l quy nh trong C++ (mt kiu char chim
1 byte). Hay ni chnh xc, chng trnh ny m s k t trong file vn bn.
File nh phn
i vi file nh phn, vic c ghi d liu bng ton t tch trch >> v ton
t chn << cng nh hm getline l khng c hiu lc, bi chng khng
c nh dng theo kiu vn bn nh i vi file vn bn trn (khng
dng phm space to khong cch, khng c k t xung dng).
Cc lung ca file gm hai hm thnh vin c v ghi d liu l read v
write. Hm thnh vin write l hm thnh vin ca lp ostream tha k cho
ofstream. V hm read l thnh vin ca lp istream tha k cho ifstream.
Cc i tng ca lp fstream c c hai hm thnh vin ny. Chng c
prototype nh sau:
write(khi_b_nh, kch_thc);
read(khi_b_nh, kch_thc);
, khi_b_nh l mt con tr kiu char (char*) v n biu din a ch
ca mt mng cc byte m n c hoc ghi c. Bin kch_thc l mt
kiu s nguyn integer, n ch nh s cc k t c th c/ghi ln khi b
nh. Chng ta hy quan st v d sau y
V d
#include<iostream>
#include<fstream>
using namespace std;
ifstream::pos_type size;
char* memblock;
int main(){
ifstream file(example.bin, ios::in|ios::binary|ios::ate);
if(file.is_open()){
size = file.tellg();
memblock = new char[size];
file.seekg(0, ios::beg);
file.read(memblock, size);
file.close();
cout<<Hoan tat !;
//Lm vic vi d liu trong con tr memblock
Chng 16. Lm vic vi file

T r a n g | 193
C
+
+

delete[] memblock;
}
else cout<<Khong mo duoc file.;
return 0;
}
Gii thch: trong chng trnh, ta m file example.bin. Ch m file
c (ios::in), theo kiu file nh phn (ios::binary), t con tr get vo cui
file (ios::ate). Sau khi m file, hm file.tellg() s cho bit kch thc thc
ca file. Sau hm file.seekg s t v tr con tr get vo u file (v tr 0 k
t v tr u tin) v tin hnh c theo khi b nh nh vo file.read. Sau
khi hon tt, phng thc close c triu gi kt thc vic c file. Khi
, d liu t file c vo mng memblock. Chng ta c th b sung tc
v thao tc vi d liu nu mun. Cui cng, con tr memblock s b xa
gii phng b nh.
B m v ng b ha
Khi thc thi cc tc v c/ghi d liu vi file, chng ta thc thi nh trn
nhng thng qua mt b m c kiu d liu streambuf. B m ny l mt
khi b nh ng vai tr trung gian gia cc lung v file vt l. V d, vi
ofstream, mi thi im hm put c gi, k t khng ghi trc tip ln file
m n s c ghi ln b m. Khi b m y, mi d liu cha trong
s c ghi ln file (nu l lung ghi d liu) hay xa b lm rnh b
nh (nu l lung c d liu). Tin trnh ny c gi l ng b ha v
c cc tnh hung sau y:
- Khi file ng: trc khi ng mt file, tt c d liu trong b nh nu
cha y vn c ng b v chun b c/ghi ln file.
- Khi b nh y: b m c kch thc gii hn. Khi n y, n s t ng
ng b ha.
- B iu phi: khi cc b iu phi c s dng trn lung, mt tin trnh
ng b dt im s c din ra. Nhng b iu phi ny bao gm: flush
v endl.
- Hm thnh vin sync(): nu hm thnh vin sync() c triu gi, tin
trnh ng b ha s din ra. Hm ny tr v mt kiu integer (int) tng
ng vi -1, nu lung khng c b m lin kt hoc trong trng hp
c/ghi tht bi. Ngc li, n s tr v gi tr 0.

Chng 17. Cc lp th vin
Trang | 194

CHNG 17. CC LP TH VIN

1. Lp s phc complex
y l lp template. Khi khi to mt lp i tng s phc, ta cn ch nh
kiu d liu cho n. N nm trong th vin complex. V d v vic khi to
mt s phc:
complex<float> c(10.2, 3);
s khi to mt i tng s phc m phn thc v phn o ca n l cc
s thc. Thng thng, kiu d liu c ch nh cho lp s phc l kiu
d liu thc: float, double hoc long double. Nhng chng ta hon ton c
th s dng kiu s nguyn.
Cc hm thnh vin ca lp s phc
Tn thnh vin Mc truy cp Chc nng
real
imag
private Phn thc v phn o.
Phng thc khi to:
complex<?> c;
complex<?> c(real, imag);
complex <?> c(d);
public Cc phng thc khi
to: khng tham s, c
hai tham s v hm to
sao chp.
imag() public Phng thc getImage
tr v gi tr phn o.
real() public Phng thc getReal
tr v gi tr ca phn
thc.
operator=
operator+=
operator-=
operator*=
operator/=
public Cc hm ton t thnh
vin: ton t gn, ton
t cng hp nht, ton
t tr hp nht, ton t
nhn hp nht, ton t
chia hp nht.
_Add(complex)
_Sub(complex)
_Mul(complex)
_Div(complex)
protected Cc phng thc cng,
tr, nhn v chia hai s
phc.

Chng 17. Cc lp th vin

T r a n g | 195
C
+
+

Cc hm ton cc (hoc hm bn)
Tn phng thc Chc nng
operator +
operator
operator *
operator /
operator =
operator ==
operator !=
operator >>
operator <<
Ton t cng hai s phc.
Ton t tr hai s phc.
Ton t nhn hai s phc.
Ton t chia hai s phc.
Ton t gn s phc.
Ton t so snh bng.
Ton t so snh khc.
Ton t nhp s phc.
Ton t xut s phc.
real(complex) Tr v phn thc ca s phc.
imag(complex) Tr v phn o ca s phc.
abs(complex) Tr v gi tr modul ca s phc. Modul ca s
phc c tnh theo cng thc
2
+
2
.
norm(complex) Tr v gi tr l chun ca s phc. Chun ca s
phc l bnh phng gi tr ca modul, tc l

2
+
2
.
conj(complex) Tr v s phc lin hp. S phc lin hp ca s
phc a nhn c bng cch thay phn o ca a
bng a.
polar(float, float) Tr v mt s phc trong h ta Decac. Hai
tham s truyn vo tng ng vi modul v
argument ca s phc.

= cos (arg )
= sin (arg )

cos(complex) Tr v gi tr cosin ca s phc.
sin(complex) Tr v gi tr sin ca s phc.
tan(complex) Tr v gi tr tan ca s phc.
cosh(complex) Tr v gi tr cosin hyperbol ca s phc.
sinh(complex) Tr v gi tr sinh hyperbol ca s phc.
tanh(complex) Tr v gi tr tan hyperbol ca s phc.
exp(complex) Tr v gi tr e ly tha ca s phc.
sqrt(complex) Tr v gi tr cn bc hai ca s phc.
log(complex) Tr v gi tr logarith c s t nhin (logarith
nepe) ca s phc.
log10(complex) Tr v gi tr logarith c s 10 ca s phc.
pow(complex, <T>) Tr v ly tha ca s phc. Tham s th hai c
th l s phc, s thc, s nguyn.
Chng 17. Cc lp th vin

T r a n g | 196
C
+
+

y l lp s hc kh hu dng trong tnh ton khoa hc. Chng ta c th
s dng n m khng cn xy dng li lp ny. Tuy nhin, khi bt u tip
xc vi lp trnh hng i tng, cn thit phi xy dng n.
2. Lp ngn xp stack
Lp stack cng l mt lp template. N lm vic theo nguyn tc hng i
vo trc ra sau. Lp stack cung cp cc phng thc lm vic theo
nguyn tc Lifo nh trong hc phn cu trc d liu v gii thut.
Khai bo mt i tng thuc lp stack:
stack<int> s;
Cn lu rng, lp stack nm trong th vin stack. Sau y l mt s hm
thnh vin ca lp stack.
Tn phng thc Mc truy cp Chc nng
stack<?>c;
stack<?,deque, allocator>
public Hm to. i vi hm to th
hai, ta cn s dng cc i
tng deque v allocator. y
cng l cc lp template.
empty() public Phng thc hng. Tr v
kiu bool. Nhn gi tr true
nu stack rng v ngc li
stack khng rng th nhn gi
tr false.
size() public Phng thc hng. Tr v
kiu s nguyn l kch thc
ca stack (tc s phn t ca
stack).
top() public C hai phng thc top c
qu ti: hng v khng hng.
N tr v phn t nm nh
ca stack (tc phn t c
a vo sau cng).
push() public B sung mt phn t mi vo
trong stack.
pop() public Ly ra mt phn t trong
stack. Phng thc ny khng
tr v gi tr ca phn t va
c ly ra.
Chng 17. Cc lp th vin

T r a n g | 197
C
+
+

Stack trong trng hp ny khng b gii hn kch thc (bi n c khai
bo ng).
3. Lp hng i queue
Queue l mt lp template. s dng queue, ta cn khai bo th vin
queue tng ng. Queue lm vic theo nguyn tc Fifo tc vo trc th
ra trc. Sau y l v d v vic to mt i tng queue:
queue<int> q;
Cc phng thc thnh vin ca lp queue:
Tn phng thc Mc truy cp Chc nng
queue<?>
queue<?, deque, allocator>
public Hm to. i vi hm to th
hai, ta cn s dng cc i
tng deque v allocator. y
cng l cc lp template.
empty() public Phng thc hng. Tr v
kiu bool. Nhn gi tr true
nu queue rng v ngc li
queue khng rng th nhn gi
tr false.
size() public Phng thc hng. Tr v
kiu s nguyn l kch thc
ca queue (tc s phn t ca
queue).
front() public C hai phng thc front
c qu ti: hng v khng
hng. N tr v phn t nm
u ra (tc phn t c a
vo u tin).
back() public C hai phng thc front
c qu ti: hng v khng
hng. N tr v phn t nm
u vo (tc phn t c
a vo sau cng).
push() public B sung mt phn t mi vo
trong queue. Phn t c
a vo theo hng back.
pop() public Ly ra mt phn t trong
queue. Phng thc ny
khng tr v gi tr ca phn
Chng 17. Cc lp th vin

T r a n g | 198
C
+
+

t va c ly ra. Phn t
c ly ra theo hng front.
Cng tng t nh stack, queue trong trng hp ny cng khng b gii
hn kch thc (v c kha bo ng).
3. Lp vector
Cn lu rng, lp vector c cu trc tng i ging vi mng. Vector
khng phi l mt lp i tng nh trong hnh hc. Cc phn t ca
vector c sp xp lin tc trong b nh. Chng ta khng th ri rc ha
cc phn t (khi b sung cc phn t, cn b sung mt cch lin tc; nu
khng s b li cp pht b nh). Chng ta c th truy cp n cc phn t
ca vector thng qua ch s hoc iterator.
Chng trnh Kt qu
#include <iostream>
#include <vector>

using namespace std;

int main()
{
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(22);
//=====Cch 1=====
cout<<"Theo chi so:"<<endl;
for (unsigned i=0; i<v.size(); i++)
cout<<v[i]<<endl;
//=====Cch 2=====
cout<<"Theo con tro iterator:"<<endl;
vector<int>::iterator it;
for (it=v.begin(); it<v.end();++it)
cout<<*it<<endl;
return 0;
}
Theo chi so:
10
20
22
Theo con tro iterator:
10
20
22
Theo cch 1, chng ta truy cp n cc phn t ca vector theo cch truy
cp nh i vi mng; cch th hai cho php ta truy cp thng qua con tr
iterator. Sau y, chng ta s tham kho cc phng thc thnh vin ca
lp vector.
Chng 17. Cc lp th vin

T r a n g | 199
C
+
+

Tn phng thc Mc truy cp Chc nng
vector<?>
vector<?, allocator>
public Hm to.
~vector() public Hm hy.
operator = public Ton t gn.
begin() public Tr v iterator tng ng vi
iterator u tin ca vector.
end() public Tr v iterator tng ng vi
iterator cui ca vector.
rbegin() public Tr v iterator nghch o ca
iterator u tin ca vector.
rend() public Tr v iterator nghch o ca
iterator cui ca vector.
size() public Tr v kch thc ca vector.
max_size() public Tr v kch thc cc i ca
vector.
resize(int)
resize(int, ?)
public Thay i kch thc ca vector.
N c hai chng cht hm, tham
s int th nht tng ng vi
kch thc mi ca vector; tham
s template th hai tng ng
vi gi tr c b sung mc
nh.
capacity() public Tr v kch thc b nh cp
pht cho cc phn t ca vector.
Cn lu , c ch cp pht ny
trong C++ l t ng v lun
m bo size()<=capacity().
empty() public Tr v gi tr true nu vector
rng v ngc li.
reserve(int) public Thay i kch thc cho vng
b nh lu tr cc phn t
khi to ca vector. Tham s
ca hm tng ng vi gi tr
tr v ca phng thc
capacity.
operator[int] public Tr v phn t tng ng vi v
tr c ch nh (nh i vi
mng).
at(int) public Tham chiu n phn t tng
ng vi ch s c ch nh.
Phng thc ny tng t nh
Chng 17. Cc lp th vin

T r a n g | 200
C
+
+

ton t [] trn.
front() public Tr v phn t u tin (khng
phi l iterator nh begin).
back() public Tr v phn t cui cng (khng
phi l iterator nh end).
assign(iterator, iterator)
assign(int, ?)
public Khi gn gi tr cho vector.
push_back(?) public B sung mt phn t vo cui
vector.
pop_back() public Loi b phn t pha cui ca
vector.
iterator(iterator, ?)
insert(iterator, ?)
insert(iterator, int , ?)
insert(iterator, iterator,
iterator)
public Phng thc th nht tr v
iterator, ba phng thc cn li
tr v void. Vector s c ni
rng bng cch b sung thm
cc phn t mi. Phng thc
u tin tr v iterator cui
cng ca vector sau khi ni rng
kch thc ca n.
erase(iterator)
erase(iterator, iterator)
public Xa b cc phn t ca vector.
Phng thc u xa mt phn
t, phng thc hai xa cc
phn t trong vng gia hai
tham s c ch nh. Sau khi
xa b, n tr v iterator ca
phn t cui.
swap(vector&) public Hon i gi tr ca hai vector.
clear() public Xa b hon ton cc phn t
ca vector. Sau khi xa b, kch
thc ca n l 0.
get_allocator() public Tr v s lng cc i tng
c cp pht b nh s dng
khi kh to vector.

4. Lp string
Th vin chun string ca C++ cung cp lp template tng ng vi string
v wstring. Cc phng thc thnh vin ca lp string bao gm:
Tn phng thc Mc truy cp Chc nng
string()
string(const string&)
public Cc phng thc khi to:
- Khi to khng tham s.
Chng 17. Cc lp th vin

T r a n g | 201
C
+
+

string(const string&, int, int)
string(const char*, int)
string(const char*)
string(int, char)
- Hm to sao chp.
- Sao chp xu con t v tr
int th nht vi di int
th hai.
- Sao chp cc k t ca
mng xu k t vi di
l tham s int (k t v tr
u tin).
- To mt xu k t c ni
dung l k t char v di
l tham s int.
Cc iterator: begin, end,
rbegin, rend
public Xem phn lp vector.
size, max_size, resize,
capacity, reserve, clear, empty
public Xem phn lp vector.
operator[int]
at
public Xem phn lp vector.
length() public Tr v di ca xu.
operator+= public Cng dn xu.
append(const string&)
append(const string&, int, int)
append(const char*, int)
append(const char*)
append(int, char)
public B sung xu hoc mt phn
ca xu vo xu c. Cc
tham s ny tng t nh
trong phng thc khi
to.
push_back(char) public B sung mt k t vo xu.
assign, erase, swap public Xem lp vector.
insert(int, const string&)
insert(int, const string&, int,
int)
insert(int, const char*)
insert(int, int, char)
insert(iterator, char)
insert(iterator, int, char)
insert(iterator, iterator,
iterator)
public Chn xu con vo xu. Cc
phng thc s dng tham
s iterator hon ton
tng t nh trng hp
lp vector. Phng thc 1
s chn xu con vo xu
ban u ti v tr int.
Phng thc hai tng t,
nhng xu con ch ly t
tham s int th 2 vi
di l tham s int th 3.
Phng thc 3 tng t
phng thc 1. Phng
thc 4 s chn k t char
vo v tr tham s int th
nht vi s ln l tham s
Chng 17. Cc lp th vin

T r a n g | 202
C
+
+

int th 2.
replace public Thay th mt phn ca xu
theo cc tham s tng t
nh phng thc khi to.
c_str public Chuyn sang xu dng C
tng ng.
data public Tr v mng cc k t.
get_allocator public Xem lp vector.
copy(char*, int, int=0) public Sao chp xu.
find(const string&, int=0)
find(const char*, int, int)
find(const char*, int=0)
find(char, int=0)
public Tm kim xu con trong
mt xu.
find_fist_of
find_last_of
find_fist_not_of
find_last_not_of
public Tm kim xu u tin,
cui cng, khng phi l
u tin, khng phi l cui
cng.
substr(int, int) public Tr v xu con t v tr int
th nht vi di int th
hai.
compare public So snh hai xu. Nhn gi
tr 0, nu hai xu bng
nhau v ngc li.
Cc hm ton cc.
Tn phng thc Chc nng
operator+ Cng hai xu.
swap(string&, string&) Hon i ni dung ca hai xu.
operator==
operator!=
operator<
operator>
operator>=
operator<=
Cc ton t so snh hai xu. Xu s>ss nu cc k
t trong s ng trc ss trong bng ch ci.
getline Nhp xu.
operator<< Chn xu v chuyn ha thnh lung stream.
operator>> Trch tch xu t lung stream.

Chng 17. Cc lp th vin

T r a n g | 203
C
+
+

5. Lp list
Tn phng thc Mc truy cp Chc nng
list<?>(allocator)
list<?>(int, ?, allocator)
list<?>(list)
public Hm to.
~list() public Hm hy.
begin, end, rbegin, rend public Xem lp vector.
empty, size, max_size, resize public Xem lp vector.
front, back, push_front,
push_back, pop_front,
pop_back, insert, erase, swap,
clear.
public Xem lp vector.
splice(iterator, list) public Chuyn cc phn t t
danh sch list sang danh
sch cha t v tr c ch
nh.
remove(const T&) public Xa cc phn t c gi tr
c ch nh.
remove_if public Xa phn t v dn danh
sch li.
unique public Xa cc phn t trng lp.
merge public Nhp hai danh sch li.
sort public Sp xp danh sch.
reverse public o ngc th t cc phn
t trong danh sch.
get_allocator public Xem lp vector.

6. Lp map
Map l mt cu trc d liu gm c hai phn l kha v gi tr. Mi kha l
duy nht v n tng ng vi mt gi tr c th. Lp map l mt lp
template.
Tn phng thc Mc truy cp Chc nng
map<?,?>

public Hm to.
~map() public Hm hy.
begin, end, rbegin, rend public Xem lp vector.
empty, size, max_size, resize public Xem lp vector.
insert, erase, swap, clear. public Xem lp vector.
operator[] public Xem lp vector.
Chng 17. Cc lp th vin

T r a n g | 204
C
+
+

key_comp public Tr v key ca i tng.
value_comp public Tr v gi tr ca i
tng.
find public Tr v ch s dng iterator
ca kha tm kim.
count m s i tng c kha
ch nh.
lower_bound Tr v iterator ca bin
di.
upper_bound Tr v iterator ca bin
trn.
equal_range Tr v cp cn trn v cn
di.
get_allocator public Xem lp vector.
7. Lp set
Set l mt dng cu trc d liu m mi phn t ca n l mt kha (ngha
l khng cho php cha cc phn t trng lp). Cc phng thc ca set
hon ton tng t nh ca map. Set cng l mt lp template.
8. Cc lp th vin nhp xut
Th vin cc lung nhp xut

Th vin iostream l th vin hng i tng cung cp cc chc nng
nhp xut c bn s dng lung stream. Mt lung l mt i tng tru
tng c th lm vic vi cc thit b xut nhp. Mt lung v c bn c th
c biu din nh mt dy cc k t c di v hn.
Cc lung c qun l v lu tr ti nguyn vt l di dng k t nh tp
tin, bn phm, console, cc k t ny c th c c t hoc ghi ln lung.
Chng 17. Cc lp th vin

T r a n g | 205
C
+
+

V d cc tp tin trong C++ c t chc v tng tc vi tp tin. Mt lung
tp tin c s dng m tp tin, c, ghi trn tp tin.
lm vic vi lung, C++ cung cp th vin iostream chun cha cc i
tng sau:
Cc lp template c bn
C s ca th vin iostream l cu trc cy ph h ca cc lp template. Cc
lp template cung cp hu ht cc tnh nng trong th vin ca C++ c
th lm vic vi cc kiu d liu hin i c b sung sau ny. N l mt
tp hp cc lp template, mi lp c hai tham s template: kiu char
(charT) xc nh kiu ca cc phn t v tham s traits cung cp cc
c tnh b sung cho mi loi phn t. Lp template trong cy ph h lp c
cng tn vi i tng th hin ca lp char v c tin t l basic_. V d lp
template ca istream l basic_istream, ca fstream l basic_fstream, Ch
c duy nht mt ngoi l l ios_base l mt lp c lp v khng tn ti
lp tng ng l base.
Thc th ca lp template
Th vin c chia thnh hai tp hp thc th ca lp iostream: mt l
theo hng hp qun l cc phn t kiu char v mt phn t thuc kiu
khc; theo hng rng t chc cc phn t kiu wchar_t.
Thc th theo hng hp char c th c bit n nhiu hn nh l mt
thc th ca th vin iostream. Cc lp nh ios, iostream v ofstream l cc
thc th theo hng rng. Biu trn l biu biu din tn v mi
quan h gia cc lp theo hng hp.
Cc thc th theo hng rng wchar_t c cng tn vi thc th theo hng
hp nhng c tin t b sung l w. V d wios v ios, wistream v
wofstream.
Cc i tng chun
L mt phn ca th vin iostream, c c t trong tp tiu
<iostream> thng c s dng thc hin cc chc nng nhp xut
chun. Chng c chia thnh hai nhm: nhm i tng nh hng hp
bao gm ba i tng ph bin nht: cin, cout, cer v clog v nhm nh
hng rng bao gm wcin, wcout, werr v wlog.
Chng 17. Cc lp th vin

T r a n g | 206
C
+
+

Cc kiu d liu
Cc lp iostream s dng cc kiu c bn. Chng s dng kiu d liu c
bn ph thuc vo s th hin ca chng. V d theo mc nh char v
wchar_t, kiu streampos, streamoff v streamsize dng biu din v tr,
offset v kch thc tng ng.
Cc thao tc thc hin
Cc thao tc thc thi trn lung l cc hm ton cc c thit k s
dng cng vi ton t chn << v ton t trch tch >>. Ngoi ra cn c cc
chc nng nh dng nh endl, hex, scientific.
Cc tp tin
<ios>, <istream>, <ostream>, <streambuf> v <iosfwd> khng thng
c s dng mt cch trc tip trong cc chng trnh C++. Chng m
t lp c s ca cy ph h v c a vo trong chng trnh thng
qua mt tp tin tiu khc ca th vin cha cc lp dn xut.
<iostream> c t cc i tng s dng kt ni thng qua cc
chun nhp xut (bao gm c cin, cout).
<fstream> xc nh cc lp lung (nh cc lp template basic_ifstream
hay lp ofstream) cng nh cc i tng b m (basic_filebuf).
Nhng lp ny c s dng lm vic vi tp tin bng cch s dng
lung.
<sstream> cc lp xc nh trong tp tin ny thng s dng i tng
string nu chng l lung.
<iomanip> c t mt vi chc nng chun vi cc tham s c s
dng kt hp vi cc ton t tch v chn chnh sa cc c hiu v
cc thng s nh dng.
Cc thnh phn ca th vin iostream (vi thc th char)
1) Cc lp trong iostream (c th tham kho thm trong th vin ny).
Lp ios_base
Lp ios
Lp istream
Lp ostream
Lp ifstream
Chng 17. Cc lp th vin

T r a n g | 207
C
+
+

Lp ofstream
Lp fstream
Lp istringstream
Lp ostringstream
Lp streambuf
Lp filebuf
Lp stringbuf
2) Cc i tng
i tng cin
Xem chng Nhp xut c bn. Cc phng thc v thuc tnh khc
xem thm lp istream.
i tng cout
Xem chng Nhp xut c bn. Cc phng thc v thuc tnh ca lp
khc xem thm lp ostream.
i tng cerr
Thuc lp ostream c s dng in lung li c bn. Mc nh, hu
ht h thng u c mt chun li c bn in ra mn hnh. Bi v cerr l
mt i tng ca lp ostream, chng ta c th vit cc k t theo d liu
c nh dng nh vo ton t chn << hoc khng nh dng d liu
nu s dng hm thnh vin write.
#include <iostream>

int main()
{
int num;
std::cin>>num;
if (std::cin.good())
{
std::cout<<"Good !";
}else
{
std::cerr<<"Error";
//Hoc std::cerr.write("Error",
sizeof(std::streamsize));
Chng 17. Cc lp th vin

T r a n g | 208
C
+
+

}
return 0;
}
Nu s nguyn nhp vo ng nh dng th s thc hin chc nng in ra
Good, ngc li s in ra Error.
i tng clog
Tng t nh cerr, clog dng biu din lung ng nhp chun.
3) Cc kiu d liu
Kiu fpos: xc nh v tr trong lung. V bn cht n l mt lp
template. N c hai thnh vin getter v setter tng ng l: state() v
state(stateT).
Kiu streamoff: xc nh v tr ca offset trong lung. Ta hon ton c
th chuyn i n thnh streamsize, fpos hoc streampos.
Kiu streampos: tng t vi fpos.
Kiu streamsize: biu din kch thc lung.
4) Cc thao tc thc hin
boolalpha: thng s dng kt hp vi ton t nhp >> hoc xut <<.
Nu tham s l boolalpha th tham s bool l 1 v 0 tng ng s c
hiu l true v false.
#include <iostream>

int main()
{
bool num;
std::cin>>std::boolalpha>>num;
std::cout<<num;
return 0;
}
true
true

dec: c ghi d liu s theo dng thp phn (mc nh).
#include <iostream>

int main()
10
Chng 17. Cc lp th vin

T r a n g | 209
C
+
+

{
int num = 10;
std::cout<<std::dec<<num;
return 0;
}
endl: chn du xung dng. Tng t nh \n.
ends: chn k t trng \0.
fixed: p dng cho nh dng s thc c du chm. Khi
cout.precision(int) c triu gi, th s ch s thp phn (tham s
int) s c p dng nu chun xut d liu c s dng fixed (khc vi
none - s p dng theo mc nh v khng ph thuc vo vic triu gi
phng thc trn).
#include <iostream>

int main()
{
float a = 3.141516f, b = 1.00f;
std::cout.precision(3);
std::cout<<a<<"\t"<<b<<std::endl;
std::cout<<std::fixed<<a<<"\t"<<b;
return 0;
}
3.14 1
//Khng bt
fixed

3.142 1.000
//Bt fixed
flush: ng b ha b m vi con tr lung. iu ny c ngha l tt c
cc k t cha c ghi trong b m s c ghi ra lin tc.
#include <fstream>
using namespace std;

int main () {

ofstream outfile
("test.txt");

for (int n=0; n<100; n++)
outfile << n << flush;

outfile.close();

return 0;
}
//D liu s c ghi lin
tc ln tp tin test.txt. D
liu trong file ny s c
cp nhp lin tc 100 ln.
Chng 17. Cc lp th vin

T r a n g | 210
C
+
+

hex: thit lp c hiu chui thp lc phn cho s c in ra.
cout<<hex<<15; //Kt qu - F
internal: ko gin vng d liu v hai pha (tng t justify trong
Microsoft Word) theo rng c thit lp bi cout.width(int).
left: tng t internal, nhng d liu c ko v bn tri.
noboolalpha: ngc li vi boolalpha, ch in ra gi tr l 1 v 0, d cho
gi tr ng c c thit lp l true, v gi tr sai c thit lp l
false.
noshowbase: khng hin th dng thc ca c s. V d c s 8 s c
dng 0x Nu c hiu ny c triu gi, dng d liu in ra s khng
cha 0x.
noshowpoint: khng hin th du chm ng.
noshowpos: khng hin th du ca s dng.
noskipws: khng b qua cc k t trng khi tch d liu (khi kt hp s
dng lp istringstream).
nounitbuf: b m s khng b lm cn sau mi ln thc hin thao tc
ghi d liu.
nouppercase: khng hin th phn ch trong cc gi tr ca h c s 16
di dng ch hoa (ngha l lun vit thng a, b, c, d, e, f).
oct: thit lp c hiu cho chui bt phn in ra (chuyn mt s thnh
chui bt phn).
resetiosflags : hy b c hiu tng ng vi h c s c chn.
right: tng t internal, nhng d liu c ko v bn phi.
scientific: tng t fixed, nhng n hin th s thp phn du chm
ng di dng E.
setbase: thit lp h c s s chuyn i. N tng ng vi hex
nu c s thit lp l 16; oct 8; dec 10.
setfill: b sung cc k t c ch nh vo phn cn trng trong vng
d liu c ch nh.
setiosflags: thit lp c hiu vi h c s c chn.
setprecision: thit lp s trng dnh cho c phn nguyn ln phn
thp phn (khng tnh du chm). Cng hot ng tng ng vi
fixed.
setw: thit lp rng cho vng d liu hin th.
showbase: hin th dng thc c s. C hiu ny ngc vi
noshowbase.
Chng 17. Cc lp th vin

T r a n g | 211
C
+
+

showpoint: hin th du chm ng.
showpos: hin th du + trc s dng.
skipws: b qua k t trng khi tch d liu.
unitbuf: b m s b lm cn sau mi ln ghi d liu.
uppercase: hin th phn ch trong h c s 16 di dng ch hoa (A,
B, C, D, E, F).
ws: b qua cc k t trng (hoc cc k t tab, enter) khi tch d liu.




Phn Thc hnh
Trang | 212

HNG DN THC HNH

BI THC HNH S 1
Nhp xut c bn v Hm trong C++.
Hy thc hin cc cng vic sau y:
a. Xy dng mt chng trnh gm c hai phn: phn file header t tn l
tieude.h, phn chng trnh chnh l main.cpp.
b. Tt c cc hm trong chng trnh cn phi khai bo prototype. Cc tiu
file c t trong tp tiu . Chng trnh chnh cha cc hm thc
hin cc cng vic sau v hm main.
- S dng hm nhp xut c bn xy dng hm nhp vo mt xu k t
di dng kiu d liu string. Sau :
+ In ra xu o ngc. V d Toi di hoc, th in ra coh id ioT. Hm ny
gi l hm DaoXau.
+ In ra cc k t o ngc. V d Toi di hoc, th in ra hoc di Toi. Hm
ny gi l hm DaoTu.
- Nhp vo mt mng s nguyn, in ra tng cc phn t ca chng. Hm
ny gi l hm TinhTong.
- S dng khai bo chng cht hm, xy dng hai hm gii phng trnh
bc nht v phng trnh bc hai. Tn gi ca hai hm ny l
GiaiPhuongTrinh.
- S dng khai bo hm vi tham s mc nh gii phng trnh bc nht
v phng trnh bc hai, hm ny c tn gi l GiaiPhuongTrinhTSMD.
- Trong hm main, hy thc hin cc cng vic sau: in ra thng bo nhp
vo mt xu k t v gi hm DaoXau v DaoTu, nhp vo mt mng s
nguyn v gi hm TinhTong. S dng hm xut nhp c bn a ra
thng bo nhp cc h s cho phng trnh. Nu h s c nhp vo bng 0,
th thc hin gii phng trnh bc nht, cn c khc khng th thc hin gii
Phn Thc hnh

T r a n g | 213
C
+
+

phng trnh bc hai (gii cc phng trnh ny bng cch gi cc hm xy
dng trn).
BI THC HNH S 2
Xy dng Lp v Lm vic vi i Tng
1. Xy dng lp HangHoa gm c cc phng thc v thuc tnh sau:
Tn gi Mc truy cp Loi Gii thch
tenHang private
Thuc
tnh
Tn mt hng
ngaySanXuat private Ngy sn xut
donGia private n gi
soLuong private S lng
SetTenHang public
Phng
thc
Thit lp tn hng
GetTenHang public Tip nhn tn hng
SetNgaySanXuat public Thit lp ngy sn xut
GetNgaySanXuat public Tip nhn ngy sn xut
SetDonGia public Thit lp n gi
GetDonGia public Tip nhn n gi
SetSoLuong public Thit lp s lng
GetSoLuong public Tip nhn s lng
TinhTien public Tnh tin
Cc phng thc trn bao gm setter v getter. Phng thc TinhTien l
phng thc dng tnh s tin m khch hng mua. Tnh tin s bng
donGia*soLuong.
2. Xy dng lp KhachHang gm cc phng thc v thuc tnh sau:
Tn gi Mc truy cp Loi Gii thch
username private Thuc
tnh
Tn ti khon ngi dng
password private Mt khu ngi dng
SetUsername public
Phng
thc
Lp ti khon ngi dng
GetUsername public Tip nhn ti khon ngi dng
SetPassword public Lp mt khu ngi dng
GetPassword public Tip nhn mt khu ngi dng
MuaHang public Mua hng
Cc phng thc setter v getter hon ton tng t nh trn. Phng
thc MuaHang s triu gi cc phng thc thit lp tn hng, ngy sn
xut, v tnh tin ca i tng HangHoa trn. Phng thc mua hng
Phn Thc hnh

T r a n g | 214
C
+
+

ny, ch c chp nhn khi username v password ca khch hng nhp
vo trng vi username v password trong h thng.
Trong chng trnh chnh, hy to hai i tng ca hai lp HangHoa v
KhachHang. Username v Password ca khch hng nhp vo t bn phm.
Kim tra nu username v password trng vi username v password
c thit lp sn th khi mi tin hnh khi to i tng KhachHang,
nu ngc li, hy b giao dch v in thng bo: Xin loi, tai khoan cua quy
khach khong ton tai trong he thong. Xin lien he dang ki voi chi nhanh khach
hang gan nhat. Trong trng hp ng nhp thnh cng, hy thc hin
hnh ng mua hng ca i tng khch hng ny (thao tc mua c
nhp vo t bn phm).

BI THC HNH S 3
Hm to, hm to sao chp, hm bn, con tr this
Lu : trong bi thc hnh chng ny, ch cho php s dng con tr i
tng thc hin. Mi phng n s dng khai bo i tng thng
thng s khng c chp nhn !
1. Quay tr li vi bi thc hnh s 2. Hy to chng trnh bng cch thay
th cc phng thc setter bng cc hm to tng ng. Hy s dng con
tr this trong trng hp ny. B sung phng thc ResetHangHoa cho
lp HangHoa a v cc tham s mc nh cho cc thuc tnh (xu k t
th thit lp v , s nguyn/thc th thit lp v 0). B sung phng thc
HuyBo cho i tng KhachHang hy b vic mua hng. Trong chng
trnh chnh, hy to con tr i tng thc hin hnh ng mua hng v
hnh ng hy b.
2. Xy dng lp im Point v lp hnh trn Round. S dng hm random
to ta ngu nhin cho mt i tng im trong hm to ca i
tng im. Cho trc ta tm ca ng trn, bn knh ca n. Hy
a ra cc kt lun v mt im c khi to nm trong hay ngoi ng
trn. y l phng thc thnh vin ca lp hnh trn.
Khuyn khch: Nn s dng hm bn v lp bn.

Phn Thc hnh

T r a n g | 215
C
+
+

BI THC HNH S 4
Chng cht Ton t trong C++
Xy dng 2 lp s phc v lp phn s. S dng chng cht ton t thc
hin cc thao tc tnh ton sau:
- Lp s phc: phng thc khi to (hoc phng thc setter), phng
thc hm to sao chp, phng thc + (cng hai s phc), - (tr hai s
phc), * (nhn hai s phc), / (chia hai s phc) v phng thc tnh
modul v argument ca s phc. Xy dng hm chng cht ton t
nhp/xut d liu vi lp s phc ny.
- Lp phn s: phng thc khi to, phng thc hm to sao chp,
phng thc + (cng hai phn s), phng thc (tr hai phn s),
phng thc * (nhn hai phn s), phng thc / (chia hai phn s). Xy
dng hm chng cht ton t nhp/xut d liu vi lp phn s ny.

BI THC HNH S 5
K thut tha k trong C++
Xy dng lp HinhKhoi, cha thuc tnh chiu cao (chieucao). Xy dng
hm to tng ng v phng thc hm to sao chp.
Xy dng lp HinhKhoi1 tha k t lp HinhKhoi. B sung thm thuc tnh
chiu di (chieudai). B sung hm to v phng thc hm to sao chp.
Xy dng tip hm tnh th tch cho HinhKhoi1 (bng chieucao*chieudai
2
).
Xy dng lp lp HinhKhoi2 tha k t lp HinhKhoi1. B sung thm thuc
tnh chiu rng (chieurong). B sung hm to v phng thc hm to sao
chp. Qu ti hm tnh th tch cho HinhKhoi2 (bng
chieucao*chieudai*chieurong).
Xy dng lp HinhKhoi3 tha k t lp HinhKhoi. B sung thm thuc tnh
bn knh (bankinh). B sung hm to v phng thc hm to sao chp.
Xy dng hm tnh th tch cho HinhKhoi3 (bng chieucao*Pi*bankinh
2
).

Phn Thc hnh

T r a n g | 216
C
+
+

BI THC HNH S 6
Lp c s tru tng trong C++
Xy dng mt lp c s tru tng Vector cha ba phng thc o thun
ty: TinhDoDai (tnh di), SinGoc (tnh sin ca gc gia hai Vector),
TrucGiao (tm vector trc giao tc vector vung gc vi vector trn), hai
thuc tnh thnh vin l ta x v y, hai phng thc setter (khng s
dng hm to trong trng hp ny, v lp tru tng khng c kh nng
to ra mt s th hin, v hm to cng khng c tha k); hoc s dng
phng thc tham chiu getter.
Xy dng lp Vector2D tha k t lp c s tru tng Vector thc thi
cc phng thc o thun ty nu trn.
Xy dng lp Vector3D tha k t lp c s tru tng Vector (b sung
thm ta z v cc phng thc getter, setter tng ng) thc thi cc
phng thc o thun ty nu trn.
Trong , Vector2D l vector 2 chiu (ch c hai ta x v y); Vector3D l
vector 3 chiu (c ba ta x, y v z).


THANG IM NH GI K NNG
Bi thc hnh s 1 2 3 4 5 6
im 20 15 20 15 20 10
Ngng t 60-70
Cng im 70-80 80-90 90-100
Quy i +1 +1.5 +2
- Mi bi thc hnh c th thc hin nh hoc trn lp, nhng phi np
bi ng thi hn.
- Hn np mi bi thc hnh tng ng vi bui thc hnh. V d: Bi thc
hnh s 1 phi np ng hn vo bui th nht (mi t im ti a). Nu
mun mt bui, tr i 2 im. Nu np tt c cc bi vo bui cui cng, th
ti a ch t Ngng t.
Phn Thc hnh

T r a n g | 217
C
+
+

- im tng kt mn hc gm c 4 ct im qu trnh v 1 im thi. im
Qu trnh 1 = im chuyn cn; im Qu trnh 2 s tng ng vi trung
bnh cng ca 2 bi trc nghim; im Qu trnh 3 = im Thc hnh/10,
im Qu trnh 4 = im Qu trnh 3 + Quy i. Nu ct im qu trnh
no vt ngng 10, th phn d s c chuyn sang cc ct im qu
trnh khc. im tng kt s c tnh theo cng thc:
(
1
+
2
+
3
+
4
)
8
+

2


Phn Bi tp
Trang | 218

BI TP NNG CAO

Bi tp 1.
Xy dng cc hm tnh cc tng sau y:
=
1
2
+
2
3
++
1


= 1! +2! ++ !
= 1 2 +3 + (1)
+1
.
=
1!
+
+
2!

2

2
++
!

+(1)
+1
.


= 1! +3! ++ (2 1)!
Trong : n , x v k l cc tham s nhp vo t bn phm.
Bi tp 2.
Khai bo chui k t bng cch s dng con tr. Sau xy dng cc hm
thc hin cc cu sau:
- m s k t c gi tr l a.
- o xu k t.
- o t.
- m s t.
- Nhm cc k t cng loi. V d:
Xu ban u: aaabbbaacbd
Xu in ra: 5a4b1c1d
- Thut ton nn d liu RLE (Run length Encoding) l thut ton nn
khng mt d liu lossless. N c s dng nn nh i vi nh dng
bmp. Thut ton RLE s thc hin m s k t ging nhau v lin tip, sau
Phn Bi tp

T r a n g | 219
C
+
+

, s thay th ton b dy k t ging nhau ny bng s k t m c
sau l k t tng ng. V d:
Xu ban u: aaaabbbbcdddAA
Xu sau khi nn: 4a4b1c3d2A
+ Hy xy dng hm RLE nn d liu. Vi d liu nhp vo t bn phm.
+ Hy xy dng hm IRLE gii nn d liu. Vi d liu nhp vo t bn
phm.
Bi tp 3.
Xy dng cc hm thc hin cc chc nng sau y trn mng mt chiu
bng hai cch: khai bo theo kiu thng thng v khai bo bng con tr.
- Hm nhp d liu cho mng 1 chiu.
- Hm xut d liu cho mng 1 chiu.
- Hm tnh tng cc phn t ca mng.
- Hm tnh tng cc phn t ca mng l s nguyn t.
- Hm tnh tng cc phn t ca mng l s chnh phng.
- Hm tnh tng cc s nguyn t ca mng ln hn 10 v nh hn 100.
- Hm tnh tng cc phn t ca mng l s chnh phng chn.
- Hm m s phn t ca mng l s nguyn t.
- Hm m s phn t ca mng l s chnh phng.
- Hm m s phn t ca mng l s nguyn t ln hn 10 v nh hn 50.
- Hm m s phn t ca mng l s chnh phng chn.
- Hm tm kim ch s phn t c gi tr x ca mng.
- Hm tnh gi tr trung bnh ca mng.
- Hm tm ch s ca phn t c gi tr nh nht.
- Hm tm ch s ca phn t c gi tr ln nht.
Phn Bi tp

T r a n g | 220
C
+
+

- Hm sp xp mng theo th t tng dn (c th s dng thut ton sp
xp bt k).
- Hm tnh gi tr trung bnh ca cc phn t ca mng c gi tr chn.
- Hm dn tt c cc phn t chn v mt pha, cc phn t l v mt pha.
V d, mng ban u l: 1 4 5 6 2 3 th kt qu s l 1 5 3 4 6 2.
- Hm xc nh phn t c gi tr gn vi gi tr trung bnh ca mng nht.
- Hm y cc phn t ca mng ln n v tr. V d mng ban u l 1 3 2 5 4
7 9. Nu n = 2, th mng thu c s l 7 9 1 3 2 5 4.
B sung hm main v cc th vin nhn c mt chng trnh hon
chnh. Cc hm cn c khai bo theo prototype.
Bi tp 4.
Xy dng cc hm thc hin cc chc nng sau y trn mng hai chiu
bng hai cch khai bo: theo kiu thng thng v khai bo bng con tr.
- Hm nhp gi tr cho mng hai chiu.
- Hm xut gi tr ca mng hai chiu theo dng ma trn.
- Hm cng hai ma trn.
- Hm nhn hai ma trn.
- Hm thay th tt c cc phn t c gi tr l ca ma trn thnh 0.
- Hm thay th tt c cc phn t m ca ma trn bng phn t dng
tng ng.
- Hm thay th cc phn t c gi tr nh hn gi tr trung bnh ca ma trn
bng phn t 0.
- Hm tnh ly tha ca ma trn vung.
Cc hm yu cu c xy dng theo prototype. Cc ma trn (mng hai
chiu) trong cc bi tp trn l ma trn vung. B sung hm main v cc th
vin cn thit c mt chng trnh hon chnh.
Bi tp 5.
Phn Bi tp

T r a n g | 221
C
+
+

Hy chn la cc phng php ph hp trong lp trnh hng i tng
lp trnh gii cc bi ton sau y.
a) Xy dng lp TamGiac (tam gic) gm c ba cnh vi cc phng thc
sau:
- Cc phng thc khi to cho tam gic: khng tham s, c tham s v hm
to sao chp.
- Cc phng thc Getter.
- Phng thc KiemTra cho bit n c phi l mt tam gic thc s
khng.
- Phng thc tnh din tch tam gic nu n l mt tam gic thc s.
- Cc phng thc nhp/xut cho tam gic. Xy dng theo ton t.
b) Xy dng lp Diem (im) gm c 3 ta x, y, z v cc phng thc
sau:
- Cc phng thc khi to.
- Cc phng thc Getter.
- Phng thc tnh khong cch gia hai im.
Xy dng lp Vector gm c hai thuc tnh tng ng vi hai i tng
Diem (im u v im mt). Hy b sung cc phng thc sau cho lp
Vector:
- Cc phng thc khi to.
- Cc phng thc Getter.
- Phng thc tnh di ca vector.
- Phng thc cng hai vector. Xy dng theo ton t.
- Phng thc tnh tch v hng ca hai vector.
- Phng thc tnh cosin gc gia hai vector.
- Phng thc tnh tch hu hng ca hai vector.
Phn Bi tp

T r a n g | 222
C
+
+

Xy dng lp HinhCau (hnh cu) gm hai thuc tnh l i tng Diem
tng ng vi tm hnh cu v bn knh R. Hy b sung cc phng thc
sau cho lp HinhCau:
- Cc phng thc khi to.
- Cc phng thc Getter.
- Phng thc tnh din tch hnh cu.
- Phng thc xc nh v tr tng i gia hnh cu v mt im.
- Phng thc xc nh v tr tng i gia hai hnh cu.
Yu cu chung: hy b sung cc hm ton t nhp xut cho mi lp i
tng trn.
Bi 6.
Xy dng lp ConNguoi gm c hai thuc tnh thnh vin l: tn v tui. Cc
phng thc khi to v cc phng thc Getter tng ng.
Lp NhanVien tha k t lp ConNguoi, bng cch b sung thm hai thuc
tnh l: m nhn vin, lng v mc ng gp (tnh theo lng). B sung
phng thc khi to v cc phng thc Getter.
Cc cng ty qun l nhn vin ca mnh. i tng CongTy c cc thuc
tnh: tn cng ty, mc ng gp chun, ngn sch hin c, ngun thu theo
thng, ngun chi theo thng. Gi s ngun chi ny khng bao gm chi ph
tr lng cho nhn vin. i tng CongTy c phng thc tuyn dng
tuyn thm nhn vin, v phng thc sa thi sa thi nhn vin.
Mt nhn vin s b sa thi, nu mc ng gp ca h nh hn mc ng
gp chun ca cng ty.
Mt cng ty s tuyn b ph sn nu vn iu l ca h b m. Vn iu l l
tng ngn sch hin c cng vi mc ng gp ca mi nhn vin tr cho
ngun chi theo thng v tr tip cho tng lng chi tr cho ton b nhn
vin. Hy xy dng chng trnh thc thi m t ny.
Bi 7.
Hy xy dng chng trnh ng dng theo m t sau.
Phn Bi tp

T r a n g | 223
C
+
+

- Lp i tng ngi dng gm cc thuc tnh: username, password, cu
hi bo mt v cu tr li. B sung cc phng thc tng ng cho ph
hp. Khi chy chng trnh, ngi dng nhp vo username v password.
Nu trng khp vi username v password to trong h thng th thng
bo ng nhp thnh cng.
- Sau khi ng nhp thnh cng, ngi dng c quyn triu gi cc phng
thc tnh ton ca lp s phc v phn s (cn xy dng thm hai lp ny).
- Nu ngi dng ng nhp khng thnh cng, yu cu h xc minh rng
c phi h qun mt khu hay khng bng mt cu hi bo mt. Nu tr
li ng, th cho php h thay i mt khu.
- Nu ng nhp khng thnh cng v tr li sai cu hi bo mt, hy in ra
thng bo Bn cha phi l thnh vin, hy chn y ng k v chn
n thot.
Bi 8.
Mi i tng Shape trong Microsoft Word u c c cc thuc tnh: mu
vin, mu nn, ni dung vn bn bn trong, th bc, tnh trng ang c
chn hay khng v cc phng thc khi to, thay i gi tr cho mi thuc
tnh (phng thc setter).
Hy to ra mt mng 10 phn t Shape. Cc gi tr th bc khng c
trng nhau (v phn b t 0-9). Trong 10 i tng ny, ti mi thi im,
ch c ng mt i tng ang tnh trng chn. Nu i tng tnh
trng chn, th ta mi c quyn thay i gi tr cho n.
Hy b sung thm cc phng thc cn thit thc hin cc yu cu trn.
Bi 9.
Hy phn tch m hnh qun l sinh vin trong trng i hc. T m hnh
phn tch c, hy xy dng chng trnh qun l sinh vin. Trong m
hnh ny, yu cu qun l khng di 10 lp i tng.
Gi : Cc lp i tng trong m hnh ny bao gm Sinh vin, Gio vin
ch nhim, Phng Cng tc hc sinh sinh vin, Phng o to, Phng Ti
chnh, Khoa chuyn mn, on TN, Lp, Phng hc, Mn hc
Bi 10.
Phn Bi tp

T r a n g | 224
C
+
+

Hy phn tch theo hng i tng m hnh qun l Nh nc thu nh
c cho bn di y. T m hnh phn tch , hy xy dng chng
trnh qun l Nh nc thu nh. Bit rng, tng tc gia cc i tng
c tnh bc cu.

Hnh 23 M hnh tng tc qun l Nh nc.

B GD
B Y t
B Cng Thng
B Quc Phng
B Nng Nghip
S GD
S Y t
C s
K tha Tng tc
Phn Bi tp

T r a n g | 225
C
+
+

BI TP LN

D n 1. Phn tch, thit k v xy dng chng trnh qun l th vin.
Trong chng trnh ny, cn m bo cc chc nng sau y:
- Trong m hnh qun l ny cn m bo cc thng tin: m sch, tn sch,
tn tc gi, nm xut bn, nh xut bn, s trang, gi v s lng.
- Cho php b sung thm mt hoc nhiu quyn sch.
- Cp nhp li s lng sch khi c ngi mn/tr sch.
- Tm kim sch theo tn tc gi hoc tn sch.
- Kim tra tnh trng sch cn hay khng.
- Chng trnh thc thi trn mn hnh Console. C menu ty chn. D liu
c lu tr vo tp tin data.dat di dng m ha nh phn.

D n 2. Phn tch, thit k v xy dng chng trnh qun l website bn
my tnh. Trong chng trnh trnh ny, cn m bo cc chc nng sau
y:
- Trong m hnh qun l ny, cn m bo cc thng tin: m hng, mu sc,
nc sn xut, hng, gi tin, s lng, thi gian bo hnh, c ci t h
iu hnh hay khng, a ch khc hng, s in thoi khch hng.
- Tm kim mt hng theo tn hng, gi tin v nc sn xut.
- Kim tra tnh trng cn hng hay khng.
- B sung (nhp thm hng) hoc xa b (bn hng).
- Chng trnh thc thi trn mn hnh Console. C menu ty chn. D liu
c lu tr vo tp tin data.dat di dng m ha nh phn.

D n 3. Phn tch, thit k v xy dng chng trnh qun l nhn vin
trong cng ty. Trong chng trnh trnh ny, cn m bo cc chc nng
sau y:
Phn Bi tp

T r a n g | 226
C
+
+

- Trong m hnh qun l ny, cn m bo cc thng tin: m nhn vin, h
tn nhn vin, ngy thng nm sinh, h s lng, nm bt u cng tc, tnh
trng hn nhn, b phn lm vic.
- Tm kim nhn vin theo h tn.
- Thng k s lng nhn vin theo b phn lm vic
- B sung (tuyn dng) hoc xa b (kt thc hp ng).
- Chng trnh thc thi trn mn hnh Console. C menu ty chn. D liu
c lu tr vo tp tin data.dat di dng m ha nh phn.

D n 4. Phn tch, thit k v xy dng game FarmVille (mt game ni
ting trn Facebook). Trong game ny, cn m bo cc chc nng sau y:
- Trong m hnh qun l ny, cn m bo cc thng tin: ngi chi
email, tn ngi chi, tng s tin. Cc i tng trong game: tn i
tng, tr gi, thi gian khi to, thi gian thu hoch.
- Tm kim ngi chi theo h tn.
- Thng k s tin thu c ca mt ngi chi.
- B sung ngi chi hoc i tng trong game.
- Khi thu hoch mt i tng, th tr gi ca i tng s c cp nhp
vo cho tng tin ca ngi chi, ng thi i tng cng s b hy. i
tng ch c th c thu hoch nu: thi gian hin ti thi gian khi to
>= thi gian thu hoch.
- Chng trnh c menu iu khin, khng yu cu to giao din ha.

Ghi ch: Cc sinh vin np bi thc hnh vo trc bui th 5 s c c
hi nhn c bi tp ln. Khi nhn c bi tp ln, ngoi yu cu b sung
ca ging vin, sinh vin cn thc thi thn cc yu cu sau:
- Phn tch m hnh ln giy (np bn in).
Phn Bi tp

T r a n g | 227
C
+
+

- Np chng trnh hon chnh. Trong , chng trnh hon chnh v tp
tin word (*.doc; *.docx) phi c ghi ln a CD, bn ngoi a c ghi: tn
sinh vin, lp v Bi tp ln: Lp trnh hng i tng C++. Ging vin
hng dn: ..


Trang | 228

DANH SCH HNH

Hnh 1 To mi d n trong CodeBlocks ................................................................ 10
Hnh 2 Khi to thn phng thc ............................................................................ 11
Hnh 3 Cu hnh MinGW trong Eclipse Helios ....................................................... 12
Hnh 4 Chn ng dn n th mc bin ca MinGW ...................................... 13
Hnh 5 - To mi d n ....................................................................................................... 13
Hnh 6 - Cu trc th mc ca mt d n ................................................................... 14
Hnh 7 - Bin dch mt d n ........................................................................................... 14
Hnh 8 - Hp thoi to mi class .................................................................................... 15
Hnh 9 - Giao din tng th ca Visual Studio 2010 ............................................... 17
Hnh 10 - To d n Win32 Console ............................................................................. 18
Hnh 11 - Win32 Application Wizard ........................................................................... 18
Hnh 12 - B sung thm mt tp tin .............................................................................. 20
Hnh 13 - B sung thm lp i tng ........................................................................ 20
Hnh 14 - To lp bng Class Wizard ........................................................................... 21
Hnh 15 - Xem biu lp ................................................................................................. 22
Hnh 16 S minh ha vic s dng hm ............................................................ 72
Hnh 17 Tham chiu trong con tr ............................................................................. 94
Hnh 18 Tham chiu ngc trong con tr ............................................................... 95
Hnh 19 Tng/Gim a ch ca con tr ................................................................ 101
Hnh 20 Minh ha s lp ....................................................................................... 125
Hnh 21 Tnh k tha .................................................................................................... 153
Hnh 22 Lp c s o .................................................................................................... 164
Hnh 23 M hnh tng tc qun l Nh nc. .................................................. 224




T r a n g | 229
C
+
+

TRA CU T KHA

MT S THUT NG ANH-VIT C S DNG TRONG GIO TRNH
Nguyn bn ting Anh Dch sang ting Vit
Abstract base class Lp c s tru tng
Abstraction Tnh tru tng
Arithmetic operators Ton t s hc
Assignment operators Ton t gn
Base class Lp c s/ Lp cha
Bitwise operators Ton t dch bit
Child class/SubClass Lp con
Class Lp
Comma operators Ton t phn tch
Compound assignment operator Ton t gn hp nht
Conditional operators Ton t iu kin
Encapsulation Tnh ng gi
Exception Ngoi l
Explicit type casting operators Ton t chuyn i kiu d liu
Increase and decrease operators Ton t tng gim
Information hiding Che du/n du thng tin
Inheritance Tnh tha k/ Tnh k tha
Instance S th hin
Logical operators Ton t logic
Multiple inheritance Tnh a tha kt/Tnh a k tha
Object i tng
Operator Ton t
Operator overloading Chng cht ton t
Overload Chng cht
Override Qu ti
Polymorphism Tnh a hnh
Prototype Nguyn mu
Pure virtual function Hm o thun ty
Reference Tham chiu
Relational and equality operators Ton t quan h v so snh




T r a n g | 230
C
+
+

TI LIU THAM KHO

[1]. http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp
. Mc: XL C/C++ V8.0 for AIX. Language Reference.
[2]. http://msdn.microsoft.com/en-us/library/3bstk3k5(v=VS.100).aspx
[3]. Ivor Horton. Beginning Visual C++ 2010. Wrox pub.
[4]. C++ for Mathematicians. An introduction for Student and
Professional. Edward Scheinerman. Chapman & Hall/CRC.
[5]. Website: http://www.cplusplus.com/doc/tutorial

You might also like