You are on page 1of 70

THANH TNG

Bi 1 : Cu Trc Ca Mt Chng Trnh C++


C l mt trong nhng cch tt nht bt u hc mt ngn ng lp trnh l bng
mt chng trnh. Vy y l chng trnh u tin ca chng ta :
// my first program in C++

#include <iostream.h>

int main ()
{
cout << "Hello World!";
return 0;
}
Hello World!
Chng trnh trn y l chng trnh u tin m hu ht nhng ngi hc ngh
lp trnh vit u tin v kt qu ca n l vit cu "Hello, World" ln mn hnh.
y l mt trong nhng chng trnh n gin nht c th vit bng C++ nhng n
bao gm nhng phn c bn m mi chng trnh C++ c. Hy cng xem xt
tng dng mt :
// my first program in C++
y l dng ch thch. Tt c cc dng bt u bng hai du s (//) c coi l
cht thch m chng khng c bt k mt nh hng no n hot ng ca chng
trnh. Chng c th c cc lp trnh vin dng gii thch hay bnh phm bn
trong m ngun ca chng trnh. Trong trng hp ny, dng ch thch l mt
gii thch ngn gn nhng g m chng trnh chng ta lm.
#include <iostream.h>
Cc cu bt u bng du (#) c dng cho preprocessor (ai dch h ti t ny
vi). Chng khng phi l nhng dng m thc hin nhng c dng bo hiu
cho trnh dch. y cu lnh #include <iostream.h> bo cho trnh dch
bit cn phi "include" th vin iostream. y l mt th vin vo ra c bn trong
C++ v n phi c "include" v n s c dng trong chng trnh. y l cch
c in s dng th vin iostream
int main ()
Dng ny tng ng vi phn bt u khai bo hm main. Hm main l im m
tt c cc chng trnh C++ bt u thc hin. N khng ph thuc vo v tr ca
hm ny ( u, cui hay gia ca m ngun) m ni dung ca n lun c
thc hin u tin khi chng trnh bt u. Thm vo , do nguyn nhn ni
trn, mi chng trnh C++ u phi tn ti mt hm main.
Theo sau main l mt cp ngoc n bi v n l mt hm. Trong C++, tt c cc
hm m sau l mt cp ngoc n () th c ngha l n c th c hoc khng c
tham s (khng bt buc). Ni dung ca hm main tip ngay sau phn khai bo
chnh thc c bao trong cc ngoc nhn ( { } ) nh trong v d ca chng ta
cout << "Hello World";
Dng lnh ny lm vic quan trng nht ca chng trnh. cout l mt dng
(stream) output chun trong C++ c nh ngha trong th vin iostream v
nhng g m dng lnh ny lm l gi chui k t "Hello World" ra mn hnh.
Ch rng dng ny kt thc bng du chm phy ( ; ). K t ny c dng
kt thc mt lnh v bt buc phi c sau mi lnh trong chng trnh C++ ca
bn (mt trong nhng li ph bin nht ca nhng lp trnh vin C++ l qun mt
du chm phy).
return 0;
Lnh return kt thc hm main v tr v m i sau n, trong trng hp ny l 0.
y l mt kt thc bnh thng ca mt chng trnh khng c mt li no trong
qu trnh thc hin. Nh bn s thy trong cc v d tip theo, y l mt cch ph
bin nht kt thc mt chng trnh C++.
Chng trnh c cu trc thnh nhng dng khc nhau n tr nn d c hn
nhng hon ton khng phi bt buc phi lm vy. V d, thay v vit
int main ()
{
cout << " Hello World ";
return 0;
}
ta c th vit
int main () { cout << " Hello World "; return
0; }
cng cho mt kt qu chnh xc nh nhau.
Trong C++, cc dng lnh c phn cch bng du chm phy ( ;). Vic chia
chng trnh thnh cc dng ch nhm cho n d c hn m thi.
Cc ch thch.
Cc ch thch c cc lp trnh vin s dng ghi ch hay m t trong cc phn
ca chng trnh. Trong C++ c hai cch ch thch
// Ch thch theo dng
/* Ch thch theo khi */
Ch thch theo dng bt u t cp du x (//) cho n cui dng. Ch thch theo
khi bt u bng /* v kt thc bng */ v c th bao gm nhiu dng. Chng
ta s thm cc ch thch cho chng trnh :
/* my second program in C++
with more comments */

#include <iostream.h>

int main ()
{
cout << "Hello World! "; //
says Hello World!
cout << "I'm a C++ program"; //
says I'm a C++ program
return 0;
}
Hello World! I'm a
C++ program
Nu bn vit cc ch thch trong chng trnh m khng s dng cc du //, /* hay
*/, trnh dch s coi chng nh l cc lnh C++ v s hin th cc li.

Bi 1 : Cu Trc Ca Mt Chng Trnh C++
C l mt trong nhng cch tt nht bt u hc mt ngn ng lp trnh l bng
mt chng trnh. Vy y l chng trnh u tin ca chng ta :
// my first program in C++

#include <iostream.h>

int main ()
{
cout << "Hello World!";
return 0;
}
Hello World!
Chng trnh trn y l chng trnh u tin m hu ht nhng ngi hc ngh
lp trnh vit u tin v kt qu ca n l vit cu "Hello, World" ln mn hnh.
y l mt trong nhng chng trnh n gin nht c th vit bng C++ nhng n
bao gm nhng phn c bn m mi chng trnh C++ c. Hy cng xem xt
tng dng mt :
// my first program in C++
y l dng ch thch. Tt c cc dng bt u bng hai du s (//) c coi l
cht thch m chng khng c bt k mt nh hng no n hot ng ca chng
trnh. Chng c th c cc lp trnh vin dng gii thch hay bnh phm bn
trong m ngun ca chng trnh. Trong trng hp ny, dng ch thch l mt
gii thch ngn gn nhng g m chng trnh chng ta lm.
#include <iostream.h>
Cc cu bt u bng du (#) c dng cho preprocessor (ai dch h ti t ny
vi). Chng khng phi l nhng dng m thc hin nhng c dng bo hiu
cho trnh dch. y cu lnh #include <iostream.h> bo cho trnh dch
bit cn phi "include" th vin iostream. y l mt th vin vo ra c bn trong
C++ v n phi c "include" v n s c dng trong chng trnh. y l cch
c in s dng th vin iostream
int main ()
Dng ny tng ng vi phn bt u khai bo hm main. Hm main l im m
tt c cc chng trnh C++ bt u thc hin. N khng ph thuc vo v tr ca
hm ny ( u, cui hay gia ca m ngun) m ni dung ca n lun c
thc hin u tin khi chng trnh bt u. Thm vo , do nguyn nhn ni
trn, mi chng trnh C++ u phi tn ti mt hm main.
Theo sau main l mt cp ngoc n bi v n l mt hm. Trong C++, tt c cc
hm m sau l mt cp ngoc n () th c ngha l n c th c hoc khng c
tham s (khng bt buc). Ni dung ca hm main tip ngay sau phn khai bo
chnh thc c bao trong cc ngoc nhn ( { } ) nh trong v d ca chng ta
cout << "Hello World";
Dng lnh ny lm vic quan trng nht ca chng trnh. cout l mt dng
(stream) output chun trong C++ c nh ngha trong th vin iostream v
nhng g m dng lnh ny lm l gi chui k t "Hello World" ra mn hnh.
Ch rng dng ny kt thc bng du chm phy ( ; ). K t ny c dng
kt thc mt lnh v bt buc phi c sau mi lnh trong chng trnh C++ ca
bn (mt trong nhng li ph bin nht ca nhng lp trnh vin C++ l qun mt
du chm phy).
return 0;
Lnh return kt thc hm main v tr v m i sau n, trong trng hp ny l 0.
y l mt kt thc bnh thng ca mt chng trnh khng c mt li no trong
qu trnh thc hin. Nh bn s thy trong cc v d tip theo, y l mt cch ph
bin nht kt thc mt chng trnh C++.
Chng trnh c cu trc thnh nhng dng khc nhau n tr nn d c hn
nhng hon ton khng phi bt buc phi lm vy. V d, thay v vit
int main ()
{
cout << " Hello World ";
return 0;
}
ta c th vit
int main () { cout << " Hello World "; return
0; }
cng cho mt kt qu chnh xc nh nhau.
Trong C++, cc dng lnh c phn cch bng du chm phy ( ;). Vic chia
chng trnh thnh cc dng ch nhm cho n d c hn m thi.
Cc ch thch.
Cc ch thch c cc lp trnh vin s dng ghi ch hay m t trong cc phn
ca chng trnh. Trong C++ c hai cch ch thch
// Ch thch theo dng
/* Ch thch theo khi */
Ch thch theo dng bt u t cp du x (//) cho n cui dng. Ch thch theo
khi bt u bng /* v kt thc bng */ v c th bao gm nhiu dng. Chng
ta s thm cc ch thch cho chng trnh :
/* my second program in C++
with more comments */

#include <iostream.h>

int main ()
{
cout << "Hello World! "; //
says Hello World!
cout << "I'm a C++ program"; //
says I'm a C++ program
return 0;
}
Hello World! I'm a
C++ program
Nu bn vit cc ch thch trong chng trnh m khng s dng cc du //, /* hay
*/, trnh dch s coi chng nh l cc lnh C++ v s hin th cc li.

Bi 3 : Cc Ton T
Qua bi trc chng ta bit n s tn ti ca cc bin v cc hng. Trong C++,
thao tc vi chng ta s dng cc ton t, l cc t kho v cc du khng c
trong bng ch ci nhng li c trn hu ht cc bn phm trn th gii. Hiu bit
v chng l rt quan trng v y l mt trong nhng thnh phn c bn ca ngn
ng C++.
Ton t gn (=).
Ton t gn dng gn mt gi tr no cho mt bin
a = 5;
gn gi tr nguyn 5 cho bin a. V tri bt buc phi l mt bin cn v
phi c th l bt k hng, bin hay kt qu ca mt biu thc.
Cn phi nhn mnh rng ton t gn lun c thc hin t tri sang
phi v khng bao gi o ngc
a = b;
gn gi tr ca bin a bng gi tr ang cha trong bin b. Ch rng
chng ta ch gn gi tr ca b cho a v s thay i ca b sau s
khng nh hng n gi tr ca a.
Mt thuc tnh ca ton t gn trong C++ gp phn gip n vt ln
cc ngn ng lp trnh khc l vic cho php v phi c th cha cc
php gn khc. V d:
a = 2 + (b = 5);
tng ng vi
b = 5;
a = 2 + b;
V vy biu thc sau cng hp l trong C++
a = b = c = 5;
gn gi tr 5 cho c ba bin a, b v c
Cc ton t s hc ( +, -, *, /, % )
Nm ton t s hc c h tr bi ngn ng l:

+ cng
- tr
* nhn
/ chia
% ly phn d (trong php chia)
Th t thc hin cc ton t ny cng ging nh chng c thc hin trong
ton hc. iu duy nht c v hi l i vi bn l php ly phn d, k
hiu bng du phn trm (%). y chnh l php ton ly phn d trong
php chia hai s nguyn vi nhau. V d, nu a = 11 % 3;, bin a s
mang gi tr 2 v 11 = 3*3 +2.
Cc ton t gn phc hp (+=, -=, *=, /=, %=, >>=, <<=, &=,
^=, |=)
Mt c tnh ca ngn ng C++ lm cho n ni ting l mt ngn ng sc
tch chnh l cc ton t gn phc hp cho php chnh sa gi tr ca mt
bin vi mt trong nhng ton t c bn sau:

value += increase; tng ng vi value =
value + increase;
a -= 5; tng ng vi a = a - 5;
a /= b; tng ng vi a = a / b;
price *= units + 1; tng ng vi price =
price * (units + 1);
v tng t cho tt c cc ton t khc.
Tng v gim.
Mt v d khc ca vic tit kim khi vit m lnh l ton t tng (++) v
gim (--). Chng tng hoc gim gi tr cha trong mt bin i 1. Chng
tng ng vi +=1 hoc -=1. V vy, cc dng sau l tng ng:

a++;
a+=1;
a=a+1;
Mt tnh cht ca ton t ny l n c th l tin t hoc hu t, c ngha l
c th vit trc tn bin (++a) hoc sau (a++) v mc d trong hai biu
thc rt n gin n c cng ngha nhng trong cc thao tc khc khi
m kt qu ca vic tng hay gim c s dng trong mt biu thc th
chng c th c mt khc bit quan trng v ngha: Trong trng hp ton
t c s dng nh l mt tin t (++a) gi tr c tng trc khi biu
thc c tnh v gi tr tng c s dng trong biu thc; trong trng
hp ngc li (a++) gi tr trong bin a c tng sau khi tnh ton. Hy
ch s khc bit :
V d 1 V d 2
B=3;
A=++B;
// A is 4, B is 4
B=3;
A=B++;
// A is 3, B is 4

Cc ton t quan h ( ==, !=, >, <, >=, <= )
c th so snh hai biu thc vi nhau chng ta c th s dng cc ton t
quan h. Theo chun ANSI-C++ th gi tr ca thao tc quan h ch c th l
gi tr logic - chng ch c th c gi tr true hoc false, tu theo biu
thc kt qu l ng hay sai.

Sau y l cc ton t quan h bn c th s dng trong C++
== Bng
!= Khc
> Ln hn
< Nh hn
> = Ln hn hoc bng
< = Nh hn hoc bng
V d:
(7 == 5) s tr gi tr false

(6 >= 6) s tr gi tr true
tt nhin thay v s dng cc s, chng ta c th s dng bt c biu
thc no. Cho a=2, b=3 v c=6
(a*b >= c) s tr gi tr true.
(b+4 < a*c) s tr gi tr false

Cn ch rng = (mt du bng) lf hon ton khc vi == (hai du bng).
Du u tin l mt ton t gn ( gn gi tr ca biu thc bn phi cho bin
bn tri) v du cn li (==) l mt ton t quan h nhm so snh xem hai
biu thc c bng nhau hay khng.

Trong nhiu trnh dch c trc chun ANSI-C++ cng nh trong ngn ng C, cc
ton t quan h khng tr v gi tr logic true hoc false m tr v gi tr int vi 0
tng ng vi false cn gi tr khc 0 (thng l 1) th tng ng vi true.

Cc ton t logic ( !, &&, || ).
Ton t ! tng ng vi ton t logic NOT, n ch c mt i s pha
bn phi v vic duy nht m n lm l i ngc gi tr ca i s t true
sang false hoc ngc li. V d:
!(5 == 5) tr v false v biu thc bn phi (5 == 5) c gi trtrue.
!(6 <= 4) tr v true v (6 <= 4)c gi tr false.
!true tr v false.
!false tr v true.
Ton t logic && v || c s dng khi tnh ton hai biu thc ly ra
mt kt qu duy nht. Chng tng ng vi cc ton t logic AND v OR.
Kt qu ca chng ph thuc vo mi quan h ca hai i s:
i s th nht
a
i s th hai
b
Kt qu
a && b
Kt qu
a || b
true true true true
true false false true
false true false true
false false false false
V d:
( (5 == 5) && (3 > 6) ) tr v false ( true &&
false ).
( (5 == 5) || (3 > 6)) tr v true ( true ||
false ).
Ton t iu kin ( ? ).
Ton t iu kin tnh ton mt biu thc v tr v mt gi tr khc tu
thuc vo biu thc l ng hay sai. Cu trc ca n nh sau:
condition ? result1 : result2
Nu condition l true th gi tr tr v s l result1, nu khng gi
tr tr v l result2.
7==5 ? 4 : 3 tr v 3 v 7 khng bng 5.
7==5+2 ? 4 : 3 tr v 4 v 7 bng 5+2.
5>3 ? a : b tr v a, v 5 ln hn 3.
a>b ? a : b tr v gi tr ln hn, a hoc b.

Cc ton t thao tc bit ( &, |, ^, ~, <<, >> ).
Cc ton t thao tc bit thay i cc bit biu din mt bin, c ngha l thay
i biu din nh phn ca chng
ton t asm M t
& AND Logical AND
| OR Logical OR
^ XOR Logical exclusive OR
~ NOT o ngc bit
<< SHL Dch bit sang tri
>> SHR Dch bit sang phi

Cc ton t chuyn i kiu
Cc ton t chuyn i kiu cho php bn chuyn i d liu t kiu ny
sang kiu khc. C vi cch lm vic ny trong C++, cch c bn nht
c tha k t ngn ng C l t trc biu thc cn chuyn i tn kiu
d liu c bc trong cp ngoc n (), v d:
int i;
float f = 3.14;
i = (int) f;
on m trn chuyn s thp phn 3.14 sang mt s nguyn (3). y, ton
t chuyn i kiu l (int). Mt cch khc lm iu ny trong C++ l s
dng cc constructors ( mt s sch thut ng ny c dch l cu t
nhng ti thy n c v khng xui tai lm) thay v dng cc ton t : t
trc biu thc cn chuyn i kiu tn kiu mi v bao bc biu thc gia
mt cp ngoc n.
i = int ( f );
C hai cch chuyn i kiu u hp l trong C++. Thm vo ANSI-C++
cn c nhng ton t chuyn i kiu mi c trng cho lp trnh hng i
tng.

sizeof()
Ton t ny c mt tham s, c th l mt kiu d liu hay l mt bin v
tr v kch c bng byte ca kiu hay i tng .
a = sizeof (char);
a s mang gi tr 1 v kiu char lun c kch c 1 byte trn mi h thng.
Gi tr tr v ca sizeof l mt hng s v vy n lun lun c tnh trc
khi chng trnh thc hin.

Cc ton t khc
Trong C++ cn c mt s cc ton t khc, nh cc ton t lin quan n
con tr hay lp trnh hng i tng. Chng s c ni n c th trong
cc phn tng ng.
Th t u tin ca cc ton t
Khi vit cc biu thc phc tp vi nhiu ton hng cc bn c th t hi ton hng
no c tnh trc, ton hng no c tnh sau. V d nh trong biu thc sau:
a = 5 + 7 % 2
c th c hai cch hiu sau:
a = 5 + (7 % 2) vi kt qu l 6, hoc
a = (5 + 7) % 2 vi kt qu l 0
Cu tr li ng l biu thc u tin. V nguyn nhn ni trn, ngn ng C++
thit lp mt th t u tin gia cc ton t, khng ch ring cc ton t s hc m
tt c cc ton t c th xut hin trong C++. Th t u tin ca chng c lit k
trong bng sau theo th t t cao xung thp.

Th t Ton t M t Associativity
1 :: scope Tri
2 () [ ] -> . sizeof Tri
3 ++ -- tng/gim Phi

~ o ngc bit


! NOT


& * Ton t con tr


(type) Chuyn i kiu


+ - Dng hoc m

4 * / % Ton t s hc Tri
5 + - Ton t s hc Tri
6 << >> Dch bit Tri
7 < <= > >= Ton t quan h Tri
8 == != Ton t quan h Tri
9 & ^ | Ton t thao tc bit Tri
10 && || Ton t logic Tri
11 ?: Ton t iu kin Phi
12
= += -= *= /= %=
>>= <<= &= ^= |=
Ton t gn Phi
13 , Du phy Tri
Associativity nh ngha trong trng hp c mt vi ton t c cng th t u tin
th ci no s c tnh trc, ton t pha xa nht bn phi hay l xa nht bn
tri.
Nu bn mun vit mt biu thc phc tp m li khng chc lm v th t u tin
ca cc ton t th nn s dng cc ngoc n. Cc bn nn thc hin iu ny v
n s gip chng trnh d c hn.
Bi 4 : Cc Cu Trc iu Khin
Mt chng trnh thng khng ch bao gm cc lnh tun t ni tip nhau. Trong
qu trnh chy n c th r nhnh hay lp li mt on m no . lm iu ny
chng ta s dng cc cu trc iu khin.
Cng vi vic gii thiu cc cu trc iu khin chng ta cng s phi bit ti mt
khi nim mi: khi lnh, l mt nhm cc lnh c ngn cch bi du chm
phy (;) nhng c gp trong mt khi gii hn bi mt cp ngoc nhn: { v }.
Hu ht cc cu trc iu khin m chng ta s xem xt trong chng ny cho
php s dng mt lnh n hay mt khi lnh lm tham s, tu thuc vo chng ta
c t n trong cp ngoc nhn hay khng.
Cu trc iu kin: if v else
Cu trc ny c dng khi mt lnh hay mt khi lnh ch c thc hin khi
mt iu kin no tho mn. Dng ca n nh sau:
if (condition) statement
trong condition l biu thc s c tnh ton. Nu iu kin l true,
statement c thc hin. Nu khng statement b b qua (khng thc
hin) v chng trnh tip tc thc hin lnh tip sau cu trc iu kin.
V d, on m sau y s vit x is 100 ch khi bin x cha gi tr 100:
if (x == 100)
cout << "x is 100";
Nu chng ta mun c hn mt lnh c thc hin trong trng hp
condition l true chng ta c th ch nh mt khi lnh bng cch s dng
mt cp ngoc nhn { }:
if (x == 100)
{
cout << "x is ";
cout << x;
}
Chng ta cng c th ch nh iu g s xy ra nu iu kin khng c tho mn
bng cch su dng t kho else. N c s dng cng vi if nh sau:
if (condition) statement1 else statement2
V d:
if (x == 100)
cout << "x is 100";
else
cout << "x is not 100";
Cu trc if + else c th c mc ni kim tra nhiu gi tr. V d sau y s
kim tra xem gi tr cha trong bin x l dng, m hay bng khng.
if (x > 0)
cout << "x is positive";
else if (x < 0)
cout << "x is negative";
else
cout << "x is 0";
Cc cu trc lp
Mc ch ca cc vng lp l lp li mt thao tc vi mt s ln nht nh hoc
trong khi mt iu kin no cn tho mn.
Vng lp while .
Dng ca n nh sau:
while (expression) statement
v chc nng ca n n gin ch l lp li statement khi iu kin
expression cn tho mn.
V d, chng ta s vit mt chng trnh m ngc s dng vo lp while:
// custom countdown using while
#include <iostream.h>
int main ()
{
int n;
cout << "Enter the starting
number > ";
cin >> n;
while (n>0) {
cout << n << ", ";
--n;
}
cout << "FIRE!";
return 0;
}
Enter the starting
number > 8
8, 7, 6, 5, 4, 3, 2,
1, FIRE!
Khi chng trnh chy ngi s dng c yu cu nhp vo mt s m
ngc. Sau , khi vng lp while bt u nu s m ngi dng nhp vo
tho mn iu kin iu kin n>0 khi lnh s c thc hin mt s ln
khng xc nh chng no iu kin (n>0) cn c tho mn.
Chng ta cn phi nh rng vng lp phi kt thc mt im no ,
v vy bn trong vng lp chng ta phi cung cp mt phng thc
no buc condition tr thnh sai nu khng th n s lp li
mi mi. Trong v d trn vng lp phi c lnh --n; lm cho
condition tr thnh sai sau mt s ln lp.
Vng lp do-while
Dng thc:
do statement while (condition);
Chc nng ca n l hon ton ging vng lp while ch tr c mt iu l
iu kin iu khin vng lp c tnh ton sau khi statement c
thc hin, v vy statement s c thc hin t nht mt ln ngay c khi
condition khng bao gi c tho mn. V d, chng trnh di y
s vit ra bt k s no m bn nhp vo cho n khi bn nhp s 0.
// number echoer
#include <iostream.h>
int main ()
Enter number (0 to
end): 12345
{
unsigned long n;
do {
cout << "Enter number (0 to
end): ";
cin >> n;
cout << "You entered: " << n
<< "\n";
} while (n != 0);
return 0;
}
You entered: 12345
Enter number (0 to
end): 160277
You entered: 160277
Enter number (0 to
end): 0
You entered: 0
Vng lp do-while thng c dng khi iu kin kt thc vng lp
nm trong vng lp, nh trong v d trn, s m ngi dng nhp vo l iu
kin kim tra kt thc vng lp. Nu bn khng nhp s 0 trong v d trn
th vng lp s khng bao gi chm dt.
Vng lp for .
Dng thc:
for (initialization; condition; increase)
statement;
v chc nng chnh ca n l lp li statement chng no condition
cn mang gi tr ng, nh trong vng lp while. Nhng thm vo , for
cung cp ch dnh cho lnh khi to v lnh tng. V vy vng lp ny c
thit k c bit lp li mt hnh ng vi mt s ln xc nh.
Cch thc hot ng ca n nh sau:
1, initialization c thc hin. Ni chung n t mt gi kh
ban u cho bin iu khin. Lnh ny c thc hin ch mt ln.
2, condition c kim tra, nu n l ng vng lp tip tc cn
nu khng vng lp kt thc v statement c b qua.
3, statement c thc hin. N c th l mt lnh n hoc l
mt khi lnh c bao trong mt cp ngoc nhn.
4, Cui cng, increase c thc hin tng bin iu khin v
vng lp quay tr li bc 2.
Sau y l mt v d m ngc s dng vng for.
// countdown using a for
loop
#include <iostream.h>
10, 9, 8, 7, 6, 5, 4, 3, 2,
1, FIRE!
int main ()
{
for (int n=10; n>0; n--)
{
cout << n << ", ";
}
cout << "FIRE!";
return 0;
}
Phn khi to v lnh tng khng bt buc phi c. Chng c th c b
qua nhng vn phi c du chm phy ngn cch gia cc phn. V vy,
chng ta c th vit for (;n<10;) hoc for (;n<10;n++).
Bng cch s dng du phy, chng ta c th dng nhiu lnh trong
bt k trng no trong vng for, nh l trong phn khi to. V d
chng ta c th khi to mt lc nhiu bin trong vng lp:
for ( n=0, i=100 ; n!=i ; n++, i-- )
{
// ci g y cng c...
}
Vng lp ny s thc hin 50 ln nu nh n v i khng b thay i
trong thn vng lp:

Cc lnh r nhnh v lnh nhy
Lnh break.
S dng break chng ta c th thot khi vng lp ngay c khi iu kin
n kt thc cha c tho mn. Lnh ny c th c dng kt thc
mt vng lp khng xc nh hay buc n phi kt thc gia chng thay v
kt thc mt cch bnh thng. V d, chng ta s dng vic m ngc
trc khi n kt thc:
// break loop example
#include <iostream.h>
int main ()
{
int n;
10, 9, 8, 7, 6, 5, 4,
countdown aborted!
for (n=10; n>0; n--) {
cout << n << ", ";
if (n==3)
{
cout << "countdown
aborted!";
break;
}
}
return 0;
}
Lnh continue.
Lnh continue lm cho chng trnh b qua phn cn li ca vng lp v
nhy sang ln lp tip theo. V d chng ta s b qua s 5 trong phn m
ngc:
// break loop example
#include <iostream.h>
int main ()
{
for (int n=10; n>0; n--)
{
if (n==5) continue;
cout << n << ", ";
}
cout << "FIRE!";
return 0;
}
10, 9, 8, 7, 6, 4, 3, 2, 1,
FIRE!
Lnh goto.
Lnh ny cho php nhy v iu kin ti bt k im no trong chng trnh.
Ni chung bn nn trnh dng n trong chng trnh C++. Tuy nhin chng
ta vn c mt v d dng lnh goto m ngc:
// goto loop example
#include
<iostream.h>
int main ()
{
int n=10;
10, 9, 8, 7, 6, 5, 4, 3, 2, 1,
FIRE!
loop: ;
cout << n << ", ";
n--;
if (n>0) goto loop;
cout << "FIRE!";
return 0;
}
Hm exit.
Mc ch ca exit l kt thc chng trnh v tr v mt m xc nh. Dng
thc ca n nh sau
void exit (int exit code);
exit code c dng bi mt s h iu hnh hoc c th c dng bi
cc chng trnh gi. Theo quy c, m tr v 0 c ngha l chng trnh kt
thc bnh thng cn cc gi tr khc 0 c ngha l c li.
Cu trc la chn: switch.
C php ca lnh switch hi c bit mt cht. Mc ch ca n l kim tra mt
vi gi tr hng cho mt biu thc, tng t vi nhng g chng ta lm u bi
ny khi lin kt mt vi lnh if v else if vi nhau. Dng thc ca n nh sau:
switch (expression) {
case constant1:
block of instructions 1
break;
case constant2:
block of instructions 2
break;
.
.
.
default:
default block of instructions
}
N hot ng theo cch sau: switch tnh biu thc v kim tra xem n c bng
constant1 hay khng, nu ng th n thc hin block of
instructions 1 cho n khi tm thy t kho break, sau nhy n phn
cui ca cu trc la chn switch.
Cn nu khng, switch s kim tra xem biu thc c bng constant2 hay
khng. Nu ng n s thc hin block of instructions 2 cho n khi
tm thy t kho break.
Cui cng, nu gi tr biu thc khng bng bt k hng no c ch nh trn
(bn c th ch nh bao nhiu cu lnh case tu thch), chng trnh s thc hin
cc lnh trong phn default: nu n tn ti v phn ny khng bt buc phi c.
Hai on m sau l tng ng:
v d switch if-else tng ng
switch (x) {
case 1:
cout << "x is 1";
break;
case 2:
cout << "x is 2";
break;
default:
cout << "value of x
unknown";
}
if (x == 1) {
cout << "x is 1";
}
else if (x == 2) {
cout << "x is 2";
}
else {
cout << "value of x
unknown";
}
Ti ni trn rng cu trc ca lnh switch hi c bit. Ch s tn ti ca
lnh break cui mi khi lnh. iu ny l cn thit v nu khng th sau khi
thc hin block of instructions 1 chng trnh s khng nhy n cui
ca lnh switch m s thc hin cc khi lnh tip theo cho n khi n tm thy
lnh break u tin. iu ny khin cho vic t cp ngoc nhn { } trong mi
trng hp l khng cn thit v c th c dng khi bn mun thc hin mt
khi lnh cho nhiu trng hp khc nhau, v d:
switch (x) {
case 1:
case 2:
case 3:
cout << "x is 1, 2 or 3";
break;
default:
cout << "x is not 1, 2 nor 3";
}
Ch rng lnh switch ch c th c dng so snh mt biu thc vi cc
hng. V vy chng ta khng th t cc bin (case (n*2):) hay cc khong
(case (1..3):) v chng khng phi l cc hng hp l.
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-
TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm;
BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM:
windowtext 3pt solid">
Nu bn cn kim tra cc khong hay nhiu gi tr khng phi l hng s hy kt
hp cc lnh if v else if

Bi 5 : Hm (I)
Hm l mt khi lnh c thc hin khi n c gi t mt im khc ca
chng trnh. Dng thc ca n nh sau:
type name ( argument1, argument2, ...)
statement
trong :
type l kiu d liu c tr v ca hm
name l tn gi ca hm.
arguments l cc tham s (c nhiu bao nhiu cng c tu theo nhu cu). Mt
tham s bao gm tn kiu d liu sau l tn ca tham s ging nh khi khai bo
bin (v d int x) v ng vai tr bn trong hm nh bt k bin no khc.
Chng dng truyn tham s cho hm khi n c gi. Cc tham s khc nhau
c ngn cch bi cc du phy.
statement l thn ca hm. N c th l mt lnh n hay mt khi lnh.
Di y l v d u tin v hm:
// function example
#include <iostream.h>

int addition (int a, int b)
{
int r;
r=a+b;
return (r);
}

int main ()
{
int z;
z = addition (5,3);
cout << "The result is " << z;
The result is 8
return 0;
}
c th hiu c on m ny, trc ht hy nh li nhng iu ni bi
u tin: mt chng trnh C++ lun bt u thc hin t hm main. V vy
chng ta bt u t y.
Chng ta c th thy hm main bt u bng vic khai bo bin z kiu int. Ngay
sau l mt li gi ti hm addition. Nu chng ta s thy s tng t
gia cu trc ca li gi hm vi khai bo ca hm:

Cc tham s c vai tr tht r rng. Bn trong hm main chng ta gi hm
addition v truyn hai gi tr: 5 v 3 tng ng vi hai tham s int a v int
b c khai bo cho hm addition.
Vo thi im hm c gi t main, quyn iu khin c chuyn sang cho
hm addition. Gi tr ca c hai tham s (5 v 3) c copy sang hai bin cc
b int a v int b bn trong hm.
Dng lnh sau:
return (r);
kt thc hm addition, v tr li quyn iu khin cho hm no gi n
(main) v tip tc chng trnh ci im m n b ngt bi li gi n
addition. Nhng thm vo , gi tr c dng vi lnh return (r) chnh l
gi tr c tr v ca hm.\

Gi tr tr v bi mt hm chnh l gi tr ca hm khi n c tnh ton. V vy
bin z s c c gi tr c tr v bi addition (5, 3), l 8.

Phm vi hot ng ca cc bin [nhc li]
Bn cn nh rng phm vi hot ng ca cc bin khai bo trong mt hm hay bt
k mt khi lnh no khc ch l hm hay khi lnh v khng th s dng
bn ngoi chng. V d, trong chng trnh v d trn, bn khng th s dng trc
tip cc bin a, b hay r trong hm main v chng l cc bin cc b ca hm
addition. Thm vo bn cng khng th s dng bin z trc tip bn trong
hm addition v n lm bin cc b ca hm main.
Tuy nhin bn c th khai bo cc bin ton cc c th s dng chng bt k
u, bn trong hay bn ngoi bt k hm no. lm vic ny bn cn khai bo
chng bn ngoi mi hm hay cc khi lnh, c ngha l ngay trong thn chng
trnh.
y l mt v d khc v hm:
// function example
#include <iostream.h>

int subtraction (int a, int b)
{
int r;
r=a-b;
return (r);
}

int main ()
{
int x=5, y=3, z;
z = subtraction (7,2);
cout << "The first result is " << z <<
'\n';
cout << "The second result is " <<
subtraction (7,2) << '\n';
cout << "The third result is " <<
subtraction (x,y) << '\n';
z= 4 + subtraction (x,y);
cout << "The fourth result is " << z
<< '\n';
return 0;
}
The first
result is 5
The second
result is 5
The third
result is 2
The fourth
result is 6
Trong trng hp ny chng ta to ra hm subtraction. Chc nng ca hm
ny l ly hiu ca hai tham s ri tr v kt qu.
Tuy nhin, nu phn tch hm main cc bn s thy chng trnh vi ln gi
n hm subtraction. Ti s dng vi cch gi khc nhau cc bn thy
cc cch khc nhau m mt hm c th c gi.
c hiu cn k v d ny bn cn nh rng mt li gi n mt hm c th hon
ton c thay th bi gi tr ca n. V d trong lnh gi hm u tin :
z = subtraction (7,2);
cout << "The first result is " << z;
Nu chng ta thay li gi hm bng gi tr ca n ( l 5), chng ta s c:
z = 5;
cout << "The first result is " << z;
Tng t nh vy
cout << "The second result is " << subtraction
(7,2);
cng cho kt qu ging nh hai dng lnh trn nhng trong trng hp ny chng
ta gi hm subtraction trc tip nh l mt tham s ca cout. Chng ta cng
c th vit:
cout << "The second result is " << 5;
v 5 l kt qu ca subtraction (7,2).
Cn vi lnh
cout << "The third result is " << subtraction
(x,y);
iu mi m duy nht y l cc tham s ca subtraction l cc bin thay v
cc hng. iu ny l hon ton hp l. Trong trng hp ny gi tr c truyn
cho hm subtraction l gi tr ca x and y.
Trng hp th t cng hon ton tng t. Thay v vit
z = 4 + subtraction (x,y);
chng ta c th vit:
z = subtraction (x,y) + 4;
cng hon ton cho kt qu tng ng. Ch rng du chm phy c t
cui biu thc ch khng cn thit phi t ngay sau li gi hm.
Cc hm khng kiu. Cch s dng void.
Nu bn cn nh c php ca mt li khai bo hm:
type name ( argument1, argument2 ...) statement
bn s thy r rng rng n bt u vi mt tn kiu, l kiu d liu s c
hm tr v bi lnh return. Nhng nu chng ta khng mun tr v gi tr no
th sao ?
Hy tng tng rng chng ta mun to ra mt hm ch hin th mt thng bo
ln mn hnh. N khng cn tr v mt gi tr no c, hn na cng khng cn
nhn tham s no ht. V vy ngi ta ngh ra kiu d liu void trong ngn
ng C. Hy xem xt chng trnh sau:
// void function example
#include <iostream.h>

void dummyfunction (void)
{
cout << "I'm a function!";
}

int main ()
{
dummyfunction ();
return 0;
}
I'm a function!
T kho void trong phn danh sch tham s c ngha l hm ny khng nhn mt
tham s no. Tuy nhin trong C++ khng cn thit phi s dng void lm iu
ny. Bn ch n gin s dng cp ngoc n ( ) l xong.
Bi v hm ca chng ta khng c mt tham s no, v vy li gi hm
dummyfunction s l :
dummyfunction ();
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-
TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in;
BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM:
windowtext 3pt solid">
Hai du ngoc n l cn thit cho trnh dch hiu l mt li gi hm ch
khng phi l mt tn bin hay bt k du hiu no khc.

Bi 6 : Hm (II)
Truyn tham s theo tham s gi tr hay tham s bin.
Cho n nay, trong tt c cc hm chng ta bit, tt c cc tham s truyn cho
hm u c truyn theo gi tr. iu ny c ngha l khi chng ta gi hm vi
cc tham s, nhng g chng ta truyn cho hm l cc gi tr ch khng phi bn
thn cc bin. V d, gi s chng ta gi hm addition nh sau:
int x=5, y=3, z;
z = addition ( x , y );
Trong trng hp ny khi chng ta gi hm addition th cc gi tr 5 and 3
c truyn cho hm, khng phi l bn thn cc bin.

n y cc bn c th hi ti: Nh vy th sao, c nh hng g u ? iu ng
ni y l khi cc bn thay i gi tr ca cc bin a hay b bn trong hm th cc
bin x v y vn khng thay i v chng u c c truyn cho hm ch c gi tr
ca chng c truyn m thi.
Hy xt trng hp bn cn thao tc vi mt bin ngoi bn trong mt hm. V
vy bn s phi truyn tham s di dng tham s bin nh trong hm
duplicate trong v d di y:
// passing parameters by reference
#include <iostream.h>

void duplicate (int& a, int& b, int& c)
{
a*=2;
b*=2;
c*=2;
}

int main ()
{
int x=1, y=3, z=7;
duplicate (x, y, z);
cout << "x=" << x << ", y=" << y << ",
z=" << z;
return 0;
}
x=2, y=6,
z=14
iu u tin lm bn ch l trong khai bo ca duplicate theo sau tn kiu
ca mi tham s u l du v (&), bo hiu rng cc tham s ny c truyn
theo tham s bin ch khng phi tham s gi tr.
Khi truyn tham s di dng tham s bin chng ta ang truyn bn thn bin
v bt k s thay i no m chng ta thc hin vi tham s bn trong hm s
nh hng trc tip n bin .
Trong v d trn, chng ta lin kt a, b v c vi cc tham s khi gi hm (x, y
v z) v mi s thay i vi a bn trong hm s nh hng n gi tr ca x v
hon ton tng t vi b v y, c v z.
Kiu khai bo tham s theo dng tham s bin s dng du v (&) ch c trong
C++. Trong ngn ng C chng ta phi s dng con tr lm vic tng t nh
th.
Truyn tham s di dng tham s bin cho php mt hm tr v nhiu hn mt
gi tr. V d, y l mt hm tr v s lin trc v lin sau ca tham s u tin.
// more than one returning value
#include <iostream.h>

void prevnext (int x, int& prev,
int& next)
{
prev = x-1;
next = x+1;
}

int main ()
{
int x=100, y, z;
prevnext (x, y, z);
cout << "Previous=" << y << ",
Next=" << z;
return 0;
}
Previous=99,
Next=101
Gi tr mc nh ca tham s.
Khi nh ngha mt hm chng ta c th ch nh nhng gi tr mc nh s c
truyn cho cc i s trong trng hp chng b b qua khi hm c gi. lm
vic ny n gin ch cn gn mt gi tr cho i s khi khai bo hm. Nu gi tr
ca tham s vn c ch nh khi gi hm th gi tr mc nh s b b qua. V
d:
// default values in functions
#include <iostream.h>

int divide (int a, int b=2)
{
int r;
r=a/b;
return (r);
}

int main ()
{
cout << divide (12);
cout << endl;
cout << divide (20,4);
return 0;
}
6
5
Nhng chng ta thy trong thn chng trnh, c hai li gi hm divide. Trong
lnh u tin:
divide (12)
chng ta ch dng mt tham s nhng hm divide cho php n hai. Bi vy
hm divide s t cho tham s th hai gi tr bng 2 v l gi tr mc nh ca
n (ch phn khai bo hm c kt thc bi int b=2). V vy kt qu s l 6
(12/2).
Trong lnh th hai:
divide (20,4)
c hai tham s, bi vy gi tr mc nh s c b qua. Kt qu ca hm s l 5
(20/4).
Qu ti cc hm.
Hai hm c th c cng tn nu khai bo tham s ca chng khc nhau, iu ny
c ngha l bn c th t cng mt tn cho nhiu hm nu chng c s tham s
khc nhau hay kiu d liu ca cc tham s khc nhau (hay thm ch l kiu d
liu tr v khc nhau). V d:
// overloaded function
#include <iostream.h>

int divide (int a, int b)
{
return (a/b);
}

float divide (float a, float b)
{
return (a/b);
}

int main ()
{
int x=5,y=2;
float n=5.0,m=2.0;
cout << divide (x,y);
cout << "\n";
cout << divide (n,m);
return 0;
}
2
2.5
Trong v d ny chng ta nh ngha hai hm c cng tn nhng mt hm dng hai
tham s kiu int v hm cn li dng kiu float. Trnh bin dch s bit cn
phi gi hm no bng cch phn tch kiu tham s khi hm c gi.
n gin ti vit c hai hm u c m lnh nh nhau nhng iu ny khng
bt buc. Bn c th xy dng hai hm c cng tn nhng hot ng hon ton
khc nhau.
Cc hm inline.
Ch th inline c th c t trc khao bo ca mt hm ch r rng li gi
hm s c thay th bng m lnh ca hm khi chng trnh c dch. Vic ny
tng ng vi vic khai bo mt macro, li ch ca n ch th hin vi cc hm
rt ngn, tc chy chng trnh s c ci thin v n khng phi gi mt th
tc con.
Cu trc ca n nh sau:
inline type name ( arguments ... ) { instructions ... }
li gi hm cng nh bt k mt hm no khc. Khng cn thit phi t t kho
inline trong lnh gi, ch cn trong li khai bo hm l .
qui.
Cc hm c th gi chnh n. iu ny c th c ch vi mt s tc v nh l mt
s phng php sp xp hay tnh giai tha ca mt s. V d, tnh giai tha ca
mt s (n), cng thc ton hc ca n nh sau:
n! = n * (n-1) * (n-2) * (n-3) ... * 1
v mt hm qui tnh ton s nh sau:
// factorial calculator
#include <iostream.h>

long factorial (long a)
{
if (a > 1)
return (a * factorial (a-1));
else
return (1);
}

int main ()
{
long l;
cout << "Type a number: ";
cin >> l;
cout << "!" << l << " = " << factorial
(l);
return 0;
}
Type a number:
9
!9 = 362880
Ch trong hm factorial chng ta c th lnh gi chnh n nhng ch khi
tham s ln hn 1, nu khng th hm s thc hin mt vng lp v hn v sau khi
n 0 n s tip tc nhn c nhng s m.
Hm ny c mt hn ch l kiu d liu m n dng (long) khng cho php tnh
giai tha qu 12!.
Khai bo mu cho hm.
Cho n gi chng ta hon ton phi nh ngha hm trc lnh gi u tin n
n, m thng l trong main, v vy hm main lun phi nm cui chng trnh.
Nu bn th lp li mt vi v d v hm trc y nhng th t hm main trc
bt k mt hm c gi t n, bn gn nh chc chn s nhn c thng bo li.
Nguyn nhn l mt hm phi c khai bo trc khi n c gi nh nhnggx
g chng ta lm trng tt c cc v d.
Nhng c mt cch khc trnh phi vit tt c m chng trnh trc khi chng
c th c dng trong main hay bt k mt hm no khc. chnh l khai bo
mu cho hm. Cch ny bao gm vic khai bo hm mt cch ngn gn nhng
cho trnh dch c th bit cc tham s v kiu d liu tr v ca hm.
Dng ca n nh sau:
type name ( argument_type1, argument_type2,
...);
y chnh l phn u ca nh ngha hm, ngoi tr:
N khng c bt k lnh no cho hm. iu ny c ngha l n khng bao gm
thn hm vi tt c cc lnh thng c bc trong cp ngoc nhn { }.
N kt thc bng du chm phy (;).
Trong phn lit k cc tham s ch cn vit kiu ca chng l . Vic vit tn
ca cc tham s trong phn khai bo mu l khng bt buc.
V d:
// prototyping
#include <iostream.h>

void odd (int a);
void even (int a);

int main ()
{
int i;
do {
cout << "Type a number: (0 to
exit)";
cin >> i;
odd (i);
} while (i!=0);
return 0;
}

void odd (int a)
{
if ((a%2)!=0) cout << "Number
Type a number (0 to
exit): 9
Number is odd.
Type a number (0 to
exit): 6
Number is even.
Type a number (0 to
exit): 1030
Number is even.
Type a number (0 to
exit): 0
Number is even.
is odd.\n";
else even (a);
}

void even (int a)
{
if ((a%2)==0) cout << "Number
is even.\n";
else odd (a);
}
V d ny r rng khng phi l mt v d v s hiu qu. Ti chc chn rng cc
bn c th nhn c kt qu nh trn ch vi mt na s dng lnh. Tuy nhin n
gip cho chng ta thy c vic khai bo mu cc hm l nh th no. Hn na,
trong v d ny vic khai bo mu t nht mt hm l bt buc.
u tin chng ta thy khai bo mu ca hai hm odd v even:
void odd (int a);
void even (int a);
cho php hai hm ny c th c s dng trc khi chng c nh ngha hon
chnh. Tuy nhin l do c bit gii thch ti sao chng trnh ny li cn t nht
mt hm phi c khi bo mu l trong odd c mt li gi n even v trong
even c mt li gi n odd. V vy nu khng c hm no c khai bo trc
th li chc chn s xy ra.
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-
TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in;
BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM:
windowtext 3pt solid">
Rt nhiu lp trnh vin kinh nghim khuyn rng tt c cc hm nn c khai
bo mu. cng l li khuyn ca ti, nht l trong trng hp c nhiu hm
hoc chng rt di, khi vic khai bo tt c cc hm cng mt ch cho php
chng ta bit phi gi cc hm nh th no, v vy tit kim c thi gian.

Bi 7 : Mng
Mng l mt dy cc phn t c cng kiu c t lin tip trong b nh v c
th truy xut n tng phn t bng cch thm mt ch s vo sau tn ca mng.
iu ny c ngha l, v d, chng ta c th lu 5 gi tr kiu int m khng cn
phi khai bo 5 bin khc nhau.V d, mt mng cha 5 gi tr nguyn kiu int c
tn l billy c th c biu din nh sau:

trong mi mt trng biu din mt phn t ca mng, trong trng hp ny l
cc gi tr nguyn kiu int. Chng c nh s t 0 n 4 v phn t u tin
ca mng lun l 0 bt k di ca n l bao nhiu.
Nh bt k bin no khc, mt mng phi c khai bo trc khi c th s dng.
Mt khai bo in hnh cho mt mng trong C++ nh sau:
type name [elements];

trong type l mt kiu d liu hp l (int, float...), name l mt tn bin hp
l v trng elements ch nh mng s cha bao nhiu phn t
V vy, khai bo billy nh trnh by trn chng ta ch cn mt dng n
gin nh sau:
int billy [5];
Ch : Trng elements bn trong cp ngoc [] phi l mt gi tr hng khi khai
bo mt mng, v mng l mt khi nh tnh c kch c xc nh v trnh bin dch
phi c kh nng xc nh xem cn bao nhiu b nh cp pht cho mng trc
khi cc lnh c th c thc hin.
Khi to mt mng.
Khi khai bo mt mng vi tm hot ng a phng (trong mt hm), theo mc
nh n s khng c khi to, v vy ni dung ca n l khng xc nh cho n
khi chng ra lu cc gi tr ln .

Nu chng ta khai bo mt mng ton cc (bn ngoi tt c cc hm) n s c
khi to v tt c cc phn t c t bng 0. V vy nu chng ta khai bo mng
ton cc:

int billy [5];

mi phn t ca billy s c khi to l 0:



Nhng thm vo , khi chng ta khai bo mt mng, chng ta c th gn cc gi
tr khi to cho tng phn t ca n. V d:

int billy [5] = { 16, 2, 77, 40, 12071 };

lnh trn s khai bo mt mng nh sau:



S phn t trong mng m chng ta khi to vi cp ngoc nhn { } phi bng s
phn t ca mng c khai bo vi cp ngoc vung [ ]. Bi v iu ny c
th c coi l mt s lp li khng cn thit nn C++ cho php trng gia cp
ngoc vung, kch thc ca mng c xc nh bng s gi tr gia cp ngoc
nhn.
Truy xut n cc phn t ca mng.
bt k im no ca chng trnh trong tm hot ng ca mng, chng ta c th
truy xut tng phn t ca mng c hay chnh sa nh l i vi mt bin bnh
thng. Cu trc ca n nh sau:
name[index]
Nh trong v d trc ta c mng billy gm 5 phn t c kiu int, chng ta c
th truy xut n tng phn t ca mng nh sau:

V d, lu gi tr 75 vo phn t th ba ca billy ta vit nh sau:
billy[2] = 75;
v, v d, gn gi tr ca phn t th 3 ca billy cho bin a, chng ta vit:
a = billy[2];
V vy, xt v mi phng din, biu thc billy[2] ging nh bt k mt bin
kiu int.
Ch rng phn t th ba ca billy l billy[2], v mng bt u t ch s 0.
V vy, phn t cui cng s l billy[4]. V vy nu chng ta vit billy[5],
chng ta s truy xut n phn t th 6 ca mng v vt qu gii hn ca mng.
Trong C++, vic vt qu gii hn ch s ca mng l hon ton hp l, tuy nhin
n c th gy ra nhng vn thc s kh pht hin bi v chng khng to ra
nhng li trong qu trnh dch nhng chng c th to ra nhng kt qu khng
mong mun trong qu trnh thc hin. Nguyn nhn ca vic ny s c ni n
k hn khi chng ta bt u s dng con tr.
Cn phi nhn mnh rng chng ta s dng cp ngoc vung cho hai tc v: u
tin l t kch thc cho mng khi khai bo chng v th hai, ch nh ch s
cho mt phn t c th ca mng khi xem xt n n.
int billy[5]; // khai bo mt mng mi.
billy[2] = 75; // truy xut n mt phn
t ca mng.
Mt vi thao tc hp l khc vi mng:
billy[0] = a;
billy[a] = 75;
b = billy [a+2];
billy[billy[a]] = billy[2] + 5;
// v d v mng
#include <iostream.h>

int billy [] = {16, 2, 77, 40, 12071};
int n, result=0;

int main ()
{
for ( n=0 ; n<5 ; n++ )
{
result += billy[n];
}
cout << result;
return 0;
}
12206
Mng nhiu chiu.
Mng nhiu chiu c th c coi nh mng ca mng, v d, mt mng hai chiu
c th c tng tc nh l mt bng hai chiu gm cc phn t c kiu d liu
c th v ging nhau.

jimmy biu din mt mng hai chiu kch thc 3x5 c kiu int. Cch khai bo
mng ny nh sau:
int jimmy [3][5];
v, v d, cch truy xut n phn t th hai theo chiu dc v th t theo chiu
ngang trong mt biu thc nh sau:
jimmy[1][3]

(hy nh rng ch s ca mng lun bt u t 0).
Mng nhiu chiu khng b gii hn bi hai ch s (hai chiu), Chng c th cha
bao nhiu ch s ty thch mc d t kh cn phi dng n mng ln hn 3 chiu.
Hy th xem xt lng b nh m mt mng c nhiu ch s cn n. V d:
char century [100][365][24][60][60];
gn mt gi tr char cho mi giy trong mt th k, phi cn n hn 3 t gi tr
chars! Chng ta s phi cn khong 3GB RAM khai bo n.
Mng nhiu chiu thc ra l mt khi nim tru tng v chng ta c th c kt
qu tng t vi mng mt chiu bng mt thao tc n gin gia cc ch s ca
n:
int jimmy [3][5]; tng ng vi
int jimmy [15]; (3 * 5 = 15)
Di y l hai v d vi cng mt kt qu nh nhau, mt s dng mng hai chiu
v mt s dng mng mt chiu:
// multidimensional array
#include <iostream.h>

// pseudo-
multidimensional array
#include <iostream.h>
#define WIDTH 5
#define HEIGHT 3

int jimmy [HEIGHT][WIDTH];
int n,m;

int main ()
{
for (n=0;n<HEIGHT;n++)
for (m=0;m<WIDTH;m++)
{
jimmy[n][m]=(n+1)*(m+1);
}
return 0;
}

#define WIDTH 5
#define HEIGHT 3

int jimmy [HEIGHT *
WIDTH];
int n,m;

int main ()
{
for (n=0;n<HEIGHT;n++)
for (m=0;m<WIDTH;m++)
{
jimmy[n * WIDTH +
m]=(n+1)*(m+1);
}
return 0;
}
khng mt chng trnh no vit g ra mn hnh nhng c hai u gn gi tr vo
khi nh c tn jimmy theo cch sau:

Chng ta nh ngha hng (#define) n gin ha nhng chnh sa sau
ny ca chng trnh, v d, trong trng hp chng ta quyt nh tng kch thc
ca mng vi chiu cao l 4 thay v l 3, chng ta ch cn thay i dng:
#define HEIGHT 3
thnh
#define HEIGHT 4
v khng phi c thm s thay i no na i vi chng trnh.
Dng mng lm tham s.
Vo mt lc no c th chng ta cn phi truyn mt mng ti mt hm nh l
mt tham s. Trong C++, vic truyn theo tham s gi tr mt khi nh l khng
hp l, ngay c khi n c t chc thnh mt mng. Tuy nhin chng ta li c
php truyn a ch ca n, vic ny cng to ra kt qu thc t ging thao tc
trn nhng li nhanh hn nhiu v hiu qu hn.
c th nhn mng l tham s th iu duy nht chng ta phi lm khi khai bo
hm l ch nh trong phn tham s kiu d liu c bn ca mng, tn mng v cp
ngoc vung trng. V d, hm sau:
void procedure (int arg[])
nhn vo mt tham s c kiu "mng ca char" v c tn arg. truyn tham s
cho hm ny mt mng c khai bo:
int myarray [40];
ch cn gi hm nh sau:
procedure (myarray);
Di y l mt v d c th
// arrays as parameters
#include <iostream.h>

void printarray (int arg[], int length) {
for (int n=0; n<length; n++)
cout << arg[n] << " ";
cout << "\n";
}

int main ()
{
int firstarray[] = {5, 10, 15};
int secondarray[] = {2, 4, 6, 8, 10};
printarray (firstarray,3);
printarray (secondarray,5);
return 0;
}
5 10 15
2 4 6 8 10
Nh bn c th thy, tham s u tin (int arg[]) chp nhn mi mng c kiu
c bn l int, bt k di ca n l bao nhiu, v vy cn thit phi c tham s
th hai bo cho hm ny bit di ca mng m chng ta truyn cho n.
Trong phn khai bo hm chng ta cng c th dng tham s l cc mng nhiu
chiu. Cu trc ca mng 3 chiu nh sau:
base_type[][depth][depth]
v d, mt hm vi tham s l mng nhiu chiu c th nh sau:
void procedure (int myarray[][3][4])
ch rng cp ngoc vung u tin trng nhng cc cp ngoc sau th khng.
Bn lun lun phi lm vy v trnh bin dch C++ phi c kh nng xc nh
ln ca cc chiu thm vo ca mng.
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-
TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in;
BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM:
windowtext 3pt solid">
Mng, c mt chiu v nhiu chiu, khi truyn cho hm nh l mt tham s thng
l nguyn nhn gy li cho nhng lp trnh vin thiu kinh nghim. Cc bn nn
c bi 3.3. Con tr c th hiu r hn mng hot ng nh th no.

Bi 8 : Xu K T
Trong tt c cc chng trnh chng ta thy cho n gi, chng ta ch s dng
cc bin kiu s, ch dng biu din cc s. Nhng bn cnh cc bin kiu s
cn c cc xu k t, chng cho php chng ta biu din cc chui k t nh l cc
t, cu, on vn bn... Cho n gi chng ta mi ch dng chng di dng hng
ch cha quan tm n cc bin c th cha chng.
Trong C++ khng c kiu d liu c bn lu cc xu k t. c th tha mn
nhu cu ny, ngi ta s dng mng c kiu char. Hy nh rng kiu d liu ny
(char) ch c th lu tr mt k t n, bi vy n c dng to ra xu ca
cc k t n.
V d, mng sau (hay l xu k t):
char jenny [20];
c th lu mt xu k t vi di cc i l 20 k t. Bn c th tng tng n
nh sau:

Kch thc cc i ny khng cn phi lun lun dng n. V d, jenny c th
lu xu "Hello" hay "Merry christmas". V cc mng k t c th lu
cc xu k t ngn hn di ca n, trong C++ c mt quy c kt thc
mt ni dung ca mt xu k t bng mt k t null, c th c vit l '\0'.
Chng ta c th biu din jenny (mt mng c 20 phn t kiu char) khi lu tr
xu k t "Hello" v "Merry Christmas" theo cch sau:

Ch rng sau ni dung ca xu, mt k t null ('\0') c dng bo hiu kt
thc xu. Nhng mu xm biu din nhng gi tr khng xc nh.
Khi to cc xu k t.
V nhng xu k t l nhng mng bnh thng nn chng cng nh cc mng
khc. V d, nu chng ta mun khi to mt xu k t vi nhng gi tr xc nh
chng ta c th lm iu tng t nh vi cc mng khc:
char mystring[] = { 'H', 'e', 'l', 'l', 'o',
'\0' };
Tuy nhin, chng ta c th khi to gi tr cho mt xu k t bng cch khc: s
dng cc hng xu k t.
Trong cc biu thc chng ta s dng trong cc v d trong cc chng trc
cc hng xu k t xut hin vi ln. Chng c biu din trong cp ngoc kp
("), v d:
"the result is: "
l mt hng xu k t chng ta s dng mt s ch.
Khng ging nh du nhy n (') cho php biu din hng k t, cp ngoc kp
(") l hng biu din mt chui k t lin tip, v cui chui mt k t null
('\0') lun c t ng thm vo.
V vy chng ta c th khi to xu mystring theo mt trong hai cch sau y:
char mystring [] = { 'H', 'e', 'l', 'l', 'o',
'\0' };
char mystring [] = "Hello";
Trong c hai trng hp mng (hay xu k t) mystring c khai bo vi kch
thc 6 k t: 5 k t biu din Hello cng vi mt k t null.
Trc khi tip tc, ti cn phi nhc nh bn rng vic gn nhiu hng nh vic s
dng du ngoc kp (") ch hp l khi khi to mng, tc l lc khai bo mng.
Cc biu thc trong chng trnh nh:
mystring = "Hello";
mystring[] = "Hello";
l khng hp l, c cu lnh di y cng vy:
mystring = { 'H', 'e', 'l', 'l', 'o', '\0' };
Vy hy nh: Chng ta ch c th "gn" nhiu hng cho mt mng vo lc khi to
n. Nguyn nhn l mt thao tc gn (=) khng th nhn v tri l c mt mng m
ch c th nhn mt trong nhng phn t ca n. Vo thi im khi to mng l
mt trng hp c bit, v n khng thc s l mt lnh gn mc d n s dng
du bng (=).
Gn gi tr cho xu k t
V v tri ca mt lnh gn ch c th l mt phn t ca mng ch khng th l c
mng, chng ta c th gn mt xu k t cho mt mng kiu char s dng mt
phng php nh sau:
mystring[0] = 'H';
mystring[1] = 'e';
mystring[2] = 'l';
mystring[3] = 'l';
mystring[4] = 'o';
mystring[5] = '\0';
Nhng r rng y khng phi l mt phng php thc t. gn gi tr cho mt
xu k t, chng ta c th s dng lot hm kiu strcpy (string copy), hm ny
c nh ngha trong string.h v c th c gi nh sau:
strcpy (string1, string2);
Lnh ny copy ni dung ca string2 sang string1. string2 c th l mt
mng, con tr hay mt hng xu k t, bi vy lnh sau y l mt cch ng
gn xu hng "Hello" cho mystring:
strcpy (mystring, "Hello");
V d:
// setting value to string
#include <iostream.h>
#include <string.h>

int main ()
{
char szMyName [20];
strcpy (szMyName,"J. Soulie");
cout << szMyName;
return 0;
}
J. Soulie
rng chng ta phi include file <string.h> c th s dng hm
strcpy.
Mc d chng ta lun c th vit mt hm n gin nh hm setstring di
y thc hin mt thao tc ging nh strcpy:
// setting value to string
#include <iostream.h>

void setstring (char szOut [], char szIn [])
{
int n=0;
do {
szOut[n] = szIn[n];
n++;
} while (szIn[n] != 0);
}

int main ()
{
char szMyName [20];
setstring (szMyName,"J. Soulie");
cout << szMyName;
return 0;
}
J. Soulie
Mt phng thc thng dng khc gn gi tr cho mt mng l s dng trc
tip dng nhp d liu (cin). Trong trng hp ny gi tr ca xu k t c gn
bi ngi dng trong qu trnh chng trnh thc hin.
Khi cin c s dng vi cc xu k t n thng c dng vi phng thc
getline ca n, phng thc ny c th c gi nh sau:
cin.getline ( char buffer[], int length, char
delimiter = ' \n');
trong buffer (b m) l a ch ni s lu tr d liu vo (nh l mt mng
chng hn), length l di cc i ca b m (kch thc ca mng) v
delimiter l k t c dng kt thc vic nhp, mc nh - nu chng ta
khng dng tham s ny - s l k t xung dng ('\n').
V d sau y lp li tt c nhng g bn g trn bn phm. N rt n gin nhng
l mt v d cho thy bn c th s dng cin.getline vi cc xu k t nh th
no:
// cin with strings
#include <iostream.h>

int main ()
{
char mybuffer [100];
cout << "What's your name?
";
cin.getline (mybuffer,100);
cout << "Hello " << mybuffer
<< ".\n";
cout << "Which is your
favourite team? ";
cin.getline (mybuffer,100);
cout << "I like " <<
mybuffer << " too.\n";
return 0;
}
What's your name? Juan
Hello Juan.
Which is your favourite
team? Inter Milan
I like Inter Milan too.
Ch trong c hai li gi cin.getline chng ta s dng cng mt bin xu
(mybuffer). Nhng g chng trnh lm trong li gi th hai n gin l thay th
ni dung ca buffer trong li gi c bng ni dung mi.
Nu bn cn nh phn ni v giao tip vi, bn s nh rng chng ta s dng
ton t >> nhn d liu trc tip t u vo chun. Phng thc ny c th
c dng vi cc xu k t thay cho cin.getline. V d, trong chn trnh
ca chng ta, khi chng ta mun nhn d liu t ngi dng chng ta c th vit:
cin >> mybuffer;
lnh ny s lm vic nh n c nhng hn ch sau m cin.getline khng c:
N ch c th nhn nhng t n (khng nhn c c cu) v phng thc ny
s dng k t trng(bao gm c du cch, du tab v du xung dng) lm du
hiu kt thc..
N khng cho php ch nh kch thc cho b m. Chng trnh ca bn c
th chy khng n nh nu d liu vo ln hn kch c ca mng cha n.
V nhng nguyn nhn trn, khi mun nhp vo cc xu k t bn nn s dng
cin.getline thay v cin >>.
Chuyn i xu k t sang cc kiu khc.
V mt xu k t c th biu din nhiu kiu d liu khc nh dng s nn vic
chuyn i ni dung nh vy sang dng s l rt hu ch. V d, mt xu c th
mang gi tr "1977"nhng l mt chui gm 5 k t (k c k t null) v
khng d g chuyn thnh mt s nguyn. V vy th vin cstdlib (stdlib.h)
cung cp 3 macro/hm hu ch sau:
atoi: chuyn xu thnh kiu int.
atol: chuyn xu thnh kiu long.
atof: chuyn xu thnh kiu float.
Tt c cc hm ny nhn mt tham s v tr v gi tr s (int, long hoc
float). Cc hm ny khi kt hp vi phng thc getline ca cin l mt
cch ng tin cy hn phng thc cin>> c in khi yu cu ngi s dng
nhp vo mt s:
// cin and ato* functions
#include <iostream.h>
#include <stdlib.h>

int main ()
{
char mybuffer [100];
float price;
int quantity;
cout << "Enter price: ";
cin.getline (mybuffer,100);
price = atof (mybuffer);
cout << "Enter quantity: ";
cin.getline (mybuffer,100);
quantity = atoi (mybuffer);
cout << "Total price: " <<
price*quantity;
return 0;
}
Enter price:
2.75
Enter quantity:
21
Total price:
57.75
Cc hm thao tc trn chui
Th vin cstring (string.h) khng ch c hm strcpy m cn c nhiu hm
khc thao tc trn chui. Di y l gii thiu lt qua ca cc hm thng
dng nht:
strcat: char* strcat (char* dest, const char* src);
Gn thm chui src vo pha cui ca dest. Tr v dest.
strcmp: int strcmp (const char* string1, const char*
string2);
So snh hai xu string1 v string2. Tr v 0 nu hai xu l bng nhau.
strcpy: char* strcpy (char* dest, const char* src);
Copy ni dung ca src cho dest. Tr v dest.
strlen: size_t strlen (const char* string);
Tr v di ca string.
Ch : char* hon ton tng ng vi char[]
Bi 9 : Con Tr
Chng ta bit cc bin chnh l cc nh m chng ta c th truy xut di cc
tn. Cc bin ny c lu tr ti nhng ch c th trong b nh. i vi chng
trnh ca chng ta, b nh my tnh ch l mt dy gm cc nh 1 byte, mi c
mt a ch xc nh.
Mt s m hnh tt i vi b nh my tnh chnh l mt ph trong mt thnh ph.
Trn mt ph tt c cc ngi nh u c nh s tun t vi mt ci tn duy
nht nn nu chng ta ni n s 27 ph Trn Hng o th chng ta c th tm
c ni m khng lm ln v ch c mt ngi nh vi s nh vy.
Cng vi cch t chc tng t nh vic nh s cc ngi nh, h iu hnh t
chc b nh thnh nhng s n nht, tun t, nn nu chng ta ni n v tr 1776
trong b nh chng ta bit chnh xc nh v ch c mt v tr vi a ch nh
vy.
Ton t ly a ch (&).
Vo thi im m chng ta khai bo mt bin th n phi c lu tr trong mt v
tr c th trong b nh. Ni chung chng ta khng quyt nh ni no bin c
t - tht may mn rng iu c lm t ng bi trnh bin dch v h iu
hnh, nhng mt khi h iu hnh gn mt a ch cho bin th chng ta c th
mun bit bin c lu tr u.
iu ny c th c thc hin bng cch t trc tn bin mt du v (&), c
ngha l "a ch ca". V d:
ted = &andy;
s gn cho bin ted a ch ca bin andy, v khi t trc tn bin andy du v
(&) chng ta khng cn ni n ni dung ca bin m ch ni n a ch ca n
trong b nh.
Gi s rng bin andy c t nh c a ch 1776 v chng ta vit nh sau:
andy = 25;
fred = andy;
ted = &andy;
kt qu s ging nh trong s di y:

Chng ta gn cho fred ni dung ca bin andy nh chng ta lm rt ln
nhiu khc trong nhng phn trc nhng vi bin ted chng ta gn a ch
m h iu hnh lu gi tr ca bin andy, chng ta va gi s n l 1776.
Nhng bin lu tr a ch ca mt bin khc (nh ted trong v d trc) c
gi l con tr. Trong C++ con tr c rt nhiu u im v chng c s dng rt
thng xuyn, Tip theo chng ta s thy cc bin kiu ny c khai bo nh th
no.
Ton t tham chiu (*)
Bng cch s dng con tr chng ta c th truy xut trc tip n gi tr c lu
tr trong bin c tr bi n bng cch trc tn bin con tr mt du sao (*)
- y c th c dch l "gi tr c tr bi". V vy, nu chng ta vit:
beth = *ted;
(chng ta c th c n l: "beth bng gi tr c tr bi ted" beth s mang gi
tr 25, v ted bng 1776 v gi tr tr bi 1776 l 25.

Bn phi phn bit c rng ted c gi tr 1776, nhng *ted (vi mt du sao
ng trc) tr ti gi tr c lu tr trong a ch 1776, l 25. Hy ch s
khc bit gia vic c hay khng c du sao tham chiu.
beth = ted; // beth bng ted ( 1776 )
beth = *ted; // beth bng gi tr c tr
bi( 25 )
Ton t ly a ch (&)
N c dng nh l mt tin t ca bin v c th c dch l "a ch ca", v
vy &variable1 c th c c l "a ch ca variable1".
Ton t tham chiu (*)
N ch ra rng ci cn c tnh ton l ni dung c tr bi biu thc c coi
nh l mt a ch. N c th c dch l "gi tr c tr bi"..
*mypointer c c l "gi tr c tr bi mypointer".
Vo lc ny, vi nhng v d vit trn
andy = 25;
ted = &andy;
bn c th d dng nhn ra tt c cc biu thc sau l ng:
andy == 25
&andy == 1776
ted == 1776
*ted == 25
Khai bo bin kiu con tr
V con tr c kh nng tham chiu trc tip n gi tr m chng tr ti nn cn
thit phi ch r kiu d liu no m mt bin con tr tr ti khai bo n. V vy,
khai bo ca mt bin con tr s c mu sau:
type * pointer_name;
trong type l kiu d liu c tr ti, khng phi l kiu ca bn thn con
tr. V d:
int * number;
char * character;
float * greatnumber;
l ba khai bo ca con tr. Mi bin u tr ti mt kiu d liu khc nhau
nhng c ba u l con tr v chng u chim mt lng b nh nh nhau (kch
thc ca mt bin con tr ty thuc vo h iu hnh). nhng d liu m chng
tr ti khng chim lng b nh nh nhau, mt kiu int, mt kiu char v ci
cn li kiu float.
Ti phi nhn mnh li rng du sao (*) m chng ta t khi khai bo mt con tr
ch c ngha rng: l mt con tr v hon ton khng lin quan n ton t tham
chiu m chng ta xem xt trc . n gin ch l hai tc v khc nhau
c biu din bi cng mt du.
// my first pointer
#include <iostream.h>

int main ()
{
int value1 = 5, value2 = 15;
int * mypointer;

mypointer = &value1;
*mypointer = 10;
mypointer = &value2;
*mypointer = 20;
cout << "value1==" << value1 << "/
value2==" << value2;
return 0;
}
value1==10 /
value2==20
Ch rng gi tr ca value1 v value2 c thay i mt cch gin tip. u
tin chng ta gn cho mypointer a ch ca value1 dng ton t ly a ch
(&) v sau chng ta gn 10 cho gi tr c tr bi mypointer, l gi tr
c tr bi value1 v vy chng ta sa bin value1 mt cch gin tip
bn c th thy rng mt con tr c th mang mt vi gi tr trong cng mt
chng trnh chng ta s lp li qu trnh vi value2 v vi cng mt con tr.
y l mt v d phc tp hn mt cht:
// more pointers
#include <iostream.h>

int main ()
{
int value1 = 5, value2 = 15;
int *p1, *p2;

p1 = &value1; // p1 = a ch ca
value1
p2 = &value2; // p2 = a ch ca
value2
*p1 = 10; // gi tr tr bi
p1 = 10
*p2 = *p1; // gi tr tr bi
p2 = gi tr tr bi p1
p1 = p2; // p1 = p2 (php
gn con tr)
*p1 = 20; // gi tr tr bi
p1 = 20

cout << "value1==" << value1 << "/
value2==" << value2;
return 0;
}
value1==10 /
value2==20
Mt dng c th gy s ch ca bn l:
int *p1, *p2;
dng ny khai bo hai con tr bng cch t du sao (*) trc mi con tr. Nguyn
nhn l kiu d liu khai bo cho c dng l int v v theo th t t phi sang
tri, du sao c tnh trc tn kiu. Chng ta ni n iu ny trong bi 1.3:
Cc ton t.
Con tr v mng.
Trong thc t, tn ca mt mng tng ng vi a ch phn t u tin ca n,
ging nh mt con tr tng ng vi a ch ca phn t u tin m n tr ti,
v vy thc t chng hon ton nh nhau. V d, cho hai khai bo sau:
int numbers [20];
int * p;
lnh sau s hp l:
p = numbers;
y p v numbers l tng ng v chng c cng thuc tnh, s khc bit
duy nht l chng ta c th gn mt gi tr khc cho con tr p trong khi numbers
lun tr n phn t u tin trong s 20 phn t kiu int m n c nh ngha
vi. V vy, khng ging nh p - l mt bin con tr bnh thng, numbers l
mt con tr hng. Lnh gn sau y l khng hp l:
numbers = p;
bi v numbers l mt mng (con tr hng) v khng c gi tr no c th c
gn cho cc hng.
V con tr cng c mi tnh cht ca mt bin nn tt c cc biu thc c con tr
trong v d di y l hon ton hp l:
// more pointers
#include <iostream.h>

int main ()
{
int numbers[5];
int * p;
p = numbers; *p = 10;
p++; *p = 20;
p = &numbers[2]; *p = 30;
p = numbers + 3; *p = 40;
p = numbers; *(p+4) = 50;
for (int n=0; n<5; n++)
cout << numbers[n] << ", ";
return 0;
}
10, 20, 30, 40, 50,
Trong bi "mng" chng ta dng du ngoc vung ch ra phn t ca mng
m chng ta mun tr n. Cp ngoc vung ny c coi nh l ton t offset v
ngha ca chng khng i khi c dng vi bin con tr. V d, hai biu thc
sau y:
a[5] = 0; // a [offset of 5] = 0
*(a+5) = 0; // pointed by (a+5) = 0
l hon ton tng ng v hp l bt k a l mng hay l mt con tr.
Khi to con tr
Khi khai bo con tr c th chng ta s mun ch nh r rng chng s tr ti bin
no,
int number;
int *tommy = &number;
l tng ng vi:
int number;
int *tommy;
tommy = &number;
Trong mt php gn con tr chng ta phi lun lun gn a ch m n tr ti ch
khng phi l gi tr m n tr ti. Bn cn phi nh rng khi khai bo mt bin
con tr, du sao (*) c dng ch ra n l mt con tr, v hon ton khc vi
ton t tham chiu. l hai ton t khc nhau mc d chng c vit vi cng
mt du. V vy, cc cu lnh sau l khng hp l:
int number;
int *tommy;
*tommy = &number;
Nh i vi mng, trnh bin dch cho php chng ta khi to gi tr m con tr tr
ti bng gi tr hng vo thi im khai bo bin con tr:
char * terry = "hello";
trong trng hp ny mt khi nh tnh c dnh cha "hello" v mt con
tr tr ti k t u tin ca khi nh ny ( l k t h') c gn cho terry.
Nu "hello" c lu ti a ch 1702, lnh khai bo trn c th c hnh dung
nh th ny:

cn phi nhc li rng terry mang gi tr 1702 ch khng phi l 'h' hay
"hello".
Bin con tr terry tr ti mt xu k t v n c th c s dng nh l i vi
mt mng (hy nh rng mt mng ch n thun l mt con tr hng). V d, nu
chng ta mun thay k t 'o' bng mt du chm than, chng ta c th thc hin
vic bng hai cch:
terry[4] = '!';
*(terry+4) = '!';
hy nh rng vit terry[4] l hon ton ging vi vit *(terry+4) mc d
biu thc thng dng nht l ci u tin. Vi mt trong hai lnh trn xu do
terry tr n s c gi tr nh sau:

Cc php tnh s hc vi pointer
Vic thc hin cc php tnh s hc vi con tr hi khc so vi cc kiu d liu s
nguyn khc. Trc ht, ch php cng v tr l c php dng. Nhng c cng
v tr u cho kt qu ph thuc vo kch thc ca kiu d liu m bin con tr
tr ti.
Chng ta thy c nhiu kiu d liu khc nhau tn ti v chng c th chim ch
nhiu hn hoc t hn cc kiu d liu khc. V d, trong cc kiu s nguyn, char
chim 1 byte, short chim 2 byte v long chim 4 byte.
Gi s chng ta c 3 con tr sau:
char *mychar;
short *myshort;
long *mylong;
v chng ln lt tr ti nh 1000, 2000 and 3000.
Nu chng ta vit
mychar++;
myshort++;
mylong++;
mychar - nh bn mong i - s mang gi tr 1001. Tuy nhin myshort s
mang gi tr 2002 v mylong mang gi tr 3004. Nguyn nhn l khi cng thm
1 vo mt con tr th n s tr ti phn t tip theo c cng kiu m n c
nh ngha, v vy kch thc tnh bng byte ca kiu d liu n tr ti s c
cng thm vo bin con tr.

iu ny ng vi c hai php ton cng v tr i vi con tr. Chng ta cng
hon ton thu c kt qu nh trn nu vit:
mychar = mychar + 1;
myshort = myshort + 1;
mylong = mylong + 1;
Cn phi cnh bo bn rng c hai ton t tng (++) v gim (--) u c quyn u
tin ln hn ton t tham chiu (*), v vy biu thc sau y c th dn ti kt qu
sai:
*p++;
*p++ = *q++;
Lnh u tin tng ng vi *(p++) iu m n thc hin l tng p (a ch
nh m n tr ti ch khng phi l gi tr tr ti).
Lnh th hai, c hai ton t tng (++) u c thc hin sau khi gi tr ca *q
c gn cho *p v sau c q v p u tng ln 1. Lnh ny tng ng vi:
*p = *q;
p++;
q++;
Nh ni trong cc bi trc, ti khuyn cc bn nn dng cc cp ngoc n
trnh nhng kt qu khng mong mun.
Con tr tr ti con tr
C++ cho php s dng cc con tr tr ti cc con tr khc ging nh l tr ti d
liu. lm vic chng ta ch cn thm mt du sao (*) cho mi mc tham
chiu.
char a;
char * b;
char ** c;
a = 'z';
b = &a;
c = &b;
gi s rng a,b,c c lu cc nh 7230, 8092 and 10502, ta c th m t
on m trn nh sau:

im mi trong v d ny l bin c, chng ta c th ni v n theo 3 cch khc
nhau, mi cch s tng ng vi mt gi tr khc nhau:
c l mt bin c kiu (char **) mang gi tr
8092
*c l mt bin c kiu (char*) mang gi tr
7230
**c l mt bin c kiu (char) mang gi tr 'z'
Con tr khng kiu
Con tr khng kiu l mt loi con tr c bit. N c th tr ti bt k loi d liu
no, t gi tr nguyn hoc thc cho ti mt xu k t. Hn ch duy nht ca n l
d liu c tr ti khng th c tham chiu ti mt cch trc tip (chng ta
khng th dng ton t tham chiu * vi chng) v di ca n l khng xc nh
v v vy chng ta phi dng n ton t chuyn kiu d liu hay php gn
chuyn con tr khng kiu thnh mt con tr tr ti mt loi d liu c th.
Mt trong nhng tin ch ca n l cho php truyn tham s cho hm m khng
cn ch r kiu
// integer increaser
#include <iostream.h>

void increase (void* data, int type)
{
switch (type)
{
case sizeof(char) : (*((char*)data))++;
break;
case sizeof(short): (*((short*)data))++;
break;
case sizeof(long) : (*((long*)data))++;
break;
}
}

int main ()
{
char a = 5;
short b = 9;
long c = 12;
increase (&a,sizeof(a));
increase (&b,sizeof(b));
increase (&c,sizeof(c));
6, 10,
13
cout << (int) a << ", " << b << ", " << c;
return 0;
}
sizeof l mt ton t ca ngn ng C++, n tr v mt gi tr hng l kch thc
tnh bng byte ca tham s truyn cho n, v d sizeof(char) bng 1 v kch
thc ca char l 1 byte.
Con tr hm
C++ cho php thao tc vi cc con tr hm. Tin ch tuyt vi ny cho php truyn
mt hm nh l mt tham s n mt hm khc. c th khai bo mt con tr tr
ti mt hm chng ta phi khai bo n nh l khai bo mu ca mt hm nhng
phi bao trong mt cp ngoc n () tn ca hm v chn du sao (*) ng trc.
// pointer to functions
#include <iostream.h>

int addition (int a, int b)
{ return (a+b); }

int subtraction (int a, int b)
{ return (a-b); }

int (*minus)(int,int) = subtraction;

int operation (int x, int y, int
(*functocall)(int,int))
{
int g;
g = (*functocall)(x,y);
return (g);
}

int main ()
{
int m,n;
m = operation (7, 5, &addition);
n = operation (20, m, minus);
cout <<n;
return 0;
8
}
Trong v d ny, minus l mt con tr ton cc tr ti mt hm c hai tham s
kiu int, con tr ny c gm tr ti hm subtraction, tt c u trn
mt dng:
int (* minus)(int,int) = subtraction;
Bi 10 : B Nh ng
Cho n nay, trong cc chng trnh ca chng ta, tt c nhng phn b nh chng
ta c th s dng l cc bin cc mng v cc i tng khc m chng ta khai
bo. Kch c ca chng l c nh v khng th thay i trong thi gian chng
trnh chy. Nhng nu chng ta cn mt lng b nh m kch c ca n ch c th
c xc nh khi chng trnh chy, v d nh trong trng hp chng ta nhn
thng tin t ngi dng xc nh lng b nh cn thit.
Gii php y chnh l b nh ng, C++ tch hp hai ton t new v delete
thc hin vic ny
Hai ton t new v delete ch c trong C++. phn sau ca bi chng ta s bit
nhng thao tc tng ng vi cc ton t ny trong C.
Ton t new v new[ ]
c th c c b nh ng chng ta c th dng ton t new. Theo sau ton t
ny l tn kiu d liu v c th l s phn t cn thit c t trong cp ngoc
vung. N tr v mt con tr tr ti u ca khi nh va c cp pht. Dng
thc ca ton t ny nh sau:
pointer = new type
hoc
pointer = new type [elements]
Biu thc u tien c dng cp pht b nh cha mt phn t c kiu type.
Lnh th hai c dng cp pht mt khi nh (mt mng) gm cc phn t
kiu type.
V d:
int * bobby;
bobby = new int [5];
trong trng hp ny, h iu hnh dnh ch cho 5 phn t kiu int trong b nh
v tr v mt con tr tr n u ca khi nh. V vy lc ny bobby tr n mt
khi nh hp l gm 5 phn t int.

Bn c th hi ti l c g khc nhau gia vic khai bo mt mng vi vic cp
pht b nh cho mt con tr nh chng ta va lm. iu quan trng nht l kch
thc ca mt mng phi l mt hng, iu ny gii hn kch thc ca mng n
kch thc m chng ta chn khi thit k chng trnh trong khi cp pht b
nh ng cho php cp pht b nh trong qu trnh chy vi kch thc bt k.
B nh ng ni chung c qun l bi h iu hnh v trong cc mi trng a
nhim c th chy mt lc vi chng trnh c mt kh nng c th xy ra l ht b
nh cp pht. Nu iu ny xy ra v h iu hnh khng th cp pht b nh
nh chng ta yu cu vi ton t new, mt con tr null (zero) s c tr v. V
vy cc bn nn kim tra xem con tr tr v bi ton t new c bng null hay
khng:
int * bobby;
bobby = new int [5];
if (bobby == NULL) {
// error assigning memory. Take measures.
};
Ton t delete.
V b nh ng ch cn thit trong mt khong thi gian nht nh, khi n khng
cn dng n na th n s c gii phng c th cp pht cho cc nhu cu
khc trong tng lai. thc hin vic ny ta dng ton t delete, dng thc
ca n nh sau:
delete pointer;
hoc
delete [] pointer;
Biu thc u tin nn c dng gii phng b nh c cp pht cho mt
phn t v lnh th hai dng gii phng mt khi nh gm nhiu phn t
(mng). Trong hu ht cc trnh dch c hai biu thc l tng ng mc d
chng l r rng l hai ton t khc nhau.
// rememb-o-matic
#include <iostream.h>
#include <stdlib.h>

How many numbers do you
want to type in? 5
Enter number : 75
Enter number : 436
int main ()
{
char input [100];
int i,n;
long * l, total = 0;
cout << "How many numbers do
you want to type in? ";
cin.getline (input,100);
i=atoi (input);
l= new long[i];
if (l == NULL) exit (1);
for (n=0; n<i; n++)
{
cout << "Enter number: ";
cin.getline (input,100);
l[n]=atol (input);
}
cout << "You have entered: ";
for (n=0; n<i; n++)
cout << l[n] << ", ";
delete[] l;
return 0;
}
Enter number : 1067
Enter number : 8
Enter number : 32
You have entered: 75,
436, 1067, 8, 32,
NULL l mt hng s c nh ngha trong th vin C++ dng biu th con tr
null. Trong trng hp hng s ny cha nh ngha bn c th t nh ngha n:
#define NULL 0
Dng 0 hay NULL khi kim tra con tr l nh nhau nhng vic dng NULL vi con
tr c s dng rt rng ri v iu ny c khuyn khch gip cho chng
trnh d c hn.
B nh ng trong ANSI-C
Ton t new v delete l c quyn C++ v chng khng c trong ngn ng C.
Trong ngn ng C, c th s dng b nh ng chng ta phi s dng th vin
stdlib.h. Chng ta s xem xt cch ny v n cng hp l trong C++ v n vn
cn c s dng trong mt s chng trnh.
Hm malloc
y l mt hm tng qut cp pht b nh ng cho con tr. Cu trc ca n
nh sau:
void * malloc (size_t nbytes);
trong nbytes l s byte chng ta mun gn cho con tr. Hm ny tr v mt
con tr kiu void*, v vy chng ta phi chuyn i kiu sang kiu ca con tr
ch, v d:
char * ronny;
ronny = (char *) malloc (10);
on m ny cp pht cho con tr ronny mt khi nh 10 byte. Khi chng ta
mun cp pht mt khi d liu c kiu khc char (ln hn 1 byte) chng ta phi
nhn s phn t mong mun vi kch thc ca chng. Tht may mn l chng ta
c ton t sizeof, ton t ny tr v kch thc ca mt kiu d liu c th.
int * bobby;
bobby = (int *) malloc (5 * sizeof(int));
on m ny cp pht cho bobby mt khi nh gm 5 s nguyn kiu int, kch c
ca kiu d liu ny c th bng 2, 4 hay hn ty thuc vo h thng m chng
trnh c dch.
Hm calloc.
calloc hot ng rt ging vi malloc, s khc nhau ch yu l khai bo mu
ca n:
void * calloc (size_t nelements, size_t size);
n s dng hai tham s thay v mt. Hai tham s ny c nhn vi nhau c
c kch thc tng cng ca khi nh cn cp pht. Thng thng tham s u
tin (nelements) l s phn t v tham s thc hai (size) l kch thc ca
mi phn t. V d, chng ta c th nh ngha bobby vi calloc nh sau:
int * bobby;
bobby = (int *) calloc (5, sizeof(int));
Mt im khc nhau na gia malloc v calloc l calloc khi to tt c cc
phn t ca n v 0.
Hm realloc.
N thay i kch thc ca khi nh c cp pht cho mt con tr.
void * realloc (void * pointer, size_t size);
tham s pointer nhn vo mt con tr c cp pht b nh hay mt con tr
null, v size ch nh kch thc ca khi nh mi. Hm ny s cp pht size
byte b nh cho con tr. N c th phi thay i v v tr ca khi nh c th
ch cho kch thc mi ca khi nh, trong trng hp ny ni dung hin thi ca
khi nh c copy ti v tr mi m bo d liu khng b mt. Con tr mi
tr ti khi nh c hm tr v. Nu khng th thay i kch thc ca khi nh
th hm s tr v mt con tr null nhng tham s pointer v ni dung ca n s
khng b thay i.
Hm free.
Hm ny gii phng mt khi nh ng c cp pht bi malloc, calloc
hoc realloc.
void free (void * pointer);
Hm ny ch c dng gii phng b nh c cp pht bi cc hm
malloc, calloc and realloc.
Bi 11 : Cc Cu Trc
Cc cu trc d liu.
Mt cu trc d liu l mt tp hp ca nhng kiu d liu khc nhau c gp li
vi mt ci tn duy nht. Dng thc ca n nh sau:
struct model_name {
type1 element1;
type2 element2;
type3 element3;
.
.
} object_name;
trong model_name l tn ca mu kiu d liu v tham s ty chn
object_name mt tn hp l cho i tng. Bn trong cp ngoc nhn l tn
cc phn t ca cu trc v kiu ca chng.
Nu nh ngha ca cu trc bao gm tham s model_name (tu chn), tham s
ny tr thnh mt tn kiu hp l tng ng vi cu trc. V d:
struct products {
char name [30];
float price;
} ;

products apple;
products orange, melon;
Chng ta nh ngha cu trc products vi hai trng: name v price, mi
trng c mt kiu khc nhau. Chng ta cng s dng tn ca kiu cu trc
(products) khai bo ba i tng c kiu : apple, orange v melon.
Sau khi c khai bo, products tr thnh mt tn kiu hp l ging cc kiu c
bn nh int, char hay short.
Trng tu chn object_name c th nm cui ca phn khai bo cu trc
dng khai bo trc tip i tng c kiu cu trc. V d, khai bo cc i
tng apple, orange v melon nh lm phn trc chng ta cng c th
lm theo cch sau:
struct products {
char name [30];
float price;
} apple, orange, melon;
Hn na, trong trng hp ny tham s model_name tr thnh tu chn. Mc d
nu model_name khng c s dng th chng ta s khng th khai bo thm
cc i tng c kiu mu ny.
Mt iu quan trng l cn phn bit r rng u l kiu mu cu trc, u l i
tng cu trc. Nu dng cc thut ng chng ta s dng vi cc bin, kiu
mu l tn kiu d liu cn i tng l cc bin.
Sau khi khai bo ba i tng c kiu l mt mu cu trc xc nh (apple,
orange and melon) chng ta c th thao tc vi cc trng to nn chng.
lm vic ny chng ta s dng mt du chm (.) chn gia tn i tng v tn
trng. V d, chng ta c th thao tc vi bt k phn t no ca cu trc nh l
i vi cc bin chun :
apple.name
apple.price
orange.name
orange.price
melon.name
melon.price
mi trng c kiu d liu tng ng: apple.name, orange.name v
melon.name c kiu char[30], v apple.price, orange.price v
melon.price c kiu float.
Chng ta tm bit apples, oranges v melons n vi mt v d v cc b phim:
// example about structures
#include <iostream.h>
#include <string.h>
#include <stdlib.h>

Enter title: Alien
Enter year: 1979

My favourite movie
is:
struct movies_t {
char title [50];
int year;
} mine, yours;

void printmovie (movies_t movie);

int main ()
{
char buffer [50];

strcpy (mine.title, "2001 A Space
Odyssey");
mine.year = 1968;

cout << "Enter title: ";
cin.getline (yours.title,50);
cout << "Enter year: ";
cin.getline (buffer,50);
yours.year = atoi (buffer);

cout << "My favourite movie is:\n
";
printmovie (mine);
cout << "And yours:\n ";
printmovie (yours);
return 0;
}

void printmovie (movies_t movie)
{
cout << movie.title;
cout << " (" << movie.year <<
")\n";
}

2001 A Space
Odyssey (1968)
And yours:
Alien (1979)
V d ny cho chng ta thy cch s dng cc phn t ca mt cu trc v bn thn
cu trc nh l cc bin thng thng. V d, yours.year l mt bin hp l c
kiu int cng nh mine.title l mt mng hp l vi 50 phn t kiu chars.
Ch rng c mine and yours u c coi l cc bin hp l kiu movie_t
khi c truyn cho hm printmovie().Hn na mt li th quan trng ca
cu trc l chng ta c th xt cc phn t ca chng mt cch ring bit hoc ton
b cu trc nh l mt khi.
Cc cu trc c s dng rt nhiu xy dng c s d liu c bit nu chng
ta xt n kh nng xy dng cc mng ca chng.
// array of structures
#include <iostream.h>
#include <stdlib.h>

#define N_MOVIES 5

struct movies_t {
char title [50];
int year;
} films [N_MOVIES];

void printmovie (movies_t movie);

int main ()
{
char buffer [50];
int n;
for (n=0; n<N_MOVIES; n++)
{
cout << "Enter title: ";
cin.getline
(films[n].title,50);
cout << "Enter year: ";
cin.getline (buffer,50);
films[n].year = atoi (buffer);
}
cout << "\nYou have entered these
movies:\n";
for (n=0; n<N_MOVIES; n++)
printmovie (films[n]);
return 0;
}

Enter title: Alien
Enter year: 1979
Enter title: Blade
Runner
Enter year: 1982
Enter title: Matrix
Enter year: 1999
Enter title: Rear
Window
Enter year: 1954
Enter title: Taxi
Driver
Enter year: 1975

You have entered
these movies:
Alien (1979)
Blade Runner (1982)
Matrix (1999)
Rear Window (1954)
Taxi Driver (1975)
void printmovie (movies_t movie)
{
cout << movie.title;
cout << " (" << movie.year <<
")\n";
}

Con tr tr n cu trc
Nh bt k cc kiu d liu no khc, cc cu trc c th c tr n bi con tr.
Quy tc hon ton ging nh i vi bt k kiu d liu c bn no:
struct movies_t {
char title [50];
int year;
};

movies_t amovie;
movies_t * pmovie;
y amovie l mt i tng c kiu movies_t v pmovie l mt con tr
tr ti i tng movies_t. OK, by gi chng ta s n vi mt v d khc, n
s gii thiu mt ton t mi:
// pointers to structures
#include <iostream.h>
#include <stdlib.h>

struct movies_t {
char title [50];
int year;
};

int main ()
{
char buffer[50];

movies_t amovie;
movies_t * pmovie;
pmovie = & amovie;

Enter title:
Matrix
Enter year: 1999

You have entered:
Matrix (1999)
cout << "Enter title: ";
cin.getline (pmovie->title,50);
cout << "Enter year: ";
cin.getline (buffer,50);
pmovie->year = atoi (buffer);

cout << "\nYou have entered:\n";
cout << pmovie->title;
cout << " (" << pmovie->year <<
")\n";

return 0;
}

on m trn gii thiu mt iu quan trng: ton t ->. y l mt ton t tham
chiu ch dng tr ti cc cu trc v cc lp (class). N cho php chng ta
khng phi dng ngoc mi khi tham chiu n mt phn t ca cu trc. Trong v
d ny chng ta s dng:
movies->title
n c th c dch thnh:
(*movies).title
c hai biu thc movies->title v (*movies).title u hp l v chng
u dng tham chiu n phn t title ca cu trc c tr bi movies.
Bn cn phn bit r rng vi:
*movies.title
n tng ng vi
*(movies.title)
lnh ny dng tnh ton gi tr c tr bi phn t title ca cu trc
movies, trong trng hp ny (title khng phi l mt con tr) n chng c
ngha g nhiu. Bn di y tng kt tt c cc kt hp c th c gia con tr
v cu trc:
Biu thc M t Tng ng vi
movies.title Phn t title ca cu trc movies
movies->title Phn t title ca cu trc c tr (*movies).title
bi movies
*movies.title
Gi tr c tr bi phn t title ca
cu trc movies
*(movies.title)
Cc cu trc lng nhau
Cc cu trc c th c t lng nhau v vy mt phn t hp l ca mt cu trc
c th l mt cu trc khc.
struct movies_t {
char title [50];
int year;
}

struct friends_t {
char name [50];
char email [50];
movies_t favourite_movie;
} charlie, maria;

friends_t * pfriends = &charlie;
V vy, sau phn khai bo trn chng ta c th s dng cc biu thc sau:
charlie.name
maria.favourite_movie.title
charlie.favourite_movie.year
pfriends->favourite_movie.year
(trong hai biu thc cui cng l tng ng).
Cc khi nim c bn v cu trc c cp n trong phn ny l hon ton
ging vi ngn ng C, tuy nhin trong C++, cu trc c m rng thm cc
chc nng ca mt lp vi tnh cht c trng l tt c cc phn t ca n u l
cng cng (public). Bn s c thm cc thng tin chi tit trong phn 4.1, Lp.
Bi 12:Cc Kiu D Liu Do Ngi Dng nh Ngha
Trong bi trc chng ta xem xt mt loi d liu c nh ngha bi ngi
dng (ngi lp trnh): cu trc. Nhng c cn nhiu kiu d liu t nh ngha
khc:
T nh ngha cc kiu d liu (typedef).
C++ cho php chng ta nh ngha cc kiu d liu ca ring mnh da trn cc
kiu d liu c. c th lm vic chng ta s s dng t kho typedef,
dng thc nh sau:
typedef existing_type new_type_name ;
trong existing_type l mt kiu d liu c bn hay bt k mt kiu d liu
nh ngha v new_type_name l tn ca kiu d liu mi. V d
typedef char C;
typedef unsigned int WORD;
typedef char * string_t;
typedef char field [50];
Trong trng hp ny chng ta nh ngha bn kiu d liu mi: C, WORD,
string_t v field kiu char, unsigned int, char* kiu char[50],
chng ta hon ton c th s dng chng nh l cc kiu d liu hp l:
C achar, anotherchar, *ptchar1;
WORD myword;
string_t ptchar2;
field name;
typedef c th hu dng khi bn mun nh ngha mt kiu d liu c dng
lp i lp li trong chng trnh hoc kiu d liu bn mun dng c tn qu di v
bn mun n c tn ngn hn.
Union
Union cho php mt phn b nh c th c truy xut di dng nhiu kiu d
liu khc nhau mc d tt c chng u nm cng mt v tr trong b nh. Phn
khai bo v s dng n tng t vi cu trc nhng chc nng th khc hon ton:
union model_name {
type1 element1;
type2 element2;
type3 element3;
.
.
} object_name;
Tt c cc phn t ca union u chim cng mt ch trong b nh. Kch thc
ca n l kch thc ca phn t ln nht. V d:
union mytypes_t {
char c;
int i;
float f;
} mytypes;
nh ngha ba phn t
mytypes.c
mytypes.i
mytypes.f
mi phn t c mt kiu d liu khc nhau. Nhng v tt c chng u nm cng
mt ch trong b nh nn bt k s thay i no i vi mt phn t s nh hng
ti tt c cc thnh phn cn li.
Mt trong nhng cng dng ca union l dng kt hp mt kiu d liu c bn
vi mt mng hay cc cu trc gm cc phn t nh hn. V d:
union mix_t{
long l;
struct {
short hi;
short lo;
} s;
char c[4];
} mix;
nh ngha ba phn t cho php chng ta truy xut n cng mt nhm 4 byte:
mix.l, mix.s v mix.c m chng ta c th s dng tu theo vic chng ta
mun truy xut n nhm 4 byte ny nh th no. Ti dng nhiu kiu d liu
khc nhau, mng v cu trc trong union bn c th thy cc cch khc nhau m
chng ta c th truy xut d liu.

Cc unions v danh
Trong C++ chng ta c th s dng cc unions v danh. Nu chng ta t mt
union trong mt cu trc m khng tn (phn i sau cp ngoc nhn {
}) union s tr thnh v danh v chng ta c th truy xut trc tip n cc phn
t ca n m khng cn n tn ca union (c cn cng khng c). V d, hy
xem xt s khc bit gia hai phn khai bo sau y:
union union v danh
struct { struct {
char title[50];
char author[50];
union {
float dollars;
int yens;
} price;
} book;
char title[50];
char author[50];
union {
float dollars;
int yens;
};
} book;
S khc bit duy nht gia hai on m ny l trong on m u tin chng ta t
tn cho union (price) cn trong ci th hai th khng. Khi truy nhp vo cc
phn t dollars v yens, trong trng hp th nht chng ta vit:
book.price.dollars
book.price.yens
cn trong trng hp th hai:
book.dollars
book.yens
Mt ln na ti nhc li rng v n l mt union, hai trng dollars v yens
u chim cng mt ch trong b nh nn chng khng th gi hai gi tr khc
nhau.
Kiu lit k (enum)
Kiu d liu lit k dng to ra cc kiu d liu cha mt ci g hi c bit
mt cht, khng phi kiu s hay kiu k t hoc cc hng true v false. Dng
thc ca n nh sau:
enum model_name {
value1,
value2,
value3,
.
.
} object_name;
V d, chng ta c th to ra mt kiu d liu mi c tn color lu tr cc
mu vi phn khai bo nh sau:
enum colors_t {black, blue, green, cyan, red,
purple, yellow, white};
Ch rng chng ta khng s dng bt k mt kiu d liu c bn no trong phn
khai bo. Chng ta to ra mt kiu d liu mi m khng da trn bt k kiu d
liu no c sn: kiu color_t, nhng gi tr c th ca kiu color_t c vit
trong cp ngoc nhn {}. V d, sau khi khai bo kiu lit k, biu thc sau s l
hp l:
colors_t mycolor;

mycolor = blue;
if (mycolor == green) mycolor = red;
Trn thc t kiu d liu lit k c dch l mt s nguyn v cc gi tr ca n l
cc hng s nguyn c ch nh. Nu iu ny khng oc ch nh, gi tr
nguyn tng ng vi phn t u tin l 0 v cc gi tr tip theo c th tng
ln 1, V vy, trong kiu d liu colors_t m chng ta nh ngha trn,
white tng ng vi 0, blue tng ng vi 1, green tng ng vi 2
v c tip tc nh th.
Nu chng ta ch nh mt gi tr nguyn cho mt gi tr no ca kiu d liu
lit k (trong v d ny l phn t u tin) cc gi tr tip theo s l cc gi tr
nguyn tip theo, v d:
enum months_t { january=1, february, march,
april,
may, june, july, august,
september, october, november,
december} y2k;
trong trng hp ny, bin y2k c kiu d liu lit k months_t c th cha mt
trong 12 gi tr t january n december v tng ng vi cc gi tr
nguyn t 1 n 12, khng phi 0 n 11 v chng ta t january bng 1
Ngun internet

You might also like