You are on page 1of 79

Ch ng 1.

M u
Chng ny gii thiu nhng phn c bn ca mt chng trnh C++. Chng ta s dng
nhng v d n gin trnh by cu trc cc chng trnh C++v cch thc bin dch
chng. Cc khi nim c bn nh l hng, bin, v vic lu tr chng trong b nh cng
s c tho lun trong chng ny. Sau y l mt c t s b v khi nim lp trnh.
L p trnh
My tnh s l mt cng c gii quyt hng lot cc bi ton ln. Mt li gii cho mt
bi ton no c gi l mt gii thut (algorithm); n m t mt chui cc bc cn
thc hin gii quyt bi ton. Mt v d n gin cho mt bi ton v mt gii thut c
th l:
Bi ton: sp xp mt danh sch cc s theo th t tng dn.
Gii thut:Gi s danh sch cho l listl; to ra mt danh sch rng, list2,
lu danh sch sp xp. Lp i lp li cng vic, tm s nh nht trong
listl, xa n khi listl, v thm vo phn t k tip trong danh sch list2, cho
n khi lstl l rng.
Gii thut c din gii bng cc thut ng tru tng mang tnh cht d hiu. Ngn
ng tht s c hiu bi my tnh l ngn ng my. Chng trnh c din t bng
ngn ng my c gi l c th thc thi. Mt chng trnh c vit bng bt k mt
ngn ng no khc th trc ht cn c dch sang ngn ng my my tnh c th
hiu v thc thi n.
Ngn ng my cc k kh hiu i vi lp trnh vin v th h khng th s dng
trc tip ngn ng my vit chng trnh. Mt s tru tng khc l ngn ng
assembly. N cung cp nhng tn d nh cho cc lnh v mt k hiu d hiu hn cho
d liu. B dch c gi l assembler chuyn ngn ng assembly sang ngn ng my.
Ngay c nhng ngn ng assembly cng kh s dng. Nhng ngn ng cp cao
nh C++cung cp cc k hiu thun tin hon nhiu cho vic thi hnh cc gii thut.
Chng gip cho cc lp trnh vin khng phi ngh nhiu v cc thut ng cp thp, v
gip h ch tp trung vo gii thut. Trnh bin dch (compiler) s m nhim vic dch
chng trnh vit bng ngn ng cp cao sang ngn ng assembly. M assembly c
to ra bi trnh bin dch sau s c tp hp li cho ra mt chng trnh c th
thc thi.
Chng 1: M u 1
1.1. M t ch ong trnh C++ on gi n
Danh sch 1.1 trnh by chng trnh C++u tin. Chng trnh ny khi
chy s xut ra thng ip Hello World.
Danh sch 1.1
1
2
3
4
5
Ch gi i
1 Hng ny s dng ch th tin x l #include chn vo ni dung ca tp
tin header iosteam.h trong chng trnh, iostrcamli l tp tin header chun
ca C++v cha ng cc nh ngha cho xut v nhp.
2 Hng ny nh ngha mt hm c gi l main. Hm c th khng c
hay c nhiu tham s (parameters); cc tham s ny lun xut hin sau
tn hm, gia mt cp du ngoc. Vic xut hin ca t void gia du
n|oc chi nh rng hm main khng c tham s. Hm c th c ki u tr
v; kiu tr v lun xut hin trc tn hm. Kiu tr v cho hm main l
int (v d: mt s nguyn). Tt c cc chng trnh C++phi c mt hm
main duy nht.Vic thc thi chng trnh lun bt u t hm main.
3 Du ngoc nhn bt u thn ca hm mam.
4 Hng ny l mt cu l nh (statement). Mt lnh l mt s tnh ton
cho ra mt gi tr. Ket thc mt lnh th lun lun c nh du bng
du chm phy (;). Cu lnh ny xut ra chui "Hello World" gi n
dng xut cout Chui l mt dy cc k t c t trong cp nhy kp.
K t cui cng trong chui ny (\n) l mt k t xung hng (newline).
Dng l mt i tng c dng thc hin cc xut hoc nhp, cout
l dng xut chun trong C++(xut chun thng c hiu l mn hnh
my tnh). K t l ton t xut, n xem dng xut nh l ton hng
tri v xem biu thc nh l ton hng phi, v to nn gi tr ca biu
thc c gi n dng xut. Trong trng hp ny, kt qu l chui
"Hello Worl\n" c gi n dng cout, lm cho n c hin th trn
mn hnh my tnh.
5 Du ngoc ng kt thc thn hm main.
1.2. Bin dch m t ch ng trnh C++
Bng 1.1 trnh by chng trnh trong danh sch 1.1 c bin dch v chy
trong mi trng UNIX thng thng. Phn in m c xem nh l u vo
(input) ca ngi dng v phn in thng c xem nh l p ng ca h
thng. Du nhc hng lnh UNIX xut hin nh l k t dollar($).
#inude <iostream.h>
int main (void)
{
cout "Hello World'll";
1_________ ___________
Chng 1: M u 2
1
2
3
4
B ng 1.1
Ch gi i
1 Lnh triu gi b dch AT&T ca c++ trong mi trng UNIX l cc.
i s cho lnh ny (hello.cc) l tn ca tp tin cha ng chng trnh.
Theo qui nh th tn tp tin c phn m rng l .c, .c, hoc l .cc. (Phn
m rng ny c th l khc nhau i vi nhng h iu hnh khc nhau)
2 Ket qu ca s bin dch l mt tp tin c th thc thi mc nh l a.out.
chy chng trnh, chng ta s dng a.out nh l lnh.
3 y l kt qu c cung cp bi chng trnh.
4 Du nhc v h thng ch nh rng chng trnh hon tt s thc
thi ca n.
Lnh cc chp nhn cc phn ty chn. Mi ty chn xut hin nh name,
trong name l tn ca ty chn (thn l mt k t n). Mt vi ty
chn yu cu c i s. V d ty chn xut (-o) cho php ch nh r tp tin
c th c cung cp bi trnh bin dch thay v l aout. Bng 1.2 minh ha
vic s dng ty chn ny bng cch ch nh r hello nh l tn ca tp tin c
th thc thi.
B ng 1.2
1
2
3
4
Mc d lnh thc s c th khc ph thuc vo trnh bin dch, mt th
tc bin dch tng t c th c dng di mi trng MS-DOS. Trnh
bin dch C++da trn Windows dng tn mt mi trng thn thin vi
ngi dng m vic bin dch rt n gin bng cch chn lnh t menu. Qui
nh tn di MS-DOS v Windows l tn ca tp tin ngun C++phi c
phn m rng l .cpp.
1.3. Vic bin dich C++ di n ra nh th no

Bin dch mt chng trnh C++lin quan n mt s bc (hu ht cc bc
l trong sut vi ngi dng):
u tin, b ti n x l C++xem qua m trong chng trnh v thc hin
cc ch th c ch nh bi cc ch th tin x l (v d, #include). Ket
qu l mt m chng trnh sa i m khng cn cha bt k mt chi
th tin x l no c.
$ c c heflo.cc -o heDo
$ heBo
Hello World
$
$ c c hello.cc
$ a.out
Hello World
$
Chng 1: M u 3
Sau , trnh bin dch C++dch cc m ca chng trnh. Trnh bin
dch c th l mt trnh bin dch C++tht s pht ra m assembly hay
m my, hoc ch l trnh chuyn i dch m sang c. trng hp th
hai, m c sau khi c dch ra s to thnh m assembly hay m my
thng qua trnh bin dch c. Trong c hai trng hp, u ra c th
khng hon chnh v chng trnh tham kho ti cc th tc trong th
vin cn cha c nh ngha nh mt phn ca chng trnh. V d
Danh sch 1.1 tham chiu ti ton t m thc s c nh ngha
trong mt th vin 10 ring bit.
Cui cng, trnh lin k t hon tt m i tng bng cch lin kt n vi
m i tng ca bt k cc module th vin m chng trnh tham
kho ti. Ket qu cui cng l mt tp tin thc thi.
Hnh 1.1 minh ha cc bc trn cho c hai trnh chuyn i C++v trnh
bin dch C++. Thc t th tt c cc bc trn c triu gi bi mt lnh
n (nh l CQ v ngi dng thm ch s khng thy cc tp tin c pht
ra ngay lp tc.
Hnh 1.1 Vi c bin dch C++
c++
C++
c
c
Program
17

TRANSLATOR
Code
V

COMPILER
C++
Program
_J 7

C++
NATIVE
COMPILER
1.4. Bi n
Bin l mt tn tng trng cho mt vng nh m d liu c th c lu tr
trn hay l c s dng li. Cc bin c s dng gi cc gi tri d
liu v th m chng c th c dng trong nhiu tnh ton khc nhau trong
mt chng trnh. Tt c cc bin c hai thuc tnh quan trng:
Ki u c thit lp khi cc bin c nh ngha (v d nh: integer,
real, character). Mt khi c nh ngha, kiu ca mt bin C++
khng th c chuyn i.
Chng 1: M u 4
Gi tr c th c chuyn i bng cch gn mt gi tr mi cho bin.
Loi gi tr ca bin c th nhn ph thuc vo kiu ca n. V d, mt
bin s nguyn ch c th gi cc gi tr nguyn (chng hn, 2, 100, -12).
Danh sch 1.2 minh ha s dng mt vi bin on gin.
Danh sch 1.2
2
3
4
5
6
7
8
9
10
11
Ch gi i
4 Hng ny nh ngha mt bin int (kiu s nguyn) tn l workDays, bin
ny i din cho s ngy lm vic trong tun. Theo nh lut chung, trc
tin mt bin c nh ngha bng cch chi nh kiu ca n, theo sau
l tn bin v cui cng l c kt thc bi du chm phy.
5 Hng ny nh ngha ba bin float (kiu s thc) ln lt thay cho s gi
lm vic trong ngy, s tin phi tr hng gi, v s tin phi tr hng
tun. Nh chng ta thy hng ny, nhiu bin ca cng kiu c th nh
ngha mt lt qua vic dng du phy ngn cch chng.
6 Hng ny l mt cu lnh gn. N gn gi tr 5 cho bin workDays. V th,
sau khi cu lnh ny c thc thi, workDays biu th gi tr 5.
7 Hng ny gn gi 7.5 ti bin workHours.
8 Hng ny gn gi tr 38.55 ti bin payRate.
9 Hng ny tnh ton s tin phi tr hng tun t cc bin workDays,
workHours, v payRate (* l ton t nhn). Gi tr kt qu c lu vo
bin weeklyPay.
10-12 Cc hng ny xut ba mc tun t l: chui "Weekly Pay = ", gi tr
ca bin weeklyPay, v mt k t xung dng.
Khi chy, chng trnh s cho kt qu nh sau:
Weekly Pay =1445.625
Khi mt bin c nh ngha, gi tr ca n khng c nh ngha
cho n khi n c gn cho mt gi tr tht s. V d, weeklyPay c mt gi
tr khng c nh ngha cho n khi hng 9 c thc thi. Vic gn gi tr
cho mt bin ln u tin c gi l kh i t o. Vic chc chn rng mt
#mdude <iostream.h>
int main (void)
{
int woikDays;
float workHoure, payRate, weeklyPay;
woikDays=5;
workHours _ 7.5;
payRate=38.55;
weeklyPay=woikDays * workHours * payRate;
cout "Weekly Pay=" weeklyPay V;
Chng 1: M u 5
bin c khi to tmc khi 11c s dng trong bt k cng vic tnh
ton no l rt quan trng.
Mt bin c th c nh ngha v khi to cng lc. iu ny c
xem nh l mt thi quen lp trnh tt bi v n ginh trc kh nng s dng
bin trc khi n c khi to. Danh sch 1.3 l mt phin bn sa li ca
danh sch 1.2 m c s dng k thut ny. Trong mi mc ch khc nhau th
hai chng trnh l tng tng.
Danh sch 1.3
1
2
3
4
5
6
7
8
9
10
11
1.5. Xu t/nh p n gi n
Cch chung nht m mt chng trnh giao tip vi th gii bn ngoi l
thng qua cc thao tc xut nhp hng k t n gin. C++cung cp hai
ton t hu dng cho mc ch ny l cho nhp v cho xut. Chng ta
thy v d ca vic s dng ton t xut ri. Danh sch 1.4 s minh
ha thm cho vic s dng ton t nhp .
Danh sch 1.4
1
2
3
4
5
6
7
8
9
10
11
12
13
#inelude<iostream.h>
int main (void)
{
int woricDays=5;
float workHours=7.5;
float payRate,weeklyPay,
cout "What is thehourly pay rate?
cinpayRate;
weeklyPay=workDays * woricHours * payRate;
cout "Weekly Pay=
cout weeklyPay;
coutW;
#include<iostream.h>
int main (void)
{
int woricDays=5;
float workHours=7.5;
float payRate=38.55;
float weeklyPay=woikDays*workHours* payRate;
cout "Weekly Pay=";
cout weeklyPay;
cout\n';
Chng 1: M u 6
7 Hng ny xut ra li nhc nh What is the hourly pay rate? tm d liu
nhp ca ngi dng.
8 Hng ny c gi tr nhp c g bi ngi dng v sao chp gi tr ny
ti bin payRatc. Ton t nhp ly mt dng nhp nh l ton hng tri
(cn l dng nhp chun ca C++m tng ng vi d liu c nhp
vo t bn phm) v mt bin (m d liu nhp c sao chp ti) nh l
ton hng phi.
9-13 Phn cn li ca chng trnh l nh trc.
Khi chy, chng trnh s xut ra mn hnh nh sau (d liu nhp ca ngi
dng c in m);
What Lsthehourly pay rate? 33.55
Weekly Pay =1258.125
C hai v tr v ton hng tri nh l kt qu ca chng, cho php
nhiu thao tc nhp hay nhiu thao tc xut c kt hp trong mt cu lnh.
iu ny c minh ha trong danh sch 1.5 vi trng hp cho php nhp
c s gi lm vic mi ngy v s tin phi tr mi gi.
Ch gi i
Danh sch 1.5
2
3
4
5
6
7
8
9
10
Ch gi i
7 Hng ny c hai gi tr nhp c nlip vo t ngi dng v chp
tng ng chng ti hai bin workHours v payRale. Hai gi tr cn c
tch bit bi mt khng gian trng (chng hn, mt hay l nhiu khon
trng hay l cc k t tab). Cu lnh ny tng ng vi:
(cin workHours) payRale;
V kt qu ca l ton hng tri, (cinworkHours) nh gi cho cin m
sau c s dng nh l ton hng tri cho ton t k tip.
//include <iostream.h>
int main (void)
{
int wotfcDays=5;
float workHouK, payRate, weeklyPay;
cout "What arethework hours and thehourly pay rate?
cin workHours payRate;
weeklyPay=workDays * workHours * payRate;
cout "Weekly Pay=" weeklyPay V;
j __________________________ _________________
Chng 1: M u 7
9 Hng xiy l kt qu ca vic kt hp t hng 10 n hng 12 trong danli
sch 1.4. N xut "Weekly Pay = ", theo sau l gi tr ca bin
weeklyPay, v cui cng l mt k t xung dng. Cu lnh ny tng
ng vi:
((cout 'Weekly Pay=") weeklyPay) Vi';
V kt qu ca l ton hng tri, (cout "Weekly Pay =") nh gi cho
cout m sau c s dng nh l ton hng tri ca ton t k tip.
Khi chy, chng trnh s hin th nh sau:
What arethework hours and the houriy pay rate? 75 33.55
Weekly Pay =1258.125
1.6. Ch thch
Ch thch thng l mt on vn bn. N c dng gii thch mt vi
kha cnh ca chng trnh. Trnh bin dch b qua hon ton cc ch thch
trong chng trnh. Tuy nhin cc ch thch ny l c ngha v i khi l rt
quan trng i vi ngi c (ngi xem cc m chng trnh c sn) v
ngi pht trin phn mm. C++cung cp hai loi ch thch:
Nhng g sau // (cho n khi kt thc hng m n xut hin) c xem
nh l mt ch thch.
Nhng g ng ngoc trong cp du * v */ c xem nh l mt ch
thch.
Danh sch 1.6 minh ha vic s dng c hai hnh thc ny.
Danh sch 1.6
2
3
4
5
6
7
8
9
10
11
12
13
Cc ch thch nn c s dng tng cng (khng phi gy tr ngi)
vic c mt chng trnh. Mt vi im sau nn c ch :
#inude <iostream.h>
/* Chuong trinh nay tinh toan tong so tien phai teahang tuan cho mot cong nhan ua tren tong so gio
lamviec va so tien phai tramoi gi. */
int main (void)
{
int workDays=5; //songay lamviec trongtuan
float workHours=7.5; // so gio lamviec trong ngay
float payRate=33.50; // so tien phai tramoi gio
float weeklyPay, //tong so tien phai tramoi tuan
weeklyPay=workDays * workHours * payRate;
cout <<"Weekly Pay - " weeklyPay <<V;
}
Chng 1: M u 8
Ch thch nn d c v d hiu hn s gii thcli thng qua m chng
trnh. Th l khng c ch thch no cn hn c mt ch thch phc tp
d gy lm ln mt cch khng cn thit.
S dng qu nhiu ch thch c th dn n kh c. Mt chng trnh
cha qu nhiu ch thch lm bn kh c th thy m th khng th no
c xem nh l mt chng trnh d c v d hiu.
Vic s dng cc tn m t c ngha cho cc bin v cc thc th khc
trong chng trnh, v nhng ch tht vo ca m c th lm gim i
vic s dng ch thch mt cch ng k, v cng gip cho lp trnh vin
d c v kim sot chng trnh.
1.7. B nh
My tnh s dng b nh truy xut ngu nhin (RAM) lu tr m chng
trnh thc thi v d liu m chng trnh thc hin. B nh ny c th c
xem nh l mt chui tun t cc bit nh phn (0 hoc 1). Thng thng, b
nh c chia thnh nhng nhm 8 bit lin tip (gi l byte). Cc byte c
nh v lin tc. V th mi byte c th c ch nh duv nht bi a ch
(xem Hnh 1.2).
Hnh 1.2 Cc bit v cc byte trong b nh-
Byte Address
1211 1212 1213

1214 1215 1216 1217
Byte Byte Byte Byte Byte Byte Byte
1 1 0 1 0 0 0 1

Bit
Trnh bin dch C++pht ra m c th thc thi m sp xp cc thc th
d liu ti cc v tr b nh. V d, nh ngha bin
int salary=65000;
lm cho trnh bin dch cp pht mt vi byte cho bin salary. So byte cn
c cp pht v phng thc c s dng cho vic biu din nh phn ca
s nguyn ph thuc vo s thi hnh c th ca C++. Trnh bin dch s
dng a ch ca byte u tin ca bin salary c cp pht tham kho ti
n. Vic gn trn lm cho gi tr 65000 c lu tr nh l mt s nguyn
b hai trong hai byte c cp pht (xem Hnh 1.3).
Hnh 1.3 Bi u di n c a m t s nguyn trong b nh'.
Chng 1: M u 9
1211 1212 1213 1214 1215 1216 1217
Byte Byte Byte 10110011 10110011 Byte Byte
sal ar y
mt s nguyn 2 byte a ch 1214
Trong khi vic biu din nh phn chnh xc ca mt hng mc d liu l
t khi c cc lp trnh vin quan tm ti th vic t chc chung ca b nh
v s dng cc a ch tham kho ti cc hng mc d liu l rt quan
trng.
1.8. S nguyn
Bi n s nguyn c th c nh ngha l kiu short, int, hay long. Ch khc
nhau l s int s dng nhiu hn hoc t nht bng so byte nh l mt so short,
v mt s long s dng nhiu hn hoc t nht cng s bytc vi mt so int. V
d, trn my tnh c nhn th mt so short s dng 2 byte, mt s int cng 2
bytc, v mt s long l 4 byte.
short age=20;
int salary=65000;
long price=4500000;
Mc nh, mt bin s nguyn c gi s l c du (chng hn, c mt
s biu din du m n c th biu din cc gi tr dng cng nh l cc
gi tr m). Tuy nhin, mt s nguyn c th c nh ngha l khng c du
bng cch s dng t kha unsigned trong nh ngha ca n. T kha signed
cng c cho php nhng hi d tha.
unsigned short age=20;
unsigned int salary=65000;
unsigned long price=4500000;
S nguyn (v d, 1984) lun lun c gi s l kiu int, tr khi c mt
hu t L hoc 1th n c hiu l kiu long. Mt s nguyn cng c th c
c t s dng hu t l u hoc u., v d:
1984L 19841 1984U 1984u 1984LU 1984ul
1.9. S th c
Bi n s th c c th c nh ngha l kiu float hay double. Kiu double s
dng nhiu byte hn v v th cho min ln hn v chnh xc hn biu
din cc s thc. V d, trn cc my tnh c nhn mt so float s dng 4 byte
v mt so double s dng 8 byte.
Chng 1: M u 10
float interestRate=0.06;
double pi=3.141592654;
S th c (v d, 0.06) lun lun c gi s l kiu double, tr phi c mt hu
t F hay f th n c hiu l kiu float, hoc mt hu t L hay 1th n c
hiu l kiu long double. Kiu long double s dng nhiu byte homkiu double
cho chnh xc tt hn (v d, 10 byte trn cc my PC). V d:
0.06F 0.06f3.141592654L 3.1415926541
Cc s thc cng c th c biu din theo cch k hiu ha khoa hc.
V d, 0.002164 c th c vit theo cch k hiu ha khoa hc nh sau:
2.164E-3 or 2.164e-3
K t E (hay e) thay cho s m (exponent). Cch k hiu ha khoa hc c
thng dch nh sau:
2.164E-3=2.164 X 10r3= 0.002164
l.lO.K t
Bi n k t c nh ngha l kiu char. Mt bin k t chim mt byte n
lu gi m cho k t. M ny l mt gi tr s v ph thuc h thong m
k t ang c dng (ngha l ph thuc my). H thng chung nht l
ASCII (American Standard Code for Information Interchange). V d, k t A
c m ASCII l 65, v k t a c m ASCII l 97.
char ch='A';
Ging nh s nguyn, bin k t c th c ch nh l c du hoc
khng du. Mc nh (trong hu ht cc h thng) char ngha l signed char.
Tuy nhin, trn vi h thng th n c ngha l unsigned char. Bin k t c du
c th gi gi tr s trong min gi tr t -128 ti 127. Bin k t khng du
c th gi gi tr s trong min gi tr t 0 t 255. Ket qu l, c hai thng
c dng biu din cc s nguyn nh trong chng trnh (v c th c
nh du cc gi tr s nh l s nguyn):
signed char offset=-88;
unsigned char row=2, column=26;
K t c vit bng cch ng du k t gia cp nhy n (v d, 'A').
Cc k t m khng th in ra c biu din bng vic s dng cc m
escape. V d:
'\n' // xung hng mi
V // phm xung dng
Chng 1: M u
'\t' // phm tab ngang
'\v' // phm tab dc
'\b' //phm li
Cc du nhy n, nhy i v k t gch cho ngc cng c th s dng k
hiu escape:
'V' // trch dn n (')
'V" // trch dn i (")
'\Y // du vch cho ngc (\)
K t cng c th c ch nh r s dng gi tr m s ca chng. M
escape tng qut \ooo (ngha l, 3 k t s c s 8 theo sau mt du gch cho
ngc) c s dng cho mc ch ny. V d (gi s ASCII):
'\12' // hng mi (m thp phn =10)
MI ' // tab ngang (m thp phn = 9)
MOI' // 'A' (m thp phn = 65)
'\0' // rng (m thp phn = 0)
l.ll.ChuS
Chui l mt dy lin tip cc k t c kt thc bng mt k t null. Bi n
chu i c nh ngha kiu char* (ngha l, con tr k t). Con tr on gin
ch l mt v tr trong b nh. (Cc con tr s c tho lun trong chng 5).
V th bin chui cha ng a ch ca k t u tin trong chui. V d,
xem xt nh ngha:
char *str="HELLO";
Hnh 1.4 minh ha bin chui v chui "HELLO" c th xut hin nh th no
trong b nh.
Hnh 1.4 Chu i v bi n chu i trong b nh'
1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218
1212 'H' 'E' 'L' 'L' 'O' V0'
str
Chu i c vit bng cch ng ngoc cc k t ca n bn trong cp
du nhy kp (v d, "HELLO"). Trnh bin dch lun lun thm vo mt k t
null ti mt hng chui nh du im kt thc. Cc k t chui c th
c c t s dng bt k k hiu no dng c t cc k t. V d:
"Name\tAddress'Telephone'' //cc t phn cch
"ASCI character65: \101" //'A'ucctnh'10r
Chng 1: M u 12
Chui di c th ni rng qua khi mt hng n, trong trng hp ny
th mi hng trc phi c kt thc bng mt du vch cho ngc. V d:
"Exampleto show \
theuse of backslash for \
writing a long string"
Du \ trong ng cnh ny c ngha l phn cn li ca chui c tip tc
trn hng k tip. Chui trn tng ng vi chui c vit trn hng n
nh sau:
"Exampleto show the useof backslash for writing a long string"
Mt li lp trnh chung thng xy ra l lp trnh vin thng nhm ln
mt chui k t n (v d, "A") vi mt k t n (v d, ' '). Hai iu ny l
khng tng ng. Chui k t n gm 2 byte (k t 'A' c theo sau l
k t \),trong khi k t n gm ch mt byte duy nht.
Chui ngn nht c th c l chui rng ("") ch cha k t null.
1.12.Tn
Ngn ng lp trnh s dng tn tham kho ti cc thc th khc nhau dng
to ra chng trnh. Chng ta cng thy cc v d ca mt loi cc tn
(ngha l tn bin) nh th. Cc loi khc gm: tn hm, tn kiu, v tn
macro.
S dng tn rt tin li cho vic lp trnh, n cho php lp trnh vin t
chc d liu theo cch thc m con ngi c th hiu c. Tn khng c
a vo m c th thc thi c to ra bi trnh bin dch. V d, mt bin
temperature cui cng tr thnh mt vi byte b nh m c tham kho ti
bi cc m c th thc thi thng qua a ch ca n (khng thng qua tn ca
n).
C++p t nhng lut sau xy dng cc tn hp l (cng c gi l
cc nh danh). Mt tn cha mt hay nhiu k t, mi k t c th l mt
ch ci (ngha l, 'A'-'Z' v 'a'-'z'), mt s (ngha l, '0'-'9'), hoc mt k t
gch di ngoi tr k t u tin khng th l mt s. Cc k t vit
hoa v vit thng l khc nhau.V d:
salary //nh danh hp l
salaiy2 // nh danh hp l
Zsalary //nh danh khng hp l(bt u vi mt s)
_salary // nh danh hp l
Salary // hp lnhung khc vi salary
Chng 1: M u 13
c++ kling c gii hn s k t ca mt nh danh. Tuy nhin, hu ht
thi cng li p t s gii hn ny nhng thng ln khng gy bn
tm cho cc lp trnh vin (v d 255 k t).
Mt s t c gi bi c++ cho mt s mc ch ring v khng th
c dng cho cc nh danh. Nhng t ny c gi l t kha (keyword)
v c tng kt trong bng 1.3:
B ng 1.3 Cc t kha c++.
asm continue float new signed
try
auto default for operator sizeof typedef
break delete friend private static union
case do goto protected struct unsigned
catch double if public switch virtual
char else inline register template void
class enum int return this volatile
const extern long short throw while
Bi t p cu i ch ng 1
1.1 Vit chng trnh cho php nhp vo mt s o nhit theo Fahrenheit
v xut ra nhit tng ng ca n theo Celsius, s dng cng thc
chuyn i:
C = - ( F - 32)
9
Bin dch v chy chng trnh. Vic thc hin ca n ging nh th ny:
Nhiet do theo do Fahrenheit: 41
41 do Fahrenheit=5 do Celsius
1.2 Hng no trong cc hng sau biu din vic nh ngha bin l khng hp l?
int n=-100;
unsigned inti-100;
signed int=2.9;
longm=2,p=4;
mt 2k;
double x=2 *m;
floaty=y *2;
unsigned double z=0.0;
double d=0.67F;
float -0.52L;
signed char=-1786;
charc = '$'+2;
sign char h=Mil';
Chng 1: M u 14
char *name ="Peter Pan'';
unsigned char *num="276811";
1.3 Cc nh danh no sau y l khng hp l?
identifier
scvcn_l 1
_uniqe_
gross-incomc
gross$income
2by2
default
avcragc_wcight_of_a_largc_pizza
variable
object-oriented
1.4 nh ngha cc bin biu din cc mc sau y:
Tui ca mt ngi.
Thu nhp ca mt nhn vin.
S t trong mt t in.
Mt k t alphabet.
Mt thng ip chc mng.
Chng 1: M u 15
Ch ng 2. Bi u th c
Chng ny gii thiu cc ton t xy dng sn cho vic son tho cc biu
thc. Mt biu thc l bt k s tnh ton no m cho ra mt gi tr.
Khi tho lun v cc biu thc, chng ta thng s dng thut ng c
lng. V d, chng ta ni rng mt biu thc c lng mt gi tr no .
Thng th gi tr sau cng ch l l do cho vic c lng biu thc. Tuy
nhin, trong mt vi trng hp, biu thc cng c th cho cc kt qu ph.
Cc kt qu ny l s thay i lu di trong trng thi ca chng trnh.
Trong trng hp ny, cc biu thc c++th khc vi cc biu thc ton hc.
C++cung cp cc ton t cho vic son tho cc biu thc ton hc,
quan h, lun l, trn bit, v iu kin. N cng cung cp cc ton t cho ra
cc kt qu ph hu dng nh l gn, tng, v gim. Chng ta s xem xt ln
lt tng loi ton t. Chng ta cng s tho lun v cc lut u tin m nh
hng n th t c lng ca cc ton t trong mt biu thc c nhiu
ton t.
2.1. Ton t ton hoc
c++cung cp 5 ton t ton hc c bn. Chng c tng kt trong Bng
2. 1.
B ng 2.1 Cc ton t ton h c.
Ton t Tn V d
+ Cng 12+4.9 //cho 16.9
- Tr 3.98-4 //cho-0.02
*
Nhn 2*3.4 //cho 6.8
/ Chia 9/2.0 //cho 4.5
%
Ly phn d 13% 3 //choi
Ngoi tr ton t ly phn d (%) th tt c cc ton t ton hc c th
chp nhn pha trn cc ton hng s nguyn v ton hng s thc. Thng
thng, nu c hai ton hng l s nguyn sau kt qu s l mt s
Chng 2: Biu thc 17
nguyn. Tuy nhin, mt hoc c hai ton hng l s thc th sau kt qu s
l mt s thc (real hay double).
Khi c hai ton hng ca ton t chia l s nguyn th sau php chia
c thc hin nh l mt php chia s nguyn v khng phi l php chia
thng thng m chng ta s dng. Php chia s nguyn lun cho kt qu
nguyn (c ngha l lun c lm trn). V d:
9/2 //c 4, khng phi l 4.5!
-9/2 //c -5, khng phi l -4!
Cc php chia s nguyn khng xc nh thng l cc li lp trnh
chun. thu c mt php chia s thc khi c hai ton hng l s nguyn,
bn cn p mt trong hai s nguyn v s thc:
int cost=100;
int volume=80;
double unitPrice=cost / (double) volume; //c 1.25
Ton t ly phn d (%) yu cu c hai ton hng l s nguyn. N tr v
phn d cn li ca php chia. V d 13%3 c tnh ton bng cch chia s
nguyn 13 i 3 c 4 v phn d l 1; v th kt qu l 1.
C th c trng hp mt kt qu ca mt php ton ton hc qu ln
lu tr trong mt bin no . Trng hp ny c gi l trn. Hu qu ca
trn l ph thuc vo my v th n khng c nh ngha.V d:
usignedchar k=10*92; //trn: 920 >255
Chia mt s cho 0 l hon ton khng ng lut. Ket qu ca php chia
ny l mt li run-time gi l li division-by-zero thng lm cho chng
trnh kt thc.
2.2. Ton t quan h
c++cung cp 6 ton t quan h so snh cc s. Cc ton t ny c tng
kt trong Bng 2.2. Cc ton t quan h c lng v 1(thay cho kt qu
ng) hoc 0 (thay cho kt qu sai).
B ng 2.2 Cc ton t quan h .
Ton t Tn V du
=
So snh bng 5 =5 //choi
=
So snh khng bng 5!=5 //choO
< So snh h hn
5<5.5 //choi
<= So snh h hn hoc bng 5<=5 //choi
> So snh ln hn 5 >5.5 // cho 0
>= So snh ln hn hoc bng 6.3>=5 //choi
Chng 2: Biu thc 18
Ch rng cc ton t <=v >=ch c h tr trong hnh tlic hin th.
Ni ring c hai =<v =>u khng hp l v khng mang ngha g c.
Cc ton hng ca mt ton t quan h phi c lng v mt s. Cc k
t l cc ton hng hp l v chng c i din bi cc gi tr s. V d (gi
s m ASCII):
'A '<F //c 1(ging nh l 65 <70)
Cc ton t quan h khng nn c dng so snh chui bi v iu
ny s dn n cc a ch ca chui c so snh ch khng phi l ni dung
chui. V d, biu thc
"HELLO" <"BYE"
lm cho a ch ca chui "HELLO" c so snh vi a chi ca chui "BYE".
V cc a ch ny c xc nh bi trnh bin dch, kt qu c th l 0 hoc
c th l 1, cho nn chng ta c th ni kt qu l khng c nh ngha.
C++ cung cp cc th vin hm (v d, strcmp) thc hin so snh
chui.
2.3. Ton t lu n l
C++cung cp ba ton t lun l cho vic kt ni cc biu thc lun l. Cc
ton t ny c tng kt trong Bng 2.3. Ging nh cc ton t quan h, cc
ton t lun l c lng ti 0 hoc 1.
B ng 2.3 Cc ton t lu n l.
Ton t Tn V du

Ph nh lun l
1(5 5)
// c 0
&& V lun l 5< 6 && 6 < 6 // c 0
II Hoc lun l 5< 6 II 6 <5 // c 1
Ph nh lu n l l mt ton t n hng ch ph nh gi tr lun l ton
hng on ca n. Neu ton hng ca n khng l 0 th c 0, v nu n l
khng th c 1.
V lun l cho kt qu 0 nu mt hay c hai ton hng ca n c lng
ti 0. Ngc li, n cho kt qu 1. Hoc lun l cho kt qua 0 nu c hai ton
hng ca n c lng ti 0. Ngc li, n cho kt qu 1.
Ch rng y chng ta ni cc ton hng l 0 v khc 0. Ni chung,
bt k gi tr khng l 0 no c th c dng i din cho ng (true),
trong khi chi c gi tr 0 l i din cho sai (false). Tuy nhin, tt c cc hng
sau y l cc biu thc lun l hp l:
Chng 2: Biu thc 19
!20 //cO
10 && 5 //ucl
10II 5.5 //uc 1
10&&0 //cO
C++khng c kiu boolean xy dng sn. V l m ta c th s dng
kiu int cho mc ch ny. V d:
int sorted=0; //false
int balanced = 1; // true
2.4. Ton t trn bit
C++cung cp 6 ton t trn bit e iu khin cc bit ring l trong mt s
lng s nguyn. Chng c tng kt trong Bng 2.4.
B ng 2.4 Cc ton t trn bit.
Ton t Tn V du
~ Ph nh bit ~\011' //uocMS
& V bit w & \ 027 //cW
Hoc bit
WI N027 // c \02>T
A
Hoc exclusive bit W A\027 // c \036
Dch tri bit w 2 //c \044
Dch phi bit N011'2 //oc \002'
Cc ton t trn bit mong i cc ton hng ca chng l cc s nguyn
v xem chng nh l mt chui cc bit. Ph nh bit l mt ton t on hng
thc hin o cc bit trong ton hng ca n. V bit so snh cc bit tng ng
ca cc ton hng ca n v cho kt qu l 1khi c hai bit l 1, ngc li l 0.
Ho c bit so snh cc bit tng ng ca cc ton hng ca n v cho kt qu l
0 khi c hai bit l 0, ngc li l 1. XOR bit so snh cc bit tng ng ca
cc ton hng ca n v cho kt qu 0 khi c hai bit l 1hoc c hai bit l 0,
ngc li l 1.
C hai ton t dch tri bit v dch ph i bit ly mt chui bit lm ton
hng tri ca chng v mt s nguyn dng n lm ton hng phi. Ton t
dch tri cho kt qu l mt chui bit sau khi thc hin dch n bit trong chui
bit ca ton hng tri v pha tri. Ton t dch phi cho kt qu l mt chui
bit sau khi thc hin dch n bit trong chui bit ca ton hng tri v pha phi.
Cc bit trng sau khi dch c t ti 0.
Bng 2.5 minh ha chui cc bit cho cc ton hng v d v kt qu trong
Bng 2.4. trnh lo lng v bit du (iu ny ph thuc vo my) thng
th khai bo chui bit nh l mt s khng du:
unsigned charx=l\01 ;
unsigned chary=*'027;
Chng 2: Biu thc 20
Bng 2.5 Cc bt c tnh ton nh th no.
V d Gi tri c s 8 Chui bit
X 01 1 0 0 0 0 1 0 0 1
y
027 0 0 0 I 0 1 1 1
~ x 366 1 1 1 1 0 1 1 0
x & y 001 0 0 0 0 0 0 0 1
X y 037 0 0 0 I 1 1 1 1
x A y 036 0 0 0 1 1 1 1 0
x 2 044 0 0 1 0 0 1 0 0
x 2 002 0 0 0 0 0 0 1 0
2.5. Ton t tng/gi m
Cc ton t tng m t (++) v gi m m t (--) cung cp cc tin li tng ng
cho vic cng thm 1vo mt bin s hay tr i 1t mt bin s. Cc ton t
ny c tng kt trong Bng 2.6. Cc v d gi s nh ngha bin sau:
int k=5;
B ng 2.6 Cc ton t tng v gi m.
Ton t Tn V du
++ Tng mt (tin t) -H-k+10 //c 16
++ Tng mt (hu t) k+++10 //c 15
Gim mt (tin t) -k+10 // c 14
Gim mt (hu t) k-+10 //c 15
C hai ton t c th c s dng theo hnh thc tin t hay hu t l
hon ton khc nhau. Khi c s dng theo hnh thc tin t th ton t
c p dng trc v kt qu sau c s dng trong biu thc. Khi
c s dng theo hnh thc hu t th biu thc c c lng trc v sau
ton t c p dng.
C hai ton t c th c p dng cho bin nguyn cng nh l bin
thc mc d trong thc t th cc bin thc him khi c dng theo hnh
thc ny.
2.6. Ton t kh i tao
Ton t khi to c s dng lu tr mt bin. Ton hng tri nn l mt
gi tr tri v ton hng phi c th l mt biu thc bt k. Biu thc c
c lng v kt qu c lu tr trong v tr c chi nh bi gi tr tri.
Gi tr tri l bt k th g chi nh r v tr b nh l u tr mt gi tr.
Ch mt loi ca gi tr tri m chng ta c bit cho n thi im ny l
Chng 2: Biu thc 21
bin. Cc loi khc ca gi tr tri (da trn con tr v tham chiu) s c
tho lun sau.
Ton t khi to c mt s bin th thu c bng cch kt ni n vi
cc ton t ton hc v cc ton t trn bit. Chng c tng kt trong Bng
2.7. Cc v d gi s rng n l mt bin s nguyn.
B ng 2.7 Cc ton t kh i t o.
Ton t V du Tng ng vi
=
n=25
+= n+=25 n=n+25
-
n-=25 n=n-25
*_
11*=25 n=n* 25
/= n/=25 n=n/25
%= n%=25 n=n%25
&= n&=0xF2F2 n=n&QxF2F2
n=0xF2F2 n=n|QxF2F2
=
nA=0xF2F2 n=nAQxF2F2
= n=4 n=n4
=
n=4 n=n4
Php ton khi to chnh n l mt biu thc m gi tr ca n l gi tr
c lu trong ton hng tri ca n. V th mt php ton khi to c th
c s dng nh l ton hng phi ca mt php ton khi to khc. Bt k
s lng khi to no c th c kt ni theo cch ny hnh thnh mt
biu thc. V d:
intm,p;
m=n=p=100; //nghal: n=(m=(p= 100));
m=(n=p=100)+2; // nghal: m=(n=(p =100))+2;
Vic ny c th ng dng tng t cho cc hnh thc khi to khc. V d:
m=100;
m-H=n=p=10; //nghal:m=m+(n=p=10);
2.7. Ton t i u ki n
Ton t iu kin yu cu 3 ton hng. Hnh thc chung ca n l:
ton h ng 1 ? ton h ng 2 : ton h ng 3
Ton hng u tin c c lng v c xem nh l mt iu kin. Neu
kt qu khng l 0 th ton hng 2 c c lng v gi tr ca n l kt qu
sau cng. Ngc li, ton hng 3 c c lng v gi tr ca n l kt qu
sau cng. V d:
Chng 2: Biu thc 22
intml ,n2;
intmin=(m<n?m:n); // min nhn gi tr 1
Ch rng trong cc ton hng th 2 v ton hng th 3 ca ton t iu
kin th ch c mt ton hng c thc hin. iu ny l quan trng khi mt
hoc c hai cha hiu ng ph (ngha l, vic c lng ca chng lm
chuyn i gi tr ca bin). V d, vi m=l v n=2 th trong
int min=(m < n ? nrrH-: n-H-);
m c tng ln bi v m-H- c c lng nhng n khng tng v n-H-
khng c c lng.
Bi v chnh php ton iu kin cng l mt biu thc nn n c th
c s dng nh mt ton hng ca php ton iu kin khc, c ngha l
cc biu thc iu kin c th c lng nhau. V d:
intm=l,n=2,p=3;
intmin=(m<n ?(m<p?m:p)
:(n<p?n:p));
2.8. Ton t ph y
Nhiu biu thc c th c kt ni vo cng mt biu thc s dng ton t
phy. Ton t phy yu cu 2 ton hng. u tin n c lng ton hng tri
sau l ton hng phi, v tr v gi tr ca ton hng phi nh l kt qu
sau cng. V d:
intm=l,n=2,min;
int mCount=0, nCount=0;
//...
min=(m<n ? mCount-H-, m: nCount++, n);
y khi m nh hon n, mCount-H- c c lng v gi tr ca m c lu
ong min. Ngc li, nCount-H- c c lng v gi tr ca n c lu
trong min.
2.9. Ton t l y kch th c
C++cung cp ton t hu dng, sizeof, tnh ton kch thc ca bt k
hng mc d liu hay kiu d liu no. N yu cu mt ton hng duy nht c
th l tn kiu (v d, int) hay mt biu thc (v d, 100) v tr v kch thc
ca nhng thc th ch nh theo byte. Ket qu hon ton ph thuc vo
my. Danh sch 2.1 minh ha vic s dng ton t sizeof cho cc kiu c sn
m chng ta gp cho n thi im ny.
Chng 2: Biu thc 23
Danh sch 2.1
2
3
4
5
6
7
8
9
10
11
12
13
14
Khi chy, chng trnh s cho kt qu sau (trn my tnh c nhn):
char size=1bytes
char* size=2 bytes
short size=2 bytes
int size=2 bytes
long size=4 bytes
float size=4bytes
double size=8 bytes
1.55 size=8 bytes
1.55L size =10 bytes
HELLO size=6 bytes
2.10. u tin c a cc ton t
Th t m cc ton t c c lng trong mt biu thc l rt quan trng
v c xc nh theo cc lut u tin. Cc lut ny chia cc ton t C++ra
thnh mt s mc u tin (xem Bng 2.8). Cc ton t mc cao hn s
c u tin cao hn cc ton t c u tin thp hn.
B ng 2.8 u tin c a cc ton t .
Mc Ton t Loai Th t
Cao nht n hng C hai
1 n
-> Nh hng Tri ti phi
+ ++

*
&
new sizeof
delete 0
n hng Phi ti tri
->*
*
Nh hng Tri ti phi
*
/ % Nh hng Tri ti phi
+ - Nh hng Tri ti phi
Nh hng Tri ti phi
< <= > >=
Nh hng Tri ti phi
= =
Nh hng Tri ti phi
& Nh hng Tri ti phi
#indude <iostneamii>
int main (void)
{
cout"char size="sizeof(char)"bytes\n";
cout"char* size=" sizeoflchar*) " bytes'-n";
cout "short size=" sizeof(short) " bytes\n";
cout "int size=" sizeof(int) " bytes\n";
cout "long size=" sizeofflong) " bytes\n";
cout "float size=" sizeof(float) " bytes\n";
cout "double size=" sizeoffdouble) " bytes\n";
cout " 1.55 size=" sizeof( 1.55) " bytes\n";
cout " 1.55L size=" sizeof( 1.55L) " bytes\n";
cout "HELLO size=" sizeof("HELLO") " bytes\n";
i _____________________________________________________
Chng 2: Biu thc
A
Nh hng Tri ti phi
1 Nh hng Tri ti phi
&& Nh hng Tri ti phi
II Nh hng Tri ti phi
? ;
Tam hng Tri ti phi
= += *= /s= &= =
-= /= %= 1= =
Nh hng Phi ti tri
Thp nht
?
Nh hng Tri ti phi
V d, trong biu thc
a=b+c* d
c * d c c lng trc bi v ton t * c u tin cao hn ton t + v
=. Sau kt qu c cng ti b bi v ton t + c u tin cao hn ton
t =, v sau = c c lng. Cc lut u tin c th c cho quyn
cao hn thng qua vic s dng cc du ngoc. V d, vit li biu thc trn
nh sau
a=(b+c)*d
s lm cho ton t + c c lng trc ton t *.
Cc ton t vi cng mc u tin c c lng theo th t c
c lng trong ct cui cng trong Bng 2.8. V d, trong biu thc
a=b+=c
th t c lng l t phi sang tri, v th b+=c c c lng trc v k
l a=b.
2.11.Chuy n ki u n gi n
Mt gi tr thuc v nhng kiu xy dng sn m chng ta bit n thi im
ny u c th c chuyn v bt k mt kiu no khc. V d:
(int) 3.14 // chuyn 3.14 sang int c 3
(long) 3.14 //ch/n 3.14 sang long ic 3L
(double) 2 // chuyn 2 sang double uc 2.0
(char) 122 // chuyn 122 sang char c m l 122
(unsigned short) 3.14 // c 3 nh l mt unsigned short
Nh c trnh by trong cc v d, cc nh danh kiu xy dng sn
c th c s dng nh cc ton t ki u. Cc ton t kiu l n hng
(ngha l ch c mt ton hng) v xut hin bn trong cc du ngoc v bn
tri ton hng ca chng. iu ny c gi l chuyn kiu tng minh.
Khi tn kiu ch l mt t th c th t du ngoc xung quanh ton hng:
int(3.14) //nhl:(int)3.14
Chng 2: Biu thc 25
Trong mt vi trng hp, C++ cng thc hin chuy n ki u khng
t ng minh. iu ny xy ra khi cc gi tr ca cc kiu khc nhau c trn
ln trong mt biu thc. V d:
double d= 1; //dnhnl.o
int 1=10.5; // i nhn 10
i =i +d; //ngha l: i=int(double(i)+d)
Trong v d cui , i +d bao hm cc kiu khng hp nhau, v th trc tin i
c chuyn thnh double (thng c p) v sau c cng vo d. Ket qu l
double khng hp kiu vi i trn pha tri ca php gn, v th n c chuyn
thnh int {h c p) trc khi c gn cho i.
Lut trn i din cho mt vi trng hp chung n gin chuyn
kiu. Cc trng hp phc tp hn s c trnh by phn sau ca gio
trnh sau khi chng ta tho lun cc kiu d liu khc.
Bi t p cu i ch ng 2
2.1 Vit cc biu thc sau y:
Kim tra mt s n l chn hay khng.
Kim tra mt k t c l mt s hay khng.
Kim tra mt k t c l mt mu t hay khng.
Thc hin kim tra: n l l v dng hoc n chn v m.
t li k bit ca mt s nguyn n ti 0.
t k bit ca mt s nguyn ti 1.
Cho gi tr tuyt i ca mt s n.
Cho s k t trong mt chui s c kt thc bi k t null.
2.2 Thm cc du ngoc ph vo cc biu thc sau hin th r rng th t cc
ton t c c lng:
(n <=p +q && n >=p - q II n = 0)
(++n*q-/-Hp-q)
(n|p&qAp<<2+q)
(p<q?n<p?q*n-2:q/n+l :q-n)
2.3 Cho bit gi tr ca mi bin sau y sau khi khi to n:
double d=2 * int(3.14);
long k=3.14 - 3;
chr c='a'+2;
char c=lp'+''-'a';
2.4 Vit mt chng trnh cho php nhp vo mt s nguyn dng n v xut ra
gi tr ca n m 2 v 2 m n.
Chng 2: Biu thc 2 6
2.5 Vit mt chng trnh cho php nhp ba s v xut ra thng ip Sorted nu
cc s l tng dn v xut ra Not sorted trong trng hp ngc li.
Chng 2: Biu thc 27
Ch ng 3. L nh
Chng ny gii thiu cc hnh thc khc nhau ca cc cu lnh C++ son
tho chng trnh. Cc lnh trnh by vic xy dng cc khi mc thp
nht ca mt chng trnh. Ni chung mi lnh trnh by mt bc tnh ton
c mt tc ng chnh yu. Bn cnh cng c th c cc tc n ph
khc. Cc lnh l hu dng v tc dng chnh yu m n gy ra, s kt ni ca
cc lnh cho php chng trnh phc v mt mc ch c th (v d, sp xp
mt danh sch cc tn).
Mt chng trnh ang chy dnh ton b thi gian thc thi cc cu
lnh. Th t m cc cu lnh c thc hin c gi l dng i u khi n
(flow control). Thut ng ny phn nh vic cc cu lnh ang thc thi hin
thi c s i u khi n ca CPU, khi CPU hon thnh s c chuyn giao ti
mt lnh khc. c trng dng iu khin trong mt chng trnh l tun t,
lnh ny n lnh k, nhng c th chuyn hng ti n dn khc bi cc
lnh r nhnh. Dng iu khin l mt s xem xt trng yu bi v n quyt
nh lnh no c thc thi v lnh no khng c thc thi trong qu trnh
chy, v th lm nh hng n kt qu ton b ca chng trnh.
Ging nhiu ngn ng th tc khc, C++cung cp nhng hnh thc khc
nhau cho cc mc ch khc nhau. Cc lnh khai bo c s dng cho nh
ngha cc bin. Cc lnh nh gn c s dng cho cc tnh ton i s n
gin. Cc lnh r nhnh c s dng ch nh ng dn ca vic thc thi
ph thuc vo kt qu ca mt iu kin lun l. Cc lnh lp c s dng
ch nh cc tnh ton cn c lp cho ti khi mt iu kin lun l no
c tha. Cc lnh iu khin c s dng lm chuyn ng dn
thc thi ti mt ng dn khc ca chng trnh. Chng ta s ln lt tho
lun tt c nhng vn ny.
Chng 3: Lnh 30
3.1. L nh on v l nh ph c
L nh n l mt s tirh ton c kt thc bng du chm phy. Cc nh
ngha bin v cc biu thc c kt thc bng du chm phy nh trong v
d sau:
V d cui trnh by mt lnh khng hu dng bi v n khng c tc ng
chnh yu (d c cng vi 5 v kt qu b vt b).
Lnh n gin nht l lnh rng ch gm du chm phy m thi.
Mc du lnh rng khng c tc ng chnh yu nhng n c mt vi
vic dng xc tht.
Nhiu lnh n c th kt ni li thnh mt l nh ph c bng cch ro
chng bn trong cc du ngoc xon. V d:
{int min, i =10,j=20;
m,n=(i<j?i:j);
coutmn<<W;
}
Bi v mt lnh phc c th cha cc nh ngha bin v nh ngha mt
phm vi cho chng, n cng c gi m t kh i. Phm vi ca mt bin C++
c gii hn bn trong khi trc tip cha n. Cc khi v cc lut phm vi
s c m t chi tit hn lchi chng ta tho lun v hm trong chng k.
i khi chng ta mun lm cho s thc thi mt lnh ph thuc vo mt iu
kin no cn c tha. Lnh if cung cp cch thc hin cng vic ny,
hnh thc chung ca lnh ny l:
if (biu th c)
Trc tin bi u th c c c lng. Nu kt qu khc 0 (ng) th sau
l nh c thc thi. Ngc li, khng lm g c.
V d, khi chia hai gi tr chng ta mun kim tra rng mu s c khc 0
hay khng.
if(count!=0)
int i;
++i;
//lnhkhai bo
// lnh ny c mt tc ng chnh yu
//lnhkhai bo
// lnhkhng hu ng
doubled=10.5;
d+5;
//lnh rng
3.2. L nh if
l nh;
Chng 3: Lnh 31
averagesum/ count;
lm cho nhiu lnh ph thuc trn cng iu kin chng ta c th s
dng lnh phc:
if(balance>0) {
interest - balance * creditRate;
balance +=interest;
}
Mt hnh thc khc ca lnh if cho php chng ta chn mt trong hai
lnh: mt lnh c thc thi nu nh iu kin c tha v lnh cn li
c thc hin nu nh iu kin khng tha. Hnh thc ny c gi l lnh
if-else v c hnh thc chung l:
if {bi u th c)
l nh 1;
else
l nh 2;
Trc tin bi u th c c c lng. Neu kt qu khc 0 th l nh 1 c
thc thi. Ngc li, l nh 2 c thc thi.
V d:
if(balance>0) {
interestbalance * creditRate;
balance +=interest;
}else {
interest=balance * debitRate;
balance+=interest;
}
Trong c hai phn c s ging nhau lnh balance-H=interest v th ton b cu
lnh c th vit li nh sau:
if(balance>0)
interestbalance * creditRate;
else
interest=balance * debitRate;
balance+=interest;
Hoc n gin hn bng vic s dng biu thc iu kin:
interest=balance* (balance>0 ? creditRate: debitRate);
balance -t=interest;
Hoc ch l:
balance +=balance * (balance > 0 ? creditRate: debitRate);
Cc lnh if c th c lng nhau bng cch cho mt lnh if xut hin
bn trong mt lnh if khc. V d:
Chng 3: Lnh 32
if(calIHour>6) {
if (callDuration<=5)
charge=callDuration * tarrifl;
else
charge=5 * tarrifl + (callDuration - 5) * tarrif2;
}else
charge=flatFee;
Mt hnh thc c s dng thng xuyn ca nhng lnh if lng nhau
lin quan n phn else gm c mt lnh if-else khc. V d:
if(ch >='()'&& ch <=9')
kind=git;
clsc {
if (ch >='A' && ch<='Z)
kind=upperLetter,
clsc {
if (ch >='a' && ch <='f)
kind =lower Letter,
else
kind=special;
}
>
e cho d c c th s dng hnh thc sau:
if (ch >='0' && ch <=V)
kind=digit;
elseif (ch >='A' && ch<=Z)
kind=capitalLetter,
elseif (ch >='a&& ch<=V)
kind =smallLetter,
else
kind=special;
3.3. Lnh switch
Lnh switch cung cap phng thc la chn gia mt tp cc kh nng da
trn gi tr ca biu thc. Hnh thc chung ca cu lnh switch l:
switch (bi th c) {
casch ng :
cc l nh;
case hng
cc l nh',
default:
cc l nh',
}
Bi u th c (gi l th switch) c c lng trc tin v kt qu c so
snh vi mi hng s (gi l cc nhn) theo th t chng xut hin cho n
khi mt so khp c tm thy. L nh ngay sau khi so khp c thc hin
Chng 3: Lnh 33
sau . Ch s nhiu: mi case c th c theo sau bi khng hay nhiu
lnh (khng ch l mt lnh). Vic thc thi tip tc cho ti khi hoc l bt gp
mt lnh hrcak hoc tt c cc lnh xen vo n cui lnh switch c thc
hin.Trng hp default cui cng l mt ty chn v c thc hin nu
nh tt c cc case trc khng c so khp.
V d, chng ta phi phn tch c php mt php ton ton hc nh hng
thnh ba thnh phn ca n v phi lu tr chng vo cc bin operator,
operandi, v opcrand2. Lnh switch sau thc hin php ton v lu tr kt qu
vo result
switch(operator) {
case result=operandl +operand2;
break;
case result=operand 1- operand2;
break;
case result=operand 1* operand2;
break;
case'A result=operand 1/ operand2;
break;
default: cout"unknownoperator "operator V;
break;
}
Nh c minh ha trong v d, chng ta cn thit chn mt lnh
break cui mi case. Lnh break ngt cu lnh switch bng cch nhy n
im kt thc ca lnh ny. V d, nu chng ta m rng lnh trn cho
php X cng c th c s dng nh l ton t nhn, chng ta s c:
switch(operator) {
case result=operandl +operand2;
break;
caseresul t=operand 1- operand2;
break;
casehi:
case result=operand 1* operand2;
break;
case 7: result=operandl / operand2;
break;
default: cout "unknownoperator "operatorVi';
break;
}
Bi v case 'x' khng c lnh break nn khi case ny c tha th s thc thi
tip tc thc hin cc lnh trong case k tip v php nhn c thi hnh.
Chng ta c th quan st rng bt k lnh switch no cng c th c
vit nh nhiu cu lnh if-else. V d, lnh trn c th c vit nh sau:
Chng 3: Lnh 34
if (operator - '+1)
result=operand 1+operand2;
elseif (operator = -1)
result=operand 1- operand2;
else if (operator= bc' II operator '*')
result=operand 1* operand2;
elseif (operator= 7)
result=operand 1/ operand2;
else
cout "unknown operator " ch V;
ngi ta c th cho rang phin bn switch l r rng hn trong trng hp
ny. Tip cn if-else nn c dnh ring cho tnh hung m trong switch
khng th lm c cng vic (v d, khi cc iu kin l phc tp khng th
n gin thnh cc ng thc ton hc hay khi cc nhn cho cc case khng
l cc hng s).
3.4. Lnh while
Lnh while (cng c gi l vng lp while) cung cp phng thc lp mt
lnh cho ti khi mt iu kin c tha. Hnh thc chung ca lnh lp l:
while (bi u th c)
l nh;
Bi u th c (cng c gi l iu kin lp) c c lng trc tin. Nu
kt qu khc 0 th sau l nh (cng c gi l thn vng lp) c thc
hin v ton b qu trnh c lp li. Ngc li, vng lp c kt thc.
V d, chng ta mun tnh tng ca tt c cc s nguyn t 1ti n. iu
ny c th c din gii nh sau:
i =l ;
sum=0;
while(i<=n){
sum+=i;
H-+;
}
Trng hp n l 5, Bng 3.1 cung cp bng pht ha vng lp bng cch
lit k cc gi tr ca cc bin c lin quan v iu kin lp.
B ng 3.1 v t c a vng l p while.________________________________
Vng lp i n i <=n sum -H=i++
Mt 1 5 1 1
Hai
'
L 5 1 3
Ba 3 5 1 6
Bn 4 5 1 10
Nm 5 5 1 15
Su 6 5 0
Chng 3: Lnh 35
i khi chng ta c th gp vng lp while c thn rng (ngha l mt
cu lnh null). V d vng lp sau t n ti tha s l ln nht ca n.
while(n%2=0&&n/=2) ;
y iu kin lp cung cp tt c cc tnh ton cn thit v th khng tht s
cn mt thn cho vng lp. iu kin vng lp khng nhng kim tra n l
chn hay khng m n cn chia n cho 2 v chc chn rng vng lp s dng.
3.5. Lnh do - while
Lnh do (cng c gi l vng l p do) th tng t nh lnh while ngoi tr
thn ca n c thc thi trc tin v sau iu kin vng lp mi c
kim tra. Hnh thc chung ca lnh do l:
do
l nh'
while (bi u th c)',
L nh c thc thi trc tin v sau bi u th c c c lng. Neu kt
qu ca biu thc khc 0 th sau ton b qu trnh c lp li. Ngc li
th vng lp kt thc.
Vng lp do t c s dng thng xuyn hn vng lp while. N hu
dng trong nhng trng hp khi chng ta cn thn vng lp thc hin t nht
mt ln m khng quan tm n iu kin lp. V d, gi s chng ta mun
thc hin lp i lp li cng vic c mt gi tr v in bnh phng ca n, v
dng khi gi tr l 0. iu ny c th c din gii trong vng lp sau y:
do {
cinn;
coutn*n\r;
}while(n!=0);
Khng ging nh vng lp while, vng lp do t khi c s dng trong
nhng tnh hung m n c mt thn rng. Mc d vng lp do vi thn rng
c th l tng ng vi mt vng lp while tng t nhng vng lp while
th lun d c hn.
3.6. Lnh for

Lnh for (cng c gi l vng l p for) th tng t nh vng lp while


nhng c hai thnh phn thm vo: mt biu thc c c lng ch mt ln
trc ht v mt biu thc c c lng mi ln cui mi ln lp. Hnh
thc tng qut ca lnh for l:
Chng 3: Lnh 36
for (bi u th c ; bi u thc 2, bi u th c )
l nh',
Bi u th c (thng c gi l biu thc khi to) c c lng trc
tin. Mi vng lp bi u th c2 c c lng. Nu kt qu khng l 0 (ng)
th sau l nh c thc thi v bi u th c3 c c lng. Ngc li, vng
lp kt thc. Vng lp for tng qut th tng ng vi vng lp while sau:
bi u th cJ,
while (bi u th c 2) {
nh;
biu th c 3;
}
Vng lp for thng c s dng trong cc trng hp m c mt bin
c tng hay gim mi ln lp. V d, vng lp for sau tnh ton tng ca
tt c cc s nguyn t 1ti n.
sum=0;
for(i=l;i<=n;++i)
sum+=i;
iu ny c a chung hn phin bn ca vng lp while m chng ta thy
trc . Trong v d ny i thng c gi l bin lp.
C++cho php biu thc u tin trong vng lp for l mt nh ngha
bin. V d trong vng lp trn th i c th c nh ngha bn trong vng
lp:
for(inti=l;i<=n;+-H)
sum+=i;
Tri vi s xut hin, phm vi ca i khng trong thn ca vng lp m l
chnh vng lp. Xt trn phm vi thi trn tng ng vi:
inti;
for(i=l;i<=n;-Hi)
sum+=i;
Bt k biu thc no trong 3 biu thc ca vng lp for c th rng. V
d, xa biu thc u v biu thc cui cho chng ta dng ging nh vng
lp while:
for(;i!=0;) // tong ng vi: while(i!=0)
something; // something
Xa tt c cc biu thc cho chng ta mt vng lp v hn. iu kin ca
vng lp ny c gi s lun lun l ng.
for (;;) // vng lp v hn
something;
Chng 3: Lnh 37
Trng hp vng lp vi nhiu bin lp th him dng. Trong nhng
trng hp nh th, ton t phy (,) c s dng phn cch cc biu thc
ca chng:
for (i=0, j =0; i +j <n; -Hi, ++j)
something;
Bi v cc vng lp l cc lnh nn chng c th xut hin bn trong cc
vng lp khc. Ni cc khc, cc vng lp c th lng nhau. V d,
for (int i =1; i <=3; ++i)
for (intj = 1; j <=3; -H-j)
cout <<'C i <<7 j ")\n";
cho tch so ca tp hp {1,2,3} vi chnh n, kt qu nh sau:
]1)
?
2,1
)
23)
3,1)

(33)
3.7. L nh continue
Lnh continue dng ln lp hin ti ca mt vng lp v nhy ti ln lp k
tip. N p dng tc th cho vng lp gn vi lnh continue. S dng lnh
continue bn ngoi vng lp l li.
Trong vng lp while v vng lp do-while, vng lp k tip m u t
iu kin lp. Trong vng lp for, ln lp k tip khi u t biu thc th ba
ca vng lp. V d, mt vng lp thc hin c mt s, x l n nhng b
qua nhng s m, v dng khi s l 0, c th din gii nh sau:
do {
cinnum;
if (num<0) continue;
//xlsy...
}while(num!=0);
iu ny tng ng vi:
do {
cinnum;
if(num>=0) {
//xisy...
}
}while(num!=0);
Chng 3: Lnh 38
Mt bin th ca vng lp ny c chnh xc mt s n ln (hn l cho
ti khi s l 0) c th c din gii nh sau:
for(i=0;i<n;+-H) {
cinnum;
if(num<0) continue; //lmcho nhy ti:-Hi
//xlsy...
}
Khi lnh continue xut hin bn trong vng lp c lng vo th n p
dng trc tip ln vng lp gn n ch khng p dng cho vng lp bn
ngoi. V d, trong mt tp cc vng lp c lng nhau sau y, lnh
continue p dng cho vng lp for v khng p dng cho vng lp while:
while(more) {
for(i=0;i<n;-H-i) {
cinnum;
if(num<0) continue; //lmcho nhy ti:++i
// process numhere...
}
//etc...
>
3.8. Lnh break

Lnh break c th xut hin bn trong vng lp (while, do, hay for) hoc mt
lnh switch. N gy ra bc nhy ra bn ngoi nhng lnh ny v v th kt
thc chng. Ging nh lnh continue, lnh break ch p dng cho vng lp
hoc lnh switch gn n. S dng lnh break bn ngoi vng lp hay lnh
switch l li.
V d, chng ta c vo mt mt khu ngi dng nhng khng cho
php mt s hu hn ln th:
for (i=0; i <attempts; ++i) {
cout "Pleaseenter your password:
dn password;
if(Veriiy(password)) //kiemtramt khu ng hay sai
break; // Ihot khi vng lp
cout "Incorrect!\n";
}
y chng ta phi gi s rng c mt hm c gi Verify kim tra mt
mt khu v tr v true nu nh mt khu ng v ngc li l false.
Chng ta c th vit li vng lp m khng cn lnh break bng cch s
dng mt bin lun l c thm vo (verified) v thm n vo iu kin vng
lp:
verified=0;
for (i=0; i <attempts && !verified; ++i) {
Chng 3: Lnh 39
cout "Pleaseenter your password:
cin password;
verified=Verifylpassword));
if(!verified)
cout<<"Incorrect!\n";
}
Ngi ta cho rang phin bn ca break th n gin hn nn thng c a
chung hn.
3.9. L nh goto
Lnh goto cung cp mc thp nht cho vic nhy. N c hnh thc chung l:
goto nhn',
trong nhn l mt nh danh c dti nh du ch cn nhy ti.
Nhn cn c theo sau bi mt du hai chm (:) v xut hin trc mt lnh
bn trong hm nh chnh lnh goto.
V d, vai tr ca lnh break trong vng lp for trong phn trc c th
vit li bi mt lnh goto.
for (i=0; i <attempts; -Hi) {
cout"Pleseenteryourpassword:
cin password;
if (Veri(passwoixi)) // check password for correctness
goto out; // drop out of theloop
cout <<"Incorrect!\n";
}
out:
//etc...
Bi v lnh goto cung cp mt hnh thc nhy t do khng c cu trc
(khng ging nh lnh break v continue) nn d lm gy chng trnh.
Phn ln cc lp trnh vin ngy nay trnh s dng n lm cho chng
trnh r rng. Tuy nhin, goto c mt vi (d cho him) s dng chnh ng.
V s phc tp ca nhng trng hp nh th m vic cung cp nhng v d
c trnh by nhng phn sau.
3.10.L nh return
Lnh return cho php mt hm tr v mt gi tr cho thnh phn gi n. N c
hnh thc tng qut:
return bi u th c',
Chng 3: Lnh 40
trong bi u th c ch r gi tr c tr v bi hm. Kiu ca gi tr xiy nn
hp vi kiu ca hm. Trng hp kiu tr v ca hm l void, bi u th c nn
rong:
return;
Hm m c chng ta tho lun n thi im ny ch c hm main,
kiu tr v ca n l kiu int. Gi tr tr v ca hm main l nhng g m
chng trnh tr v cho h iu hnh khi n hon tt vic thc thi. Chng hn
di UNIX qui c l tr v 0 t hm main khi chng trnh thc thi khng
c li. Ngc li, mt m li khc 0 c tr v. V d:
int main (void)
{
cout "Hello World'n";
return0;
}
Khi mt hm c gi tr tr v khng l void (nh trong v d trn), nu
khng tr v mt gi tr s mang li mt cnh bo trnh bin dch. Gi tr tr
v thc s s khng c nh ngha trong trng hp ny (ngha l, n s l
bt c gi tr no c gi trong v tr b nh tng ng ca n ti thi im
).
Bi t p cu i ch ong 3
3.1 Vit chng trnh nhp vo chiu cao (theo centimet) v trng lng (theo
kilogram) ca mt ngi v xut mt trong nhng thng ip: underweight,
normal, hoc overweight, s dng iu kin:
Underweight: weight <height/2.5
Normal: height/2.5 <=weight <=height/2.3
Overweight: height/2.3 <weight
3.2 Gi s rng n l 20, on m sau s xut ra ci g khi n c thc thi?
if(n>=0)
if(n<10)
cout "n issmall'n";
else
cout "n is negative\n";
3.3 Vit chng trnh nhp mt ngy theo nh dng dd/mm/yy v xut n theo
nh dng month dd,year. V d, 25/12/61 tr thnh:
Thang muoi hai 25,1961
3.4 Vit chng trnh nhp vo mt gi tr s nguyn, kim tra n l dng hay
khng v xut ra giai tha ca n, s dng cng thc:
Chng 3: Lnh 41
giaithua (0) =1
giaithua (n) =n X giaithua (n-1)
3.5 Vit chng trnh nhp vo mt s c s 8 v xut ra s thp phn tng
ng. V d sau minh ha cc cng vic thc hin ca chng trnh theo
mong i:
Nhap vao so bat phan: 214
BatPhan(214)=ThapPhan( 140)
3.6 Vit chng trnh cung cp mt bng cu chng omgin ca nh dng sau
cho cc s nguyn t 1ti 9:
1x 1= 1
1x2=2
9x9=81
Chng 3: Lnh 42
Ch ng 4. Hm
Chng ny m t nhng hm do ngi dng nh ngha nh l mt trong
nhng khi chng trnh C++. Hm cung cp mt phng thc ng gi
qu trnh tnh ton mt cch d dng c s dng khi cn. nh ngha
hm gm hai phn: giao din v thn.
Ph n giao di n hm (c ng c g i l khai bo hm) c t hm c th
c s dng nh th no. N gm ba phn:
Tn hm. y ch l mt nh danh duy nht.
Cc tham s ca hm. y l mt tp ca khng hay nhiu nh danh
nh kiu c s dng truyn cc gi tr ti v t hm.
Ki u tr v c a hm. Ki u tr v c a hm c t cho ki u c a gi tr m
hm tr v. Hm khng tr v bt k kiu no th nn tr v kiu void.
Phn thn hm cha ng cc bc tnh ton (cc lnh).
S dng mt hm lin quan n vic gi n. Mt li gi hm gm c tn
hm, theo sau l cp du ngoc on 0, bn trong cp du ngoc l khng,
mt hay nhiu i s c tch bit nhau bng du phy, s cc i s phi
khp vi s cc tham s ca hm. Mi i s l mt biu thc m kiu ca n
phi khp vi kiu ca tham s tng ng trong khai bo hm.
Khi li gi hm c thc thi, cc i s c c lng trc tin v
cc gi tr kt qu ca chng c gn ti cc tham s tng ng. Sau
thn hm c thc hin. Cui cng gi tr tr v ca hm c truyn ti
thnh phn gi hm.
V mt li gi ti mt hm m kiu tr v khng l void s mang li mt
gi tr tr v nn li gi l mt biu thc v c th c s dn trong cc
biu thc khc. Ngc li mt li gi ti mt hm m kiu tr v ca n l
void th li gi l mt lnh.
Chng 4: Hm 45
4.1. Hm on gi n
Danh sch 4.1 trnh by nh ngha ca mt hm on gin tnh ly tha
ca mt s nguyn.
Danh sch A
1
2
3
4
5
6
7
Ch gi i
A ______________________________
int Power (int base, unsigned int exponent)
{
int result=1;
for (int i=0; i <exponent; ++i)
result *=base;
return result;
1 Dng ny nh ngha giao din hm. N bt u vi kiu tr v ca hm
(l int trong trng hp ny). Ke tip l tn hm, theo sau l danh sch
cc tham so. Power c hai tham so (base v exponent) thuc kiu int v
unsigned int tng ng. Ch l c php cho cc tham s l tng t nh
c php cho nh ngha bin: nh danh kiu c theo sau bi tn tham
s. Tuy nhin, khng th theo sau nh danh kiu vi nhiu tham s phn
cch bi du phy:
int Power (int base, exponent) //Sai!
2 Du ngoc ny nh du im bt u ca thn hm.
3 Dng ny l nh ngha mt bi n c c b .
4-5 Vng lp for ny tng ca so base ln ly tha ca exponent v lim tr kt
qu vo trong result.
6 Hng ny tr result v nh l kt qu ca hm.
7 Du ngoc ny nh du im kt thc ca thn hm.
Danh sch 4.2 minh ha hm c gi nh th no. Tc ng ca li gi
hm ny l u tin cc gi tr 2 v 8 tng ng c gn cho cc tham s
base va exponent, v sau thn hm c c lng.
Danh sch 4.2
1 #include<iostreamh>
2 main (void)
3 {
4 cout"2 A 8=" Power(2,8) V;
5 U________________________________
Khi chy chng trnh ny xut ra kt qu sau:
2A8=256
Chng 4: Hm 46
Ni chung, mt hm phi c kliai bo trc khi s ng n. Khai bo
hm (function declaration) n gin gm c mu ban u ca hm gi l
nguyn mu hm (function prototype) ch nh tn hm, cc kiu tham s, v
kiu tr v. Hng 2 trong Danh sch 4.3 trnh by hm Power c th c khai
bo nh th no cho chng trnh trn. Nhng mt hm cng c th c
khai bo m khng cn tn cc tham s ca n,
int Power (int, unsigned int);
tuy nhin chng ta khng nn lm iu tr phi vai tr ca cc tham s l r
rng.
Danh sch 4.3
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream.h>
int Power (int base, unsigned int exponent); //khai bao ham
main (void)
{
cout "2 A 8=" Power(2,8) V;
}
int Power (int base, unsigned int exponent)
{
int result=l;
for (int i =0; i <exponent; ++i)
result *=base;
return result;
Bi v mt nh ngha hm cha ng mt nguyn mu (prototype) nn
n cng c xem nh l mt khai bo. V th nu nh ngha ca mt hm
xut hin trc khi s dng n th khng cn khai bo thm vo. Tuy nhin
vic s dng cc nguyn mu hm l khuyn khch cho mi trng hp. Tp
hp ca nhiu hm vo mt tp tin header ring bit cho php nhng lp trnh
vin khc truy xut nhanh chng ti cc hm m khng cn phi c ton b
cc nh ngha ca chng.
4.2. Tham s v i s
C++h tr hai kiu tham s: gi tr v tham chiu. Tham s gi tr nhn mt
sao chp gi tr ca i s c truyn ti n. Ket qu l, nu hm c bt k
chuyn i no ti tham s th vn khng tc ng n i s. V d, trong
#include <iostrearah>
void Foo (int num)
{
num=0;
Chng 4: Hm 47
}
cout "num - " num V;
int mam(void)
{
intx=10;
Foo(x);
cout <<"x=" X V;
return 0;
}
th tham s duy nht ca hm Foo l mt tham s gi tr. en lc m hm ny
c thc thi th num c s ng nh l mt bin cc b bn trong hm.
Khi hm c gi v X c truyn ti n, num nhn mt sao chp gi tr ca
X. Ket qu l mc d numc t v 0 bi hm nhng vn khng c g tc
ng ln X. Chng trnh cho kt qu nh sau:
num=0;
x=10;
Tri li, tham s tham chi u nhn cc i s c truyn ti n v lm
trc tip trn i s . Bt k chuyn i no c to ra bi hm ti tham
s tham chiu u tc ng trc tip ln i s.
Bn trong ng cnh ca cc li gi hm, hai kiu truyn i s tng ng
c gi l truy n-b ng-gi tr v truy n-b ng-tham cbi u. Tht l hon
ton hp l cho mt hm truyn-bng-gi tr i vi mt vi tham s v
truyn-bng-tham chiu cho mt vi tham s khc. Trong thc t th truyn-
bng-gi tr thng c s dng nhiu hn.
4.3. Ph m vi c c b v ton c c

Mi th c nh ngha mc phm vi chng trnh (ngha l bn ngoi cc
hm v cc lp) c hiu l c mt ph m vi ton c c ^global scope). Cc
hm v d m chng ta thy cho n thi im ny u c mt phm vi
ton cc. Cc bin cng c th nh ngha phm vi ton cc:
intyear=1994; //bintoncc
int Max (int, int); // hmton cc
int main (void) // hmton cc
{
II...
}
Cc bin ton cc khng c khi to, s c khi to t ng l 0.
V cc u vo ton cc l c th thy c mc chng trnh nn
chng cng phi l duy nht mc chng trnh. iu ny ngha l cng cc
bin hoc hm ton cc c th khng c nh ngha nhiu hn mt ln
Chng 4: Hm 48
mc ton cc. (Tuy nliin chng ta s thy sau ny mt tn hm c th c
s dng li). Thng thng cc bin hay hm ton cc c th c truy xut
t mi ni trong chng trnh.
Mi khi trong mt chng trnh nh ngha mt ph m vi c c b . Tht
vy, thn ca mt hm trnh by mt phm vi cc b. Cc tham s ca mt
hm c cng phm vi nh l thn hm. Cc bin c nh ngha bn trong
mt phm vi cc b c th nhn thy ti ch phm vi . Do mt bin ch
cn l duy nht trong phm vi ca chnh n. Cc phm vi cc b c th lng
nhau, trong trng hp ny cc phm vi bn trong chng ln cc phm vi bn
ngoi. V d trong
intxyz; //xyz lton cc
voidFoo(intxyz) //xyzlccbchothncaFoo
{ . "
if(xyz>0) {
double xyz: //xyz lcc b cho khi ny
//...
}
>
c ba phm vi ring bit, mi phm vi cha ng mt xyz ring.
Thng thng, thi gian sng ca mt bin b gii hn bi phm vi ca
n. V th, v d cc bin ton cc tn ti sut thi gian thc hin chng
trnh trong khi cc bin cc b c to ra khi phm vi ca chng bt u v
mt i khi phm vi ca chng kt thc. Khng gian b nh cho cc bin ton
cc c dnh ring trc khi s thc hin ca chng trinh bt u nhng
ngc li khng gian b nh cho cc bin cc b c cp pht thi im
thc hin chng trnh.
4.4. Ton t ph m vi
Bi v phm vi cc b ghi chng ln phm vi ton cc nn mt bin cc b c
cng tn vi bin ton cc lm cho bin ton cc khng th truy xut c ti
phm vi cc b. V d, trong
interior,
void Error (int error)
{
II...
}
bin ton cc error l khng th truy xut c bn trong hm Eor bi v n
c ghi chng bi tham so error cc b.
Vn ny c gii quyt nh vo s dng ton t phm vi n hng
(::),ton t ny ly u vo ton cc nh l i s:
Chng 4: Hm 49
int error,
void Error (int error)
{
II...
if ("error !=0) // thamkho ti error ton cc
//...
}
4.5. Bi n t ng
Bi v thi gian sng ca mt bin cc b l c gii hn v c xc nh
hon ton t ng nn nhng bin ny cng c gi l t ng. B xc nh
lp lu tr auto c th c dng ch nh r rng mt bin cc b l t
ng. V d:
void Foo (void)
{
auto int xyz; //nhl: intxyz;
//...
}
iu ny t khi c s dng bi v tt c cc bin cc b mc nh l t
ng.
4.6. Bi n thanh ghi
Nh c cp trc , ni chung cc bin biu th cc v tr b nh ni
m gi tr ca bin c lu tr ti. Khi m chng trnh tham kho ti mt
bin (v d, trong mt biu thc), trnh bin dch pht ra cc m my truy xut
ti v tr b nh c biu th bi cc bin. i vi cc bin dng thng
xuyn (v d nh cc bin vng lp), hiu xut chng trnh c th thu c
bng cch gi bin trong mt thanh ghi, bng cch ny c th trnh c truy
xut b nh ti bin .
B lu tr thanh ghi c th c s dng chi nh cho trnh bin dch
bin c th c lu tr trong mt thanh ghi nu c th. V d:
for (register int i=0; i <n; ++i)
sum+=i;
y mi vng lp i c s dng ba ln: mt ln khi n c so snh vi n,
mt ln khi n c cng vo sum, v mt ln khi n c tng. V th vic
gi bin i trong thanh ghi trong sut vng lp for l c ngha trong vic ci
thin hiu sut chng trnh.
Ch rng thanh ghi ch l mt gi cho trnh bin dch, v trong mt vi
trng hp trnh bin dch c th chn khng s dng thanh ghi khi n c
Chng 4: Hm 50
yu cu lm iu . Mt l o l gii l bt k my tnh no cng c mt
s hu hn cc thanh ghi v n c th trong trng hp tt c cc thanh ghi
ang c s dng.
Thm ch khi lp trnh vin khng khai bo thanh ghi, nhiu trnh bin
dch ti u c gng thc hin mt d on thng minh v s dng cc thanh
ghi m chng mun ci thin hiu sut ca chng trnh.
tng s dng khai bo thanh ghi thng c xut sau cng; ngha
l sau khi vit m chng trnh hon tt lp trnh vin c th xem li m v
chn cc khai bo thanh ghi vo nhng ni cn thit.
4.7. Hm n i tuy n
Gi s mt chng trnh thng xuyn yu cu tm gi tr tuyt i ca mt
s cc s nguyn. Cho mt gi tr c biu th bi n, iu ny c th c
gii thch nh sau:
(n>0?n:-n)
Tuy nhin, thay v ti to biu thc ny ti nhiu v tr khc nhau trong
chng trnh, tt hn ht l nn nh ngha n trong mt hm nh sau:
intAbs(intn)
{
retumn>0?n:-n;
}
Phin bn hm c mt s cc thun li. Th nht, n lm cho chng
trnh d c. Th hai, n c th c s dng li. V th ba, n trnh c
hiu ng ph khng mong mun khi i s chnh n l mt biu thc c cc
hiu ng ph.
Tuy nhin, bt li ca phin bn hm l vic s dng thng xuyn c
th dn ti s bt li v hiu sut ng k v cc tn ph dnh cho vic gi
hm. V d, nu hm Abs c s dng trong mt vng lp c lp i lp li
mt ngn ln th sau n s c mt tc ng trn hiu sut. Tn ph c th
c trnh bng cch nh ngha hm Abs nh l hm ni tuyn (inline);
inlineint Abs(intn)
{
retumn>0?n:-n;
}
Hiu qu ca vic s dng hm ni tuyn l khi hm Abs c gi, trnh
bin dch thay v pht ra m gi hm Abs th m rng v thay th thn ca
hm Abs vo ni gi. Trong khi v bn cht th cng tnh ton c thc hin
nhng khng c lin quan n li gi hm v th m khng c cp pht stack.
Chng 4: Hm 51
Bi v cc li gi ti hm ni tuyn c m xng nn khng c vt ca
chnh hm c a vo trong m bin dch. V th, nu mt hm c
nh ngha ni tuyn trong mt tp tin th n khng sn dng cho cc tp tin
khc. Do , cc hm ni tuyn thng c t vo trong cc tp tin header
m chng c th c chia s.
Ging nh t kha register, inline l mt gi cho trnh bin dch thc
hin. Ni chung, vic s dng inline nn c hn ch ch cho cc hm n gin
c s dng thng xun m thi. Vic s dng inline cho cc hm di v
phc tp qu th chc chn b b qua bi trnh bin dch.
4.8. qui
Mt hm gi chnh n c gi l qui. qui l mt k thut lp trnh
tng qut c th ng dng cho cc bi ton m c th nh ngha theo thut
ng ca chnh chng. Chng hn bi ton giai tha c nh ngha nh sau:
Giai tha ca 0 l 1.
Giai tha ca mt s l n ln giai tha ca 77-1.
Hng th hai r rng cho bit giai tha c nh ngha theo thut ng ca
chnh n v v th c th c biu din nh mt hm qui:
int Factorial (unsigned int n)
{
return n =0 ? 1: n * Factorial(n-1);
}
Cho n bng 3, Bng 4.1 cung cp vt ca cc li gi Factorial. Cc khung
stack cho cc li gi ny xut hin tun t tng ci mt trn runtime stack.
B ng 4.1 vt th c thi c a Factorial(3).
Call n 11= 0 n * Factorial(n-l) Returns
Th nht 3 0 3 * Factorial(2) 6
Th hai
o
0 2 * Factorial 1) 2
Th ba \ 0 1* Factorial(O) 1
Th t 0 1 1
Mt hm qui phi c t nht mt i u ki n d ng c th c tha.
Ngc li, hm s gi chnh n v hn nh cho ti khi trn stack. V d hm
Factorial c iu kin dng l n = 0. (Ch i vi trng hp n l s m
th iu kin s khng bao gi tha v Factorial s tht bi).
Chng 4: Hm 52
4.9. i s mc inh

i s mc nh l mt thun li lp trnh b bt i gnh nng phi ch
nh cc gi tr i s cho tt c cc tham s hm. V d, xem xt hm cho
vic bo co li:
void Error (char *message, int severity=0);
y th severity c mt i s mc nh l 0; v th c hai li gi sau u hp
l:
Error("Division by zero", 3);// severity t ti 3
EiTOiC'Roundoff error); // seventy t ti 0
Nh l li gi hm u tin minh ha, mt i s mc nh c th c ghi
chng bng cch ch nh r rng mt i s.
Cc i s mc nh l thch hp cho cc trng hp m trong cc
tham s no ca hm (hoc tt c) thng xuyn ly cng gi tr. V d
trong hm Error, severity 0 li th ph bin hn l nhng trng hp khc v
v th l mt ng c vin tt cho i s mc nh. Mt cch dng cc i s t
ph hp c th l:
int Power (int base, unsigned int exponent =1);
Bi v 1(hoc bt k gi tr no khc) th khng chc xy ra thng xuyn
trong tnh hung ny.
trnh m h, tt c i s mc nh phi l cc i s theo ui. V
th khai bo sau l khng theo lut:
void Error (char *message="Bomb", int severity); // Tri qui tc
Mt i s mc nh khng nht thit l mt hng. Cc biu thc ty c
th c s dng min l cc bin c dng trong cc biu thc l c sn
cho phm vi nh ngha hm (v d, cc bin ton cc).
Qui c c chp nhn dnh cho cc i s mc nh l ch nh chng
trong cc khai bo hm ch khng trong nh ngha hm.
Khi mt chng trnh c thc thi di mt h iu hnh (nh l DOS hay
UNIX) n c th nhn khng hay nhiu i s t dng lnh. Cc i s ny
xut hin sau tn chng trnh c th thc thi v c phn cch bi cc
khong trng. Bi v chng xut hin trn cng hng ni m cc lnh ca h
iu hnh pht ra nn chng c gi l cc i s hng l nh.
r r
Chng 4: Hm 53
V d nh xem xt mt chng trnh c t tn l sum in ra tng ca
tp hp cc s c cung cp ti n nh l cc i s hng lnh. Hp thoi
4.1 minh ha hai s c truyn nh l cc i s ti hm sum nh th no ($
l du nhc UNIX).
H p tho i 4.1
1
2
3
$sum 10.4 12.5
22.9
$____________
Cc i s hng lnh c to ra sn cho mt chng trnh C++thng
qua hm main. C hai cch nh ngha mt hm main:
intmain(void);
int main (int argc, coast char* argvQ);
Cch sau c s dng khi chng trnh c d tnh chp nhn cc i
s hng lnh. Tham s u, argc, biu th s cc i s c truyn ti chng
trnh (bao gm c tn ca chnh chng trnh). Tham s th hai, argv, l mt
mng ca cc hng chui i din cho cc i s. V d t hng lnh cho
trong hp thoi 4.1, chng ta c:
aigc is 3
argv[0] is "sum"
argv[lj is "10.4"
argv[2] is "12.5"
Danh sch 4.4 minh ha mt thi cng n gin cho chng trnh tnh tng
sum. Cc chui c chuyn i sang s thc s dng hm atof c nh
ngha trong th vin stdlibii
Danh sch 4.4
1
2
3
4
5
6
7
8
9
10
#inude <iostnsamii>
#inude <stdlib.h>
int main (int aigc, const chai' *argvQ)
{
double sum=0;
for(inti= l;i<argc;-B)
sum +=atoffargv[T]);
cout sum <<V;
return 0;
J __________________________
Chng 4: Hm 54
Bi t p cu i ch ong 4
4.1 Vit chng trnh trong bi tp 1.1 v 3.1 s dng hm.
4.2 Chng ta c nh ngha ca hm Swap sau
void Swap (int X, int y)
{
inttemp=x;
x=y,
y=temp;
}
cho bit gi tr ca X v y sau khi gi hm:
x=10;
y=20;
Swap(x,y);
4.3 Chng trnh sau xut ra kt qu g khi c thc thi?
#include <iostreami>
char *str="global";
void Print (char *str)
{
coutstrVi';
{
char *str="local";
coirtstrW;
cout::str<< V;
}
coutstrVi';
}
int main (void)
{
Print(Tarameter);
return 0;
}
4.4 Viet hm xut ra tat c cc s nguyn t t 2 n n (n l s nguyn dng);
void Primes (unsigned int n);
Mt s l s nguyn t nu nh n ch chia ht cho chnh n v 1.
4.5 nh ngha mt bng lit k gi l Month cho tt c cc thng trong nm v s
dng n nh ngha mt hm nhn mt thng nh l mt i s v tr v
n nh l mt hng chui.
4.6 nh ngha mt hm inline IsAlpha, hm tr v khc 0 khi tham s ca n l
mt k t v tr v 0 trong cc trng hp khc.
Chng 4: Hm 55
4.7 nh ngha mt phin bn qui ca hm Power c trnh by trong
chng ny.
4.8 Vit mt hm tr v tng ca mt danh sch cc gi tr thc
double Sum(int a double val...);
ong n biu th s lng cc gi tr trong danh sch.
Chng 4: Hm 56
r
Ch ng 5. M ng, con tr , tham chiu
Chng ny gii thiu v mng, con tr, cc kiu d liu tham chiu v minh
ha cch dng chng nh ngha cc bin.
Mng (array) gm mt tp cc i tng (c gi l cc phn t) tt
c chng c cng kiu v c sp xp lin tip trong b nh. Ni chung ch
c mng l c tn i din ch khng phi l cc phn t ca n. Mi phn t
c xc nh bi mt ch s biu th v tr ca phn t trong mng, s lng
phn t trong mng c gi l kch th c ca mng. Kch thc ca mng
l c nh v phi c xc nh trc; n khng th thay i trong sut qu
trnh thc hin chng trnh.
Mng i din cho d liu hn hp gm nhiu hng mc ring l tng
t. V d: danh sch cc tn, bng cc thnh ph trn th gii cng vi nhit
hin ti ca cc chng, hoc cc giao dch hng thng ca mt ti khon
ngn hng.
Con tr (pointer) on gin l a ch ca mt i tng trong b nh.
Thng thng, cc i tng c th c truy xut trong hai cch: trc tip
bi tn i din hoc gin tip thng qua con tr. Cc bin con tr c nh
ngha tr ti cc i tng ca mt kiu c th sao cho khi con hy th
vng nh m i tng chim gi c thu hi.
Cc con tr thng c dng cho vic to ra cc i t ng ng trong
thi gian thc thi chng trnh. Khng ging nh cc i tng bnh thng
(ton cc v cc b) c cp pht lu tr trn runtime stack, mt i tng
ng c cp pht vng nh t vng lu tr khc c gi l heap. Cc i
tng khng tun theo cc lut phm vi thng thng. Phm vi ca chng
c iu khin r rng bi lp trnh vin.
Tham chiu (reference) cung cp mt tn tng trng khc gi l bit
hiu (alias) cho mt i tng. Truy xut mt i tng thng qua mt tham
chiu ging nh l truy xut thng qua tn gc ca n. Tham chiu nng cao
tnh hu dng ca cc con tr v s tin li ca vic truy xut trc tip cc
i tng. Chng c s dng h tr cc kiu gi thng qua tham chiu
ca cc tham s hm c bit khi cc i tng ln c truyn ti hm.
Chapter 5: Mng, con tr, v tham chiu 59
5.1. M ng (Array)
Bin mng c nh ngha bng cch c t kch thc mng v kiu cc
phn t ca n. V d mt mng biu din 10 thc o chiu cao (mi phn
t l mt s nguyn) c th c nh ngha nh sau:
intheights[10];
Mi phn t trong mng c th c truy xut thng qua chi s mng. Phn
t u tin ca mng lun c ch s 0. V th, hcights[0] v heights[9 biu th
tng ng cho phn t u v phn t cui ca mng hdghts. Mi phn t ca
mng hghts c th c xem nh l mt bin s nguyn. V th, v d t
phn t th ba ti gi tr 177 chng ta c th vit:
heights[2] =177;
Vic c gng truy xut mt phn t mng khng tn ti (v d, heights[-l]
hoc heights[10]) dn ti li thc thi rt nghim trng (c gi l li vt
ngoi bin).
Vic x l mng thng lin quan n mt vng lp duyt qua cc phn
t mng ln lt tng phn t mt. Danh sch 5.1 minh ha iu ny bng
vic s dng mt hm nhn vo mt mng cc s nguyn v tr v gi tr
trung bnh ca cc phn t trong mng.
Danh sch 5.1
1
2
3
4
Ging nh cc bin khc, mt mng c th c mt b kh i t o. Cc du
ngoc nhn c s dng c t danh sch cc gi tr khi to c phn
cch bi du phy cho cc phn t mng. V d,
intnums[3]={5,10,15};
khi to ba phn t ca mng nums tng ng ti 5, 10, v 15. Khi s gi tr
trong b khi to nh hn s phn t th cc phn t cn li c khi to ti
0:
int nums[3] ={5,10}; // nums[2] khi to ti 0
const int size =3;
doubleAverage(int nums[size])
{
doubleaverage=0;
for (register i=0; i <size; ++i)
average-H=nums[i];
return average/size;
_L
Chapter 5: Mng, con tr, v tham chiu 60
Klii b khi to c s dng hon tt th kch c mng tr thnh d
tha bi v s cc phn t l n trong b khi to. V th nh ngha u tin
ca nums c th vit tng ng nh sau:
intnums[] ={5,10,15}; //khngcn khai bo tung minh
// kch c ca mang
Mt tnh hung khc m kch c c th c b qua i vi mng tham
s hm. V d, hm Average trn c th c ci tin bng cch vit li n
sao cho kch c mng nums khng c nh ti mt hng m c ch nh
bng mt tham s thm vo. Danh sch 5.2 minh ha iu ny.
Danh sch 5.2
1
2
3
4
5
6
7
Mt chui C++ch l mt mng cc k t. V d,
char Str0 ="HELLO";
nh ngha chui sfr l mt mng ca 6 k t: nm ch ci v mt k t null.
K t kt thc null c chn vo bi trnh bin dch. Tri li,
char strQ ={T, 'E', U, U, 'O'};
nh ngha str l mng ca 5 k t.
Kch c ca mng c th c tnh mt cch d dng nh vo ton t
sizeof. V d, vi mng ar cho m kiu phn t ca n l Type th kch c
ca ar l:
sizeof(ar) / sizeof(Type)
5.2. M ng a chi u
Mng c th c hn mt chiu (ngha l, hai, ba, hoc cao hn.Vic t chc
mng trong b nh th cng tng t khng c g thay i (mt chui lin
tip cc phn t) nhng cch t chc m lp trnh vin c th lnh hi c
th li khc. V d chng ta mun biu din nhit trung bnh theo tng ma
cho ba thnh ph chnh ca c (xem Bng 5.1).
doubleAverage(int numsQ, int size)
{
doubleaverage=0;
for (register i=0; i <size; ++i)
average+=nums[i];
return average/size;
J _________________________
Chapter 5: Mng, con tr, v tham chiu 61
B ng 5.1
Hnh 5.1
Nhi t trung bnh theo ma.
Ma xun Ma h Ma thu Ma ng
Sydney 26 34 22 17
Melbourne 24 32 19 13
Brisbane 28 38 25 20
iu ny c th c biu din bng mt mng hai chiu m mi phn t
mng l mt s nguyn:
int seasonTemp[3][4];
Cch t chc mng ny trong b nh nh l 12 phn t s nguyn lin tip
nhau. Tuy nhin, lp trnh vin c th tng tng n nh l mt mng gm
ba hng vi mi hng c bn phn t s nguyn (xem Hnh 5.1).
Cch t ch c seasonTemp trong b nh '.
26 134 122 17 24 I 32 I 19 13 28 I 38 I 25 20
hng u hng hai hng ba
Nh trc, cc phn t c truy xut thng qua ch s mng. Mt ch s
ring bit c cn cho mi mng. V d, nhit ma h trung bnh ca
thnh ph Sydney (hng u tin ct th hai) c cho bi seasonTemp[0][l].
Mng c th c khi to bng cch s dng mt b khi to lng
nhau:
int seasonTemp[3][4] ={
{26,34.22,17},
{24,32,19,13},
{28,38,25,20}
};
Bi v iu ny nh x ti mng mt chiu gm 12 phn t trong b nh nn
n tng ng vi:
int seasonTemp[3][4] ={
26,34,22,17,24,32,19,13,28,38,25,20
};
B khi to lng nhau c a chung hn bi v n linh hot v d hiu
hn. V d, n c th khi to ch phn t u tin ca mi hng v phn cn
li mc nh l 0:
intseasonTemp[3][4] ={{26}, {24}, {28}};
Chng ta cng c th b qua chiu u tin v cho n c dn xut t b
khi to:
int seasonTemp[j[4] ={
{26,34,22,17},
{24,32,19,13),
Chapter 5: Mng, con tr, v tham chiu 62
};
{28,38,25,20}
X l mng nhiu chiu th tng t nh l mng mt chiu nhng phi
x l cc vng lp lng nhau thay v vn lp on. Danh sch 5.3 minh ha
iu ny bng cch trnh by mt hm tm nhit cao nht trong mng
seasonTemp.
Danh sch 5.3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
5.3. Con tr
Con tr on gin ch l a ch ca mt v tr b nh v cng cp cch gin
tip truy xut d liu trong b nh. Bin con tr c nh ngha tr
ti d liu thuc kiu d liu c th. V d,
int *ptrl; //tr ti mt int
char *ptr2; //t ti mt char
Gi tr ca mt bin con tr l a ch m n tr ti. V d, vi cc nh
ngha c v
Tt num;
chng ta c th vit:
ptrl =&num;
K hiu & l ton t l y a ch; n nhn mt bin nh l mt i s v
tr v a ch b nh ca bin . Tc ng ca vic gn trn l a ch ca
coast introws =3;
const int columns =4;
int seasonTemp[rows][columas] = {
{26,34,22,17},
{24,32,19,13},
{28,38,25,20}
};
int HighestTemp (int temp[nows][columns])
{
int highest=0;
for (register i=0; i <rows; -Hi)
for (register j =0; j <columns; ++j)
if (temp[i][j] >highest)
highest=temp[i][j];
return highest;
i ______________________________
Chapter 5: Mng, con tr, v tham chiu 63
num c khi to ti ptrl. V th, chng ta ni rng ptrl tr ti num. Hnh 5.2
minh ha s lc iu ny.
Hnh 5.2 M t con tr s nguyn on gi n.
pt r l num
Vi ptrl tr ti numth biu thc *ptrl nhn gi tr ca bin ptrl tr ti v
v th n tng ng vi num. K hiu * l ton t l y gi tr; n nhn con
tr nh mt i s v tr v ni dung ca v tr m con tr ti.
Thng thng th kiu con tr phi khp vi kiu d liu m c tr
ti. Tuy nhin, mt con tr kiu void* s hp vi tt c cc kiu. iu ny
tht thun tin nh ngha cc con tr c th tr n d liu ca nhng kiu
khc nhau hay l cc kiu d liu gc khng c bit.
Con tr c th c p (chuyn kiu) thnh mt kiu khc. V d,
ptr2=(char*)ptrl;
chuyn con tr ptrl thnh con tr chai' trc khi gn n ti con tr ptr2.
Khng quan tm n kiu ca n th con tr c th c gn ti gi tr
null (gi l con tr null). Con tr null c s dng khi to cho cc con
v to ra im kt thc cho cc cu trc da trn con tr (v d, danh sch
lin kt).
5.4. B nh ng
Ngoi vng nh stack ca chng trnh (thnh phn c s dng lu tr
cc bin ton cc v cc khung stack cho cc li gi hm), mt vng b nh
khc gi l heap c cung cap. Heap c s dng cho vic cp pht ng
cc khi b nh trong thi gian thc thi chng trnh. V the heap cng c
gi l b nh ng (dynamic memory). Vng nh stack ca chng trnh
cng c gi l b nhtnh (static memory).
C hai ton t c s dng cho vic cp pht v thu hi cc khi b nh
trn heap. Ton t new nhn mt kiu nh l mt i s v c cp pht mt
klioi b nh cho mt i tng ca kiu . N tr v mt con tr ti klioi
c cp pht. V d,
int *ptr=newint;
char *str=new char[ 10];
cp pht tng ng mt khi cho lu tr mt s nguyn v mt khi ln
cho lu tr mt mng 10 k t.
Chapter 5: Mng, con tr, v tham chiu 64
B nli c cp pht t heap khng tun theo lut phm vi nh cc bin
thng thng. V d, trong
void Foo (void)
{
char *str=new char[10];
II...
}
khi Foo tr v cc bin cc b str c thu hi nhng cc khi b nh c tr
ti bi str th khng. Cc khi b nh vn cn cho n khi chng c gii
phng r rng bi cc lp trnh vin.
Ton t delete c s dng gii phng cc khi b nh c cp
pht bi new. N nhn mt con tr nh l i s v gii phng khi b nh
m n tr ti. V d:
deleteptr, //xamtitung
delete[] str, // xa mt mng cc i tung
Ch rng khi khi nh c xa l mt mng th mt cp du I] phi
c chn vo ch nh cng vic ny. S quan trng s c gii thch
sau khi chng ta tho lun v lp.
Ton t delete nn c p dng ti con tr m tr ti bt c th g v mt
i tng c cp pht ng (v d, mt bin trn stack), mt li thc thi
nghim trng c th xy ra. Hon ton v hi khi p dng delete ti mt bin
khng l con .
Cc i tng ng c s dng to ra d liu ko di ti khi li gi
hm to ra chng. Danh sch 5.4 minh ha iu ny bng cch s dng mt
hm nhn mt tham s chui v tr v b n sao ca mt chui.
Danh sch 5.4
2
3
4
5
6
7
Ch gi i
1 y l tp tin header chui chun khai bo cc dng hm cho thao tc
n chui.
4 Hm strlcn (c khai bo trong th vin string.h) m cc k t trong i
s chui ca n cho n (nhng khng vt qu) k t null sau cng. Bi
v k t null khng c tnh vo trong vic m nn chng ta cng thm
1ti tng v cp pht mt mng k t ca kch thc .
#include<string.h>
char* CopyOf (coast char *str)
{
char *copy=new charfstrlen(str) +1 ];
strcpy(copy, str);
return copy,
}______________________________
Chapter 5: Mng, con tr, v tham chiu 65
5 Hm strcpy (c khai bo trong th vin string.il) sao chp i s th hai
n i s th nht ca n theo tng k t mt bao gm lun c k t
null sau cng.
V ti nguyn b nh l c gii hn nn rt c th b nh ng c th b
cn kit trong thi gian thc thi chng trnh, c bit l khi nhiu khi ln
c cp pht v khng c gii phng. Ton t new khng th cp pht mt
khi c kch thc c yu cu th n tr v 0. Chnh lp trnh vin phi
chu trch nhim gii quyt nhng vn ny. C ch iu khin ngoi l ca
C++cung cp mt cch thc thc t gii quyt nhng vn nh th.
5.5. Tnh ton con tr
Trong C++chng ta c th thc hin cng hay tr s nguyn trn con tr.
iu ny thng xuyn c s dng bi cc lp trnh vin c gi l cc
tnh ton con tr. Tnh ton con tr th khng ging nh l tnh ton s
nguyn bi v kt qu ph thuc vo kch thc ca i tng c tr ti.
V d, mt kiu int c biu din bi 4 byte. By gi chng ta c
char *str="HELLO";
int nunisQ ={10,20,30,40};
int *ptr=&nums[0]; //t ti phn t u tin
Str-M- tng str ln mt char (ngha l 1byte) sao cho n tr ti k t th hai ca
chui "HELLO" nhng ngc li ptr-H- tng ptr ln mt int (ngha l 4 bytes)
sao cho n tr ti phn t th hai ca nums. Hnh 5.3 minh ha s lc iu
ny.
Hnh 5.3 Tnh ton con tr .
H E L L 0 \0 10
.
w
.
o
30 40
str
_L
str++ ptr+
V th, cc phn t ca chui "HELLO" c th c tham kho ti nh
*str, *(str+1), *(str+2), vng vng. Tng t, cc phn t ca nums c th c
tham kho ti nh *ptr, *(ptr+1), *(ptr+2), v *(ptr+3).
Mt hnh thc khc ca tnh ton con tr c cho php trong C++lin
quan n tr hai con tr ca cng kiu. V d:
int *ptrl =&nums[l];
int*ptr2=&nums[3];
intn=ptr2-ptrl; //ntinh2
Chapter 5: Mng, con tr, v tham chiu 66
Tnh ton con tr cn kho lo khi x l cc phn t ca mng. Danh
sch 5.5 trnh by v d mt hm sao chp chui tng t nh hm nh ngha
sn strcpy.
Danh sch 5.5
1
2
3
4
Ch gi i
3 iu kin ca vng lp ny gn ni dung ca chui src cho ni dung ca
chui dest v sau tng c hai con tr. iu kin ny tr thnh 0 khi k
t null kt thc ca chui src c chp ti chui dest
Mt bin mng (nh nums) chnh n l a ch ca phn t u tin ca mng
m n i din. V th cc phn t ca mng nums cng c th c tham
kho ti bng cch s dng tnh ton con tr trn nums, ngha l nums] tng
ng vi *(nums + ). Khc nhau gia nums v ptr ch niuns l mt hng v
th n khng th c to ra tr ti bt c th g na trong khi ptr l mt
bin v c th c to ra tr ti cc s nguyn bt k.
Danh sch 5.6 trnh by hm HighestTemp ( c trnh by trc
trong Danh sch 5.3) c th c ci tin nh th no bng cch s dng tnli
ton con tr.
Danh sch 5.6
1
2
3
4
5
6
7
8
9
Ch gi i
1 Thay v truyn mt mng ti hm, chng ta truyn mt con tr int v hai
tham s thm vo c t kch c ca mng. Theo cch ny th hm khng
b hn ch ti mt kch thc mng c th.
6 Biu thc *(temp + i * columns +j) tng ng vi temp[i][j] trong phin
bn hm trc.
int HighestTemp (const int *temp, const int rows, coast int columns)
{
int highest=0;
for (register i =0; i <rows; ++i)
for (register j =0; j <columns; -Hj)
if (*(temp+i * columns +j) >highest)
highest=*(temp+i * columns +j);
return highest;
1________ ____________________________________
void CopyString (char *dest, char *src)
{
while(*dest++=*src++) ;
}
Chapter 5: Mng, con tr, v tham chiu 67
Hm HighestTemp c th c n gin ha hn na bng cch xem temp
nh l mt mng mt chiu ca row * column s nguyn. iu ny c trnh
by trong Danh sch 5.7.
Danh sch 5.7
1
2
3
4
5
6
7
8
5.6. Con tr hm
Chng ta c th ly a ch mt hm v lu vo trong mt con tr hm. Sau
con tr c th c s dng gi gin tip hm. V d,
int (*CompareXcoast char*, coast char*);
nh ngha mt con tr hm tn l Compare c th gi a ch ca bt k hm
no nhn hai con tr k t hng nh l cc i s v tr v mt s nguyn. V
d hm th vin so snh chui stranpthc hin nh th. V th:
Compare=&strcmp; // Compare ti hm strcmp
Ton t & khng cn thit v c th b qua:
Compare=strcmp; //Compare tr ti hm strcmp
Mt la chn khc l con tr c th c nh ngha v khi to mt ln:
int (*CompareXcoast char*, coast char*)=strcmp;
Khi a ch hm c gn ti con tr hm th hai kiu phi khp vi
nhau. nh ngha trn l hp l bi v hm strcmp c mt nguyn mu hm
khp vi hm.
int strcmp(const char*, coast char*);
Vi nh ngha trn ca Compare th hm strcmp hoc c th c gi trc
tip hoc c th c gi gin tip thng qua Compare. Ba li gi hm sau l
tng ng:
strcmp("Tom", 'Tim"); // gi trc tip
(*CompareX'TomVTim"); //gi gian tip
Compare("Tom", "Tim"); // gi gin tiep (ngn gn)
Cch s dng chung ca con tr hm l truyn n nh mt i s ti mt
hm khc; bi v thng thng cc hm sau yu cu cc phin bn khc nhau
ca hm trc trong cc tnh hung khc nhau. Mt v d hiu l hm tm
int HighestTemp (coast int *temp, coast int rows, coast int columns)
{
int highest=0;
for (register i=0; i <rows * columas; ++i)
if (*(temp+i) > highest)
highest=*(temp+i);
return highest;
J ______________________________________________
Chapter 5: Mng, con tr, v tham chiu 68
kim nh phn thng qua mt mng sp xp cc chui. Hm ny c th s
dng mt hm so snh (nh l strcmp) so snh chui tm kim ngc li
chui ca mng. iu ny c th khng thch hp i vi tt c cc trng
hp. V d, hm strcmp l phn bit ch hoa hay ch thng. Neu chng ta
thc hin tm kim theo cch khng phn bit dng ch sau mt hm so
snh khc s c cn.
Nh c trnh by trong Danh sch 5.8 bng cch cho hm so snh
mt tham s ca hm tm kim, chng ta c th lm cho hm tm kim c
lp vi hm so snh.
Danh sch 5.8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Ch gi i
1 Tm kim nh phn l mt gii thut ni ting tm kim thng qua mt
danh sch cc hng mc c sp xp. Danh sch tm kim c biu
din bi table - mt mng cc chui c kch thc a Hng mc tm kim
c biu th bi item.
2 Compare l con tr hm c s dng so snh itemvi cc phn t ca
mng.
7 mi vng lp, vic tm kim c gim i phn na. iu ny c
lp li cho ti khi hai u tm kim giao nhau (c biu th bi bot v
top) hoc cho ti khi mt so khp c tm thy.
9 Hng mc c so snh vi mc gia ca mng.
10 Neu itemkhp vi hng mc gia th tr v chi mc ca phn sau.
11 Neu itemnh hon hng mc gia th sau tm kim c gii hn ti
na thp hn ca mng.
14 Neu itemln hn hng mc gia th sau tm kim c gii hn ti
na cao hn ca mng..
int BinSearch (char *item, char *tableQ, int
int (*CompareXconst char*, coast char*))
{
intbot=0;
inttop=n-1;
intmid,cmp;
while (bot<=top) {
mid=(bot+top)/2;
if ((cmp=Compare(item,table[mid])) 0)
return mid; //travechisohanggmuc
eLseif(cmp<0)
top=mid-l; //gioi hn timkiern toi nua thap hon
else
bot=mid+l; //gioi han timkiemtoi nua cao hon
} (1 .
retum-1; //khong timthay
Chapter 5: Mng, con tr, v tham chiu 69
16 Tr v -1 ch nh rng khng c mt hng mc so khp.
V d sau trnh by hm BinScarch c th c gi vi strcmp c truyn
nh hm so snh nh th no:
char*cities[] = {"Boston", "London", "Sydney", Tokyo"};
cout BinSearehfSydney", cities, 4, strcmp) Vi';
iu ny s xut ra 2 nh c mong i.
5.7. Tham chi u
Mt tham chiu (reference) l mt bit hiu (alias) cho mt i tng. K
hiu c dng cho nh ngha tham chiu th tng t vi k hiu dng cho
con tr ngoi tr & c s dng thay v *. V d,
double numl =3.14;
double &num2=numl; // num2 lmt thamchiu ti num 1
nh ngha num2 nh l mt tham chiu ti numl. Sau nh ngha ny c hai
numl v num2 tham kho ti cng mt i tng nh th chng l cng bin.
Cn bit r l mt tham chiu khng to ra mt bn sao ca mt i tng m
ch n thun l mt bit hiu cho n. V vy, sau php gn
numl =0.16;
c hai numl v num2 s biu th gi tr 0.16.
Mt tham chiu phi lun c khi to khi n c nh ngha: n l
mt bit danh cho ci g . Vic nh ngha mt tham chiu ri sau mi
khi to n l khng ng lut.
double &num3; // khng ung lut: thamchiu khng c khi to
num3=nuinl;
Bn cng c th khi to tham chiu ti mt hng. Trong trng hp
ny, mt bn sao ca hng c to ra (sau khi bt k s chuyn kiu cn
thit no ) v tham chiu c thit lp tham chiu ti bn sao .
int&n=l; // ntham kho ti bn sao ca 1
L do m n li tham chiu ti bn sao ca 1hn l tham chiu ti chnh 1l
s an ton. Bn hy xem xl iu g s xy ra Irng Irng hp sau:
int&x=l;
-H-x;
inty=x+1;
1 hng u tin v 1 hng th ba ging nhau l cng i tng (hu ht
cc trnh bin dch thc hin ti u hng v cp pht c hai 1trong cng mt
v tr b nh). V th chng ta mong i y l 3 nhng n c th chuyn thnh
Chapter 5: Mng, con tr, v tham chiu 70
4. Tuy nhin, bng cch p buc X l mt bn sao ca 1nn trnh bin dch
m bo rng i tng c biu th bi X s khc vi c hai 1.
Vic s dng chung nht ca tham chiu l cho cc tham s ca hm.
Cc tham s ca hm thng lm cho d dng kiu truyn-bng-tham chiu,
tri vi kiu truyn-bng-gi tr m chng ta s dng n thi im ny.
quan st s khc nhau hy xem xt ba hm swap trong Danh sch 5.9.
Danh sch 5.9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Ch gi i
1 Mc d Swapl chuyn i X v y, iu ny khng nh hng ti cc i
s c truyn ti hm bi v Swapl nhn mt b n sao ca cc i s.
Nhng thay i trn bn sao th khng nh hng n d liu gc.
7 Swap2 vt qua vn ca Swapl bng cch s dng cc tham s con tr
thay th. Thng qua gii tham kho (dereferencing) cc con tr Swap2
ly gi tr gc v chuyn i chng.
13 Swap3 vt qua vn ca Swapl bng cch s dng cc tham s tham
chiu thay th. Cc tham s tr thnh cc bit danh cho cc i s
c truyn ti hm v v th chuyn i chng khi cn.
Swap3 c thun li thm, c php gi ca n ging nh Swapl v khng
c lin quan n nh a ch (addressing) hay l gii tham kho
(dereferencing). Hm main sau minh ha s khc nhau gia cc li gi hm
Swapl, Swap2, v Swap3.
int main (void)
{
inti=10, j =20;
Swapl(Cj); cout i " j V;
Swap2(&i,&j); cout i "," j Vi';
void Swapl (intx, inty)
{
// truyn bng tr (i tung)
inttemp=x;
x=y,
y=temp;
I
void Swap2 (int *x, int *y)
{
inttemp=*x;
*x =*y,
*y=temp;
}
// truyn bng a ch (con tr)
void Swap3 (int &x, int &y) // truyn bng tham chiu
inttemp=x;
x=y,
y=temp;
!
Chapter 5: Mng, con tr, v tham chiu 71
}
Khi chy chng trnh s cho kt qu sau:
10,20
20,10
20, 10
5.8. nh ngha ki u
Typedef l c php m u cho cc tn tng trng cho cc kiu d liu.
Nh l mt tham chiu nh ngha mt bit danh cho mt i tng, mt
typedef nh ngha mt bit danh cho mt kiu. Mc ch c bn ca n l
n gin ha cc khai bo kiu phc tp khc nh mt s tr gip ci
thin kh nng c. y l mt vi v d:
typedef char *String;
typedef charName[12];
typedef unsigned int uint;
Tc dng ca cc nh ngha ny l String tr thnh mt bit danh cho char*,
Name tr thnh mt bit danh cho mt mng gm 12 char, v uint tr thnh
mt bit danh cho unsigned int. V th:
String str, // th tuong t nh; cha' *str,
Name name; // th tuung t nh: char name[ 12];
uint n; // th tuong t nh; unsigned int n;
Khai bo phc tp ca Compare trong Danh sch 5.8 l mt minh ha tt
cho typedef:
typedef int (*CompareXconst char*, const char*);
int BinSearch (char *item, char *tableQ, int n, Compare comp)
{
//...
if ((cmp=comp(item, table[mid]))=0)
return mid;
II...
}
typedef m u Compare nh l mt tn kiu mi cho bt k hm vi nguyn
mu (prototype) cho trc. Ngi ta cho rng iu ny lm cho du hiu ca
BinScarch n gin hn.
Swap3(i,j); cout i " j V;
Chapter 5: Mng, con tr, v tham chiu 72
Bi t p cu i ch ong 5
5.1 nh ngha hai hm tng ng thc hin nhp vo cc gi tr cho cc phn t
ca mng v xut cc phn t ca mng:
void ReadArray (double nums[], coast int size);
void WriteArray (double nums], coast int size);
5.2 nh ngha mt hm o ngc th t cc phn t ca mt mng s thc:
void Reverse (double nums], coast int size);
5.3 Bng sau c t cc ni dung chnh ca bn loi hng ca cc ng cc im
tm. nh ngha mt mng hai chiu bt d liu ny:
S ng Bo Mui
Top Flake 12.U 16g 0.4g
Comabix 22g 8g 0.3g
Oatabix 28g 0.5g
Ultrabran 32g
- l l l i 1 ..............
0.2g
Vit mt hm xut bng ny tng phn t mt.
5.4 nh ngha mt hm nhp vo danh sch cc tn v lu tr chng nh l
cc chui c cp pht ng trong mt mng v mt hm xut chng:
void ReadNames (char *names[], coast int size);
void WriteNames (chai' *names[|, coast int size);
Viet mt hm khc sp xp danh sch bng cch s dng gii thut sp
xp ni bt (bubble sort):
void BubbleSort (char *names[], coast int size);
Sap xp ni bt lin quan n vic qut lp li danh sch, ong trong khi
thc hin qut cc hng mc k nhau c so snh v i ch nu khng theo
th t. Qut m khng lin quan n vic i ch ch ra rng danh sch
c sp xp th t.
5.5 Vit li hm sau bng cch s dng tnh ton con tr:
char* ReverseString (char *str)
{
intlen=strlen(str);
char *result=new chaiflen +1 ];
for (register i =0; i <len; -Hi)
result[i] =strpen-i-1];
resuftflen] - \0';
return result;
}
Chapter 5: Mng, con tr, v tham chiu 73
5.6 Vit li gii thut BubbleSort (t bi 5.4) sao cho n s dng mt con tr hm
so snh cc tn.
5.7 Vit li cc m sau bng cch s dng nh ngha kiu:
void (*SwapXdouble, double);
char*table[|;
char*&name;
usigned long *vahies[10][20];
Chapter 5: Mng, con tr, v tham chiu 74
r
Ch ng 6. L p trnh h ng i t ng
Chng ny gii thiu nhng khi nim c bn trong lp trnh hng i
tng. Cc khi nim c bn nh lp, i tng, thuc tnh, phng thc,
thng ip, v quan h ca chng s c tho lun trong phn ny. Thm
vo l s trnh by ca nhng c im quan trng trong lp trnh hng
i tng nh tnh bao gi, tnh tha k, tnh a hnh,., nhm gip ngi hc
c ci nhn tng qut v lp trnh hng i tng.
6.1. Gii thi u

Hng i tng (object orientation) cung cp mt kiu mi xy dng


phn mm. Trong kiu mi ny, cc i tng (object) v cc lp (class) l
nhng khi xy dng trong khi cc phng thc (method), thng ip
(message), v s tha k (inheritance) cung cp cc c ch ch yu.
L p trnh h ng i t ng (OOP- Object-Oriented Programming) l
mt cch t duy mi, tip cn hng i tng gii quyt vn bng
rny tnh. Thl ng OOP ngy cng tr nn Ihng dng trong lnh vc cng
ngh thng tin.
Khi ni m 6.1
Lp trinh hung i tung (OOP) l mt phng php t hi t k v pht
t r i n phn mmda t r n ki n t r c l p v i t ng.
Neu bn cha bao gi s dng mt ngn ng OOP th trc tin bn nn
nm vng cc khi nim ca OOP hon l vit cc chng trnh. Bn cn hiu
c i tng (object) l g, lp (class) l g, chng c quan h vi nhau nh
th no, v lm th no cc i tng trao i thng ip (message) vi
nhau, vng vng.
OOP l tp hp cc k thut quan trng m c th dng lm cho vic
trin khai chng trnh hiu qu hn. Qu trnh tin ha ca OOP nh sau:
Lp trnh tuyn tnh
Lp trnh c cu trc
S tru tng ha d liu
Lp trnh hng i tng
Chng 6: Lp trnh hng i tng 76
6.2. Tr u t ng ha (Abstraction)
Tru tng ha l mt k thut ch trnh by nhng cc c im cn thit
ca vn m khng trnh by nhng chi tit c th hay nhng li gii thch
phc tp ca vn . Hay ni khc hon n l mt k thut tp trung vo
th cn thit v pht l i nhng th khng cn thit.
V d nhng thng tin sau y l cc c tnh gn kt vi con ngi:
TlT
Tui
a ch
Chiu cao
* Mu tc
Gi s ta cn pht trin ng dng khch hng mua sm hng ha th
nhng chi ti t thit yu l tn, a ch cn nhng chi tit khc (tui, chiu cao,
mu tc, ..) l khng quan trng i vi ng dng. Tuy nhin, nu chng ta
pht trin mt ng dng h tr cho vic iu tra ti phm th nhng thng tin
nh chiu cao v mu tc l thit yu.
S tru tng ha khng ngng pht trin trong cc ngn ng lp
trnh, nhng ch mc d liu v th tc. Trong OOP, vic ny c nng
ln mc cao hon - mc i tng. S tru tng ha c phn thnh s
tru tng ha d liu v tru tng ha chng trnh.
Khi ni m 6.2
Tru tung ha d liu ( dat a bst r act i on) l t i n tr r. h xc nh v
nhmcc t huc t i nh v cc hnh ng l i n quan n mt t hc t h c
t h t r ong ng dng ang pht t ri n.
Tru tung ha chung trnh ( progr ambst r act i on) l mt s t r u
t ng ha d l i u m l mcho cc d ch v t hay i t heo d l i u.
6.3. i t ng (object)
Cc i tng l cha kha e hiu c k thut hng i tng. Bn c
th nhn xung quanh v thy c nhiu i tng trong th gii thc nh:
con ch, ci bn, quyn v, cy vit, tivi, xe hoi ...Trong mt h thng hng
i tng, mi th u l i tng. Mt bng tnh, mt trong bng tnh,
mt biu , mt bng bo co, mt con s hay mt s in thoi, mt tp tin,
mt th mc, mt my in, mt cu hoc mt t, thm chi mt k t, tt c
chng l nhng v d ca mt i tng. R rng chng ta vit mt chng
trnh hng i tng cng c ngha l chng ta ang xy dng mt m hnh
Chng 6: Lp trnh hng i tng 77
ca mt vi b phn trong th gii thc. Tuy nhin cc i tng ny c th
c biu din hay m hnh n my tnh.
Mt i tn th gii thc l mt thc th c th m thng thng bn
c th s, nhn thy hay cm nhn c. Tt c cc i tng trong th gii
thc u c tr ng thi (state) v hnh ng (behaviour). V d:
Tr ng thi Hnh ng
Con ch
Tn
Mu
Ging
Vui sng
Sa
vy tai
Chy
n
Xe p
Bnh rng
Bn p
Dy xch
Bnh xe
Tng tc
Gim lc
Chuyn
bnh rng
Cc i t ng ph n m m (software object) c th c dng biu
din cc i tng th gii thc. Chng c m hnh sau khi cc i tng
th gii thc c c trng thi v hnh ng. Ging nh cc i tng th gii
thc, cc i tng phn mm cng c the c trng thi v hnh ng. Mt
i tng phn mm c bin (variable) hay trng thi (state) m thng c
gi l thu c tnh (attribute; property) duy tr trng thi ca n v ph ng
th c (method) thc hin cc hnh ng ca n. Thuc tnh l mt hng
mc d liu c t tn bi mt nh danh (identifier) trong khi phng
thc l mt chc nng c kt hp vi i tng cha n.
OOP thng s dng hai thut ng m sau ny J ava cng s dng l
thuc tnh (attribute) v phng thc (method) c t tng ng cho trng
thi (state) hay bin (variable) v hnh ng (behavior). Tuy nhin C++li s
dng hai thut ng d li u thnh vin (member data) v hm thnh vin
(member function) thay cho cc thut ng ny.
Xt mt cch c bit, ch mt i tng ring r th chnh n khng hu
dng. Mt chng trnh hng i tng thng gm c hai hay nhiu hn
cc i tng phn mm tng tc ln nhau nh l s tng tc ca cc i
tng trong trong th gii thc.
Khi ni m 6.3
i tung (obj ect ) l mt t hc t h phn mmbao bc cc t huc t i nh
v cc phng t hc l i n quan.
K t y, trong gio trnh ny chng ta s dng thut ng i t ng (object)
ch mt i tng phn mm. Hnh 6.1 l mt minh ha ca mt i tng
phn mm:
Chng 6: Lp trnh hng i tng 78
Ilnh 6.1 M t i t ng ph n m m
Methods
(behavior)
Variables
(state)
Mi th m i tng phn mm bit (trng thi) v c th lm (hnh
ng) c th hin qua cc thuc tnh v cc phng thc. Mt i tng
phn mm m phng cho chic xe p s c cc thuc tnh xc nh cc
trng thi ca chic xe p nh: tc ca n l 10 km trcn gi, nhp bn p
l 90 vng trn pht, v bnh rng hin ti l bnh rng th 5. Cc thuc tnh
ny thng thng c xem nh thu c tnh th hi n (instance attribute) bi
v chng cha ng cc trng thi cho mt i tng xe p c th. Trong k
thut hng i tng th mt i tng c th c gi l mt th hi n
(instance).
Mt i t ng c t h c gi l mt th hin ( i nst ance) .
Hnh 6.2 minh ha mt xe p c m hnh nh mt i tng phn mm:
i tng xe dp pnan mem cung c cc phng thc thng li, tng
nhp p hay l chuyn i bnh rng. N khng c phng thc thay i
tc v tc ca xe p c th tnh ra t hai yu t s vng quay v bnh
rng hin ti. Nhng phng thc ny thng thng c bit nh l cc
ph ng th c th hi n (instance method) bi v chng tc ng hay thay
i trng thi ca mt i tng c th.
Khi ni m 6.4
Hnh 6.2 i t ng ph n m m xe p
10 mph
5th gear
90 rpm
Chng 6: Lp trnh hng i tng 79
6.4. Lp (Class)
Trong th gii thc thng thng c nhiu loi i tng cng loi. Chng
hn chic xe p ca bn ch l mt trong hng t chic xe p trn th gii.
Tng t, trong mt chng trnh hng i tng c th c nhiu i tng
cng loi v chia s nhng c im chung. S dng thut ng hng i
tng, chng ta c th ni rng chic xe p ca bn l mt th hin ca lp
xe p. Cc xe p c mt vi trng thi chung (bnh rng hin ti, s vng
quay hin ti, hai bnh xe) v cc hnh ng (chuyn bnh rng, gim tc).
Tuy nhin, trng thi ca mi xe p l c lp v c th khc vi cc trng
thi ca cc xe p khc. Trc khi to ra cc xe p, cc nh sn xut
thng thit lp mt bng thit k (blueprint) m t cc c im v cc yu
t c bn ca xe p. Sau hng lot xe p s c to ra t bn thit k
ny. Khng hiu qu nu nh to ra mt bn thit k mi cho mi xe p
c sn xut.
Trong phn mm hng i tng cng c th c nhiu i tng cng
loi chia s nhng c im chung nh l: cc hnh ch nht, cc mu tin
nhn vin, cc on phim, ... Ging nh l cc nh sn xut xe p, bn c
th to ra mt bng thit k cho cc i tng ny. Mt bng thit k phn
mm cho cc i tng c gi l lp (class).
Khi ni m 6.5
Lp ( cl ass) l mt t hi t k ( bl uepr i nt ) hay mt mu ban
u ( pr ot ot ype) nh ngh a cc t huc t i nh v cc phng
t hc chung cho t t c cc i t ng ca cng mt l oi
no .
Mt i t ng l mt t h hi n c t h ca mt l p.
Tr li v d v xe p chng ta thy rng mt lp Xedap l mt bng thit k
cho hng lot cc i tng xe p c to ra. Mi i tng xe p l mt
th hin ca lp Xedap v trng thi ca n c th khc vi cc i tng xe
p khc. V d mt xe p hin ti c th l bnh rng th 5 trong khi mt
chic khc c th l bnh rng th 3.
Lp Xedap s khai bo cc thuc tnh th hin cn thit cha ng
bnh rng hin ti, s vng quay hin ti, .. cho mi i tng xe p. Lp
Xedap cng khai bo v cung cp nhng thi cng cho cc phng thc th
hin cho php ngi i xe p chuyn i bnh rng, phanh li, chuyn
i s vng quay,.. nh Hnh 6.3.
Chng 6: Lp trnh hng i tng 80
Hnh 6.3 Khai bo cho lp Xedap
Sau khi bn to ra lp xe p, bn c th to ra bt k i tng xe
p no t lp ny. Khi bn to ra mt th hin ca lp, h thng cp pht
b nh cho i tng v tt c cc thuc tnh th hin ca n. Mi th hin s
c vng nh ring cho cc thuc tnh th hin ca n. Hnh 6.4 minh ha hai
i tng xe p khc nhau c to ra t cng lp Xedap:
Hnh 6.4 Hai i t ng c a lp Xedap
HyBi ke Y ourBi ke
Ngoi cc thuc tnh th hin, cc lp c th nh ngha cc thu c tnh
lp (class attribute). Mt thuc tnh lp cha ng cc thng tin m c
chia s bi tt c cc th hin ca lp. V d, tt c xe p c cng s lng
bnh rng. Trong trng hp ny, nh ngha mt thuc tnh th hin gi
s lng bnh rng l khng hiu qu bi v tt c cc vng nh ca cc
thuc tnh th hin ny u gi cng mt gi tr. Trong nhng trng hp nh
th bn c th nh ngha mt thuc tnh lp cha ng s lng bnh
rng ca xe p.Tt c cc th hin ca lp Xedap s chia thuc tnh ny. Mt
lp cng c th khai bo cc ph ng th c l p (class methods). Bn c th
triu gi mt phng thc lp trc tip t lp nhng ngc li bn phi triu
gi cc phng thc th hin t mt th hin c th no .
Chng 6: Lp trnh hng i tng 81
Hnh 6.5 Lp v th hi n c a lp
Khi ni m 6.6
Thuc tinh lp ( cl ass at t r i but e) l mt hng mc d
l i u l i n kt vi mt l p c t h m khng l i n kt vi
cc t h hi n ca l p. N c i nh ngh a bn t r ong nh
ngh a l p v c chi a s bi t at c cc t h hi n ca
l p.
Phuong thc lp ( cl ass met hod) l mt phng t hc c
t r i u gi m khng t hamkho t i bt ky mt "i t ng
no! Tat c cc phng t hc l p nh hng n t on b
l p ch khng nh hng n mt l p r i ng r no.
6.5. Thu c tnh (Attribute)
Cc thuc tnh trnh by trng thi ca i tng. Cc thuc tnh nm gi cc
gi tr d liu trong mt i tng, chng nh ngha mt i tng c th.
Khi ni m 6.7
Thuc tinh ( at t r i but e) l d l i u t r nh by cc c i m
v mt i t ng.
Mt thuc tnh c th c gn mt gi tr ch sau khi mt i tng da
trn lp y c to ra. Mt khi cc thuc tnh c gn gi tr chng m t
mt i tng. Mi i tng ca mt lp phi c cng cc thuc tnh nhng
gi tr ca cc thuc tnh th c th khc nhau. Mt thuc tnh ca i tng
c th nhn cc gi tr khc nhau ti nhng thi im khc nhau.
Chng 6: Lp trnh hng i tng 82
6.6. Ph ng th c (Method)
Cc phng thc thc thi cc hot ng ca i tng. Cc phng thc l
nhn t lm thay i cc thuc tnh ca i tng.
Khi nim 6.8
Phuong thc (method) c l i n quan t i nhng t h m i
t ng c t h l m. Mt phng t hc p ng mt chc nng
t c ng l n d l i u cua i t ng ( t huc t i nh) .
Cc phng thc xc nh cch thc hot ng ca mt i tng v
c thc thi khi i tng c th c to ra.V d, cc hot ng chung ca
mt i tng thuc lp Ch l sa, vy tai, chy, v n. Tuy nhin, ch khi
mt i tng c th thuc lp Ch c to ra th cc phng thc sa, vy
tai, chy, v n mi c thc thi.
Cc phng thc mang li mt cch nhn khc v i tng. Khi bn
nhn vo i tng Ca ra vo bn trong mi trng ca bn (mi trng th
gii thc), mt cch n gin bn c th thy n l mt i tng bt ng
khng c kh nng suy ngh. Trong tip cn hng i tng cho pht trin
h thng, Ca ra vo c th c lin kt ti phng thc c gi s l c
th c thc hin. V d, Ca ra vo c th m, n c th ng, n c th
kha, hoc n c th m kha. Tt c cc phng thc ny gn kt vi i
tng Ca ra vo v c thc hin bi Ca ra vo ch khng phi mt i
lng no khc.
6.7. Thng i p (Message)
Mt chng trnh hay ng dng ln thng cha nhiu i tng khc nhau.
Cc i tng phn mm tng tc v giao tip vi nhau bng cch gi cc
thng i p (message). Khi i tng A mun i tng B thc hin cc
phng thc ca i tng B th i tng A gi mt thng ip ti i
tng B.
V d i tng ngi i xe p mun i tng xe p thc hin
phng thc chuyn i bnh rng ca n th i tng ngi i xe p cn
phi gi mt thng ip ti i tng xe p.
i khi i tng nhn cn thng tin nhiu hn bit chnh xc thc
hin cng vic g. V d khi bn chuyn bnh rng trn chic xe p ca bn
th bn phi ch r bnh rng no m bn mun chuyn. Cc thng tin ny
c truyn km theo thng ip v c gi l cc tham s (parameter).
Chng 6: Lp trnh hng i tng 83
Mt thng ip gm c:
i tng nhn thng ip
Tn ca phng thc thc hin
Cc tham s m phng thc cn
Khi ni m 6.9
Mt thng ip (message) l mt l i yu cu mt hot ng.
Mt t hng i p c t ruyn khi mt i t ng t ri u gi mt
ha nhi u phng thc ca i t ng khc yu cu t hng
ti n.
Khi mt i tng nhn c mt thng ip, n thc hin mt phng
thc tng ng. V d i tng xe p nhn c thng ip l chuyn i
bnh rng n s thc hin vic tm kim phng thc chuyn i bnh rng
tng ng v thc hin theo yu cu ca thng ip m n nhn c.
6.8. Tnh bao gi (Encapsulation)
Trong i tng xe p, gi tr ca cc thuc tnh c chuyn i bi cc
phng thc. Phng thc changeGear() chuyn i gi tr ca thuc tnh
currentGear. Thuc tnh speed c chuyn i bi phng thc
changeGear() hoc changRpm().
Trong OOP th cc thuc tnh l trung tm, l ht nhn ca i tng.
Cc phng thc bao quanh v che giu i ht nhn ca i tng t cc i
tng khc trong chng trnh.Vic bao gi cc thuc tnh ca mt i tng
bn trong s che ch ca cc phng thc ca n c gi l s ng gi
(encapsulation) hay l ng gi d liu.
c tnh ng gi d liu l tng ca cc nh thit cc h thng
hng i tng. Tuy nhin, vic p dng trong thc t th c th khng hon
ton nh th. V nhng l do thc t m cc i tng i khi cn phi phi
by ra mt vi thuc tnh ny v che giu i mt vi phng thc kia. Ty
thuc vo cc ngn ng lp trnh hng i tng khc nhau, chng ta c cc
iu khin cc truy xut d liu khc nhau.
Khi ni m 6.10
ng gi (encapsul ati on) l t i n t r nh che gi u vi c t hc thi
chi t i t ca mt i tnq.
Mt i tng c mt giao din chung cho cc i tng khc s dng
giao tip vi n. Do c tnh ng gi m cc chi tit nh: cc trng thi
Chng 6: Lp trnh hng i tng 84
c lu tr nh th no hay cc hnh ng c thi cng ra sao c th c
che giu i t cc i tng khc. iu ny c ngha l cc chi tit ring ca
i tng c th c chuyn i m hon ton khng nh hng ti cc i
tng khc c lin h vi n. V d, mt ngi i xe p khng cn bit
chnh xc c ch chuyn bnh rng trn xe p thc s lm vic nh th no
nhng vn c th s dng n. iu ny c gi l che giu thng tin.
Khi ni m 6.11
Che giu thng tin (i nf ormat i on hi di ng) l vi c n i cc chi
t i t ca t hi t k hay thi cng t cc i t ng khc.
6.9. Tnh th a k (Inheritance)
H thng hng i tng cho php cc lp c nh ngha k tha t cc
lp khc. V d, lp xe p leo ni v xe p ua l nhng lp con (subclass)
ca lp xe p. Nh vy ta c th ni lp xe p l lp cha (superclass) ca
lfp xe p leo ni v xe p ua.
Khi ni m 6.12
Tha k (i nheri tance) ngh a l cc hnh ng (phng thc) v
cc t huc t nh cc nh ngh a t r ong mt l p c t h c t ha
k hoc c s dng l i bi l p khac.
Khi ni m 6.13
Lp cha (supercl ass) l l cp c cc t huc t nh ha hnh ng
c t ha hng bi mt hay nhi u l p khc.
Lp con (subcl ass) l l p t ha hng mt vi c t nh chung
ca l p cha v t hmvo nhng c t i nh r i ng khc.
Cc lp con tha k thuc tnh v hnh ng t lfp cha ca chng. V d,
mt xe p leo ni khng nhng c bnh rng, s vng quay trn pht v tc
ging nh mi xe p khc m cn c thm mt vi loi bnh rng v th
m n cn thm mt thuc tnh l gearRange (loi bnh rng).
Cc lp con c th nh ngha li cc phng thc c tha k cung
cp cc thi cng ring bit cho cc phng thc ny. V , mt xe p leo
ni s cn mt phng thc c bit chuyn i bnh rng.
Chng 6: Lp trnh hng i tng 85
Cc lp con cung cp cc phin bn c bit ca cc lp cha m khng
cn phi nh ngha li cc lp mi hon ton. y, m lp cha c th c
s dng li nhiu ln.
6.10.Tnh a hnh (Polymorphism)
Mt khi nim quan trng khc c lin quan mt thit vi truyn thng ip
l a hnh (polymorphism). Vi a hnh, nu cng mt hnh ng (phng
thc) ng dng cho cc i tng thuc cc lp khc nhau th c th a n
nhng kt qu khc nhau.
Khi ni m 6.14
a hnh (pol ymorphi sm) ngh a l "nhi u h nh thc", hnh ng
cng t n c t h c t hc hi n khc nhau i vi cc i
t ng/ cc l p khc nhau.
Chng ta hy xem xt cc i tng Ca s v Ca Ci. C hai i
tng c mt hnh ng chung c th thc hin l ng. Nhng mt i
tng Ca Ci thc hin hnh ng c th khc vi cch m mt i
tng Ca s thc hin hnh ng . Ca Ci khp cnh ca li trong khi
Ca S h cc thanh ca xung. Tht vy, hnh ng ng c th thc hin
mt trong hai hnh thc khc nhau. Mt v d khc l hnh ng hin th. Ty
thuc vo i tng tc ng, hnh ng y c th hin th mt chui, hoc
vc mt ng thng, hoc l hin th mt hnh.
a hnh c s lin quan ti vic truyn thng ip. i tng yu cu
cn bit hnh ng no yu cu v yu cu t i tng no. Tuy nhin
i tng yu cu khng cn lo lng v mt hnh ng c hon thnh nh
th no.
Bi t p cu i ch ng 6
6.1 Trnh by cc nh ngha ca cc thut ng:
Lp trnh hng i tng
Tru tng ha
i tng
Lp
Thuc tnh
Phng thc
Thng ip
Chng 6: Lp trnh hng i tng 86
6.2 Phn bit s khc nhau gia lp v i tng, gia thuc tnh v gi t, gia
thng ip v truyn thng ip.
6.3 Trnh by cc c im ca OOP.
6.4 Nhng li ch c c thng qua tha k v bao gi.
6.5 Nhng thuc tnh v phng thc c bn ca mt ci my git.
6.6 Nhng thuc tnh v phng thc c bn ca mt chic xe hi.
6.7 Nhng thuc tnh v phng thc c bn ca mt hnh trn.
6.8 Ch ra cc i tng trong h thng rt tin t ng ATM.
6.9 Ch ra cc lp c th k tha t lp in thoi, xe hi, v ng vt.
Chng 6: Lp trnh hng i tng 87

You might also like