Upload
hoc-lap-trinh-c
View
245
Download
0
Embed Size (px)
Citation preview
8/14/2019 hoc lap trinh c++
1/64
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 mtchng trnh. Vy y l chng trnh u tin ca chng ta :
// my first program in C++#include int main (){cout
8/14/2019 hoc lap trinh c++
2/64
cout
8/14/2019 hoc lap trinh c++
3/64
8/14/2019 hoc lap trinh c++
4/64
c "include" v n s c dng trong chng trnh. y l cch c in s dngth vin iostream
int main ()
Dng ny tng ng vi phn bt u khai bo hm main. Hm main l im m tt ccc 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 khichng trnh bt u. Thm vo , do nguyn nhn ni trn, mi chng trnh C++ uphi tn ti mt hm main.
Theo sau main l mt cp ngoc n bi v n l mt hm. Trong C++, tt c cc hmm 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 cbao trong cc ngoc nhn ( { } ) nh trong v d ca chng ta
cout
8/14/2019 hoc lap trinh c++
5/64
Cc ch thch.
Cc ch thch c cc lp trnh vin s dng ghi ch hay m t trong cc phn cachng 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 khibt u bng /* v kt thc bng */ v c th bao gm nhiu dng. Chng ta s thmcc ch thch cho chng trnh :
/* my second program in C++with more comments */
#include
int main (){cout
8/14/2019 hoc lap trinh c++
6/64
a = b;
gn gi tr ca bin a bng gi tr ang cha trong bin b. Ch rngchng ta ch gngi trca b cho a v s thay i ca b sau s khngnh hng n gi tr ca a.
Mt thuc tnh ca ton t gn trong C++ gp phn gip n vt ln ccngn ng lp trnh khc l vic cho php v phi c th cha cc php gnkhc. 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 tonhc. iu duy nht c v hi l i vi bn l php ly phn d, k hiu bng duphn trm (%). y chnh l php ton ly phn d trong php chia hai s nguynvi 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 (+=, -=, *=, /=, %=, >>=,
8/14/2019 hoc lap trinh c++
7/64
value += increase; tng ng vivalue = value +increase;
a -= 5; tng ng vi a = a - 5;
a /= b; tng ng vi a = a / b;price *= units + 1; tng ng viprice = 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 ngvi +=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 thoc hu t, c ngha l c thvit trc tn bin (++a) hoc sau (a++) v mc d trong hai biu thc rt ngin n c cng ngha nhng trong cc thao tc khc khi m kt qu ca victng hay gim c s dng trong mt biu thc th chng c th c mt khcbit 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 tngc s dng trong biu thc; trong trng hp ngc li (a++) gi tr trong bina c tng sau khi tnh ton. Hy ch s khc bit :
V d 1 V d 2B=3;
A=++B;// A is 4, B is 4
B=3;A=B++;// A is 3, B is 4
Cc ton t quan h ( ==, !=, >, =,
8/14/2019 hoc lap trinh c++
8/64
8/14/2019 hoc lap trinh c++
9/64
Ton t logic && v || c s dng khi tnh ton hai biu thc ly ra mt ktqu duy nht. Chng tng ng vi cc ton t logicAND v OR. Kt qu cachng 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 vobiu 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 lresult2.
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 hocb.
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
^ XORLogical exclusive OR
8/14/2019 hoc lap trinh c++
10/64
~ NOT o ngc bit
> 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 sangkiu khc. C vi cch lm vic ny trong C++, cch c bn nht c tha kt ngn ng C l t trc biu thc cn chuyn i tn kiu d liu c bctrong 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 tchuyn i kiu l (int). Mt cch khc lm iu ny trong C++ l s dng ccconstructors ( mt s sch thut ng ny c dch l cu tnhng ti thy nc v khng xui tai lm) thay v dng cc ton t : t trc biu thc cnchuyn 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++ cnc 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 trv 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 sizeofl mt hng s v vy n lun lun c tnh trc khi chngtrnh thc hin.
Cc ton t khc
8/14/2019 hoc lap trinh c++
11/64
Trong C++ cn c mt s cc ton t khc, nh cc ton t lin quan n con trhay lp trnh hng i tng. Chng s c ni n c th trong cc phntng 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 noc 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, hoca = (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++ thitlp mt th t u tin gia cc ton t, khng ch ring cc ton t s hc m tt c ccton t c th xut hin trong C++. Th t u tin ca chng c lit k trong bng sautheo th t t cao xung thp.
Th t Ton t M t Associativity
1 :: scope Tri
2 () [ ] -> . sizeof Tri
3
++ -- tng/gim~ o ngc bit! NOT& * Ton t con tr(type) Chuyn i kiu+ - Dng hoc m
Phi
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
8/14/2019 hoc lap trinh c++
12/64
>>=
8/14/2019 hoc lap trinh c++
13/64
cout 88, 7, 6, 5, 4, 3, 2, 1, FIRE!
8/14/2019 hoc lap trinh c++
14/64
while (n>0) {cout > n;cout
8/14/2019 hoc lap trinh c++
15/64
kim tra kt thc vng lp. Nu bn khng nhp s 0 trong v d trn th vnglp s khng bao gi chm dt.
Vng lpfor.
Dng thc:for (initialization; condition; increase) statement;
v chc nng chnh ca n l lp li statement chng no condition cn manggi tr ng, nh trong vng lp while. Nhng thm vo , for cung cp chdnh cho lnh khi to v lnh tng. V vy vng lp ny c thit k c bitlp 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 ucho 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 nukhng vng lp kt thc v statement c b qua.3, statement c thc hin. N c th l mt lnh n hoc l mt khilnh c bao trong mt cp ngoc nhn.4, Cui cng, increase c thc hin tng bin iu khin v vnglp quay tr li bc 2.
Sau y l mt v d m ngc s dng vngfor.
// countdown using a for loop#include int main (){
for (int n=10; n>0; n--) {cout
8/14/2019 hoc lap trinh c++
16/64
// ci g y cng c...}
Vng lp ny s thc hin 50 ln nu nh n v i khng b thay i trongthn vng lp:
Cc lnh r nhnh v lnh nhy
Lnh break.
S dng breakchng ta c th thot khi vng lp ngay c khi iu kin n ktthc 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 cchbnh thng. V d, chng ta s dng vic m ngc trc khi n kt thc:
// break loop example#include int main (){
int n;for (n=10; n>0; n--) {cout 0; n--) {if (n==5) continue;cout
8/14/2019 hoc lap trinh c++
17/64
cout
8/14/2019 hoc lap trinh c++
18/64
.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 nkhi 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. Nung 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 cth ch nh bao nhiu cu lnh case tu thch), chng trnh s thc hin cc lnh trongphn 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
8/14/2019 hoc lap trinh c++
19/64
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 ifv else if
Bi 5 : Hm (I)
Hm l mt khi lnh c thc hin khi n c gi t mt im khc ca chngtrnh. 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 sbao gm tn kiu d liu sau l tn ca tham s ging nh khi khai bo bin (v dint x) v ng vai tr bn trong hm nh bt k bin no khc. Chng dng truyntham s cho hm khi n c gi. Cc tham s khc nhau c ngn cch bi cc duphy.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 int addition (int a, int b){int r;r=a+b;return (r);
}int main (){int z;z = addition (5,3);cout
8/14/2019 hoc lap trinh c++
20/64
8/14/2019 hoc lap trinh c++
21/64
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 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
8/14/2019 hoc lap trinh c++
22/64
cout
8/14/2019 hoc lap trinh c++
23/64
cout
Hai du ngoc n l cn thit cho trnh dch hiu l mt li gi hm ch khngphi l mt tn bin hay bt k du hiu no khc.
Bi 6 : Hm (II)
Truyn tham s theo tham s gi trhay tham s bin.
Cho n nay, trong tt c cc hm chng ta bit, tt c cc tham s truyn cho hm uc truyn theogi tr. iu ny c ngha l khi chng ta gi hm vi cc tham s,nhng g chng ta truyn cho hm l ccgi 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 truyncho 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 hayb bn trong hm th cc bin x v y
8/14/2019 hoc lap trinh c++
24/64
vn khng thay i v chng u c c truyn cho hm ch cgi tr ca chng ctruyn m thi.
Hy xt trng hp bn cn thao tc vi mt bin ngoi bn trong mt hm. V vy bns phi truyn tham s di dng tham s bin nh trong hm duplicate trong v d
di y:
// passing parameters by reference#include 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
8/14/2019 hoc lap trinh c++
25/64
// more than one returning value#include 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
8/14/2019 hoc lap trinh c++
26/64
chng ta ch dng mt tham s nhng hm divide cho php n hai. Bi vy hmdivide 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 nghal bn c th t cng mt tn cho nhiu hm nu chng c s tham s khc nhau haykiu d liu ca cc tham s khc nhau (hay thm ch l kiu d liu tr v khc nhau).V d:
// overloaded function#include 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
8/14/2019 hoc lap trinh c++
27/64
Ch th inline c th c t trc khao bo ca mt hm ch r rng li gi hm sc thay th bng m lnh ca hm khi chng trnh c dch. Vic ny tng ngvi 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 inlinetrong 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 sphng 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 long factorial (long a){if (a > 1)return (a * factorial (a-1));
elsereturn (1);}int main (){long l;cout > l;cout
8/14/2019 hoc lap trinh c++
28/64
Khai bo mu cho hm.
Cho n gi chng ta hon ton phi nh ngha hm trc lnh gi u tin n n, mthng l trongmain, v vy hmmain lun phi nm cui chng trnh. Nu bn th lpli mt vi v d v hm trc y nhng th t hmmain trc bt k mt hm c
gi t n, bn gn nh chc chn s nhn c thng bo li. Nguyn nhn l mt hmphi c khai bo trc khi n c gi nh nhnggx g chng ta lm trng tt c ccv d.
Nhng c mt cch khc trnh phi vit tt c m chng trnh trc khi chng c thc dng trongmain 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 cth 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 gmthn 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 void odd (int a);void even (int a);int main (){int i;do {
cout > i;odd (i);
} while (i!=0);return 0;
}void odd (int a){if ((a%2)!=0) cout
8/14/2019 hoc lap trinh c++
29/64
odd.\n";else even (a);
}void even (int a){
if ((a%2)==0) cout
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 cchm 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 truyxut 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 khaibo 5 bin khc nhau.V d, mt mng cha 5 gi tr nguyn kiu int c tn l billy cth c biu din nh sau:
8/14/2019 hoc lap trinh c++
30/64
trong mi mt trng biu din mt phn t ca mng, trong trng hp ny l ccgi tr nguyn kiu int. Chng c nh s t 0 n 4 v phn t u tin ca mnglun 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 vtrng 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 nhsau:
int billy [5];
Ch : Trng elements bn trong cp ngoc [] phi l mt gi tr hng khi khai bo mtmng, v mng l mt khi nh tnh c kch c xc nh v trnh bin dch phi c khnng xc nh xem cn bao nhiu b nh cp pht cho mng trc khi cc lnh c thc 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 ralu cc gi tr ln .
Nu chng ta khai bo mt mng ton cc (bn ngoi tt c cc hm) n s c khi tov 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:
8/14/2019 hoc lap trinh c++
31/64
Nhng thm vo , khi chng ta khai bo mt mng, chng ta c th gn cc gi tr khito 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 phnt ca mng c khai bo vi cp ngoc vung [ ]. Bi v iu ny c th c coil mt s lp li khng cn thit nn C++ cho php trng gia cp ngoc vung, kchthc 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 truyxut 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 truyxut 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;
8/14/2019 hoc lap trinh c++
32/64
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 thcbilly[2] ging nh bt k mt bin kiu int.
Ch rng phn t th ba cabilly lbilly[2], v mng bt u t ch s 0. V vy,phn t cui cng s lbilly[4]. V vy nu chng ta vitbilly[5], chng ta s truyxut 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 cth gy ra nhng vn thc s kh pht hin bi v chng khng to ra nhng li trongqu trnh dch nhng chng c th to ra nhng kt qu khng mong mun trong qutrnh thc hin. Nguyn nhn ca vic ny s c ni n k hn khi chng ta bt u sdng con tr.
Cn phi nhn mnh rng chng ta s dng cp ngoc vung cho hai tc v: u tin lt kch thc cho mng khi khai bo chng v th hai, ch nh ch s cho mt phnt 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 camng.
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 int billy [] = {16, 2, 77, 40,12071};int n, result=0;int main (){for ( n=0 ; n
8/14/2019 hoc lap trinh c++
33/64
Mng nhiu chiu c th c coi nh mng ca mng, v d, mt mng hai chiu c thc tng tc nh l mt bng hai chiu gm cc phn t c kiu d liu c th vging nhau.
jimmy biu din mt mng hai chiu kch thc 3x5 c kiu int. Cch khai bo mngny 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 ngangtrong 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 baonhiu ch s ty thch mc d t kh cn phi dng n mng ln hn 3 chiu. Hy thxem 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 qutng t vi mng mt chiu bng mt thao tc n gin gia cc ch s ca n:
int jimmy [3][5]; tng ng viint jimmy [15]; (3 * 5 = 15)
Di y l hai v d vi cng mt kt qu nh nhau, mt s dng mng hai chiu vmt s dng mng mt chiu:
// multidimensional array // pseudo-multidimensional array
8/14/2019 hoc lap trinh c++
34/64
#include #define WIDTH 5#define HEIGHT 3int jimmy [HEIGHT][WIDTH];
int n,m;int main (){for (n=0;n
8/14/2019 hoc lap trinh c++
35/64
c th nhn mng l tham s th iu duy nht chng ta phi lm khi khai bo hm lch nh trong phn tham s kiu d liu c bn ca mng, tn mng v cp ngoc vungtrng. 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 chohm 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 void printarray (int arg[], intlength) {for (int n=0; n
8/14/2019 hoc lap trinh c++
36/64
8/14/2019 hoc lap trinh c++
37/64
Ch rng sau ni dung ca xu, mt k t null ('\0') c dng bo hiu kt thcxu. 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. Vd, nu chng ta mun khi to mt xu k t vi nhng gi tr xc nh chng ta c thlm 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 cchng xu k t.
Trong cc biu thc chng ta s dng trong cc v d trong cc chng trc cc hngxu 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 (") lhng biu din mt chui k t lin tip, v cui chui mt k t null ('\0') lun ct ng thm vo.
V vy chng ta c th khi to xumystring 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 6k 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 dngdu ngoc kp (") ch hp l khi khi to mng, tc l lc khai bo mng. Cc biu thctrong chng trnh nh:
mystring = "Hello";mystring[] = "Hello";
l khng hp l, c cu lnh di y cng vy:
8/14/2019 hoc lap trinh c++
38/64
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 thnhn 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 phpnh 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 kt, chng ta c th s dng lot hm kiu strcpy (string copy), hm ny c nhngha 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, contr hay mt hng xu k t, bi vy lnh sau y l mt cch ng gn xu hng
"Hello" chomystring:
strcpy (mystring, "Hello");
V d:
// setting value to string#include #include
int main (){
char szMyName [20];strcpy (szMyName,"J. Soulie");cout
8/14/2019 hoc lap trinh c++
39/64
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
void setstring (char szOut [], charszIn []){int n=0;do {
szOut[n] = szIn[n];n++;
} while (szIn[n] != 0);}
int main (){char szMyName [20];
setstring (szMyName,"J. Soulie");cout
8/14/2019 hoc lap trinh c++
40/64
".\n";cout nhn d liu trc tip t u vo chun. Phng thc ny c th c dng vi ccxu k t thay cho cin.getline. V d, trong chn trnh ca chng ta, khi chng tamun 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 nys dng k t trng(bao gm c du cch, du tab v du xung dng) lm duhiu kt thc..
N khng cho php ch nh kch thc cho b m. Chng trnh ca bn c thchy 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 dngcin.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 chuyni 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 thnhmt s nguyn. V vy th vin cstdlib (stdlib.h) cung cp 3 macro/hm hu chsau:
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). Cchm ny khi kt hp vi phng thc getline ca cin l mt cch ng tin cy hnphng thc cin>>c in khi yu cu ngi s dng nhp vo mt s:
8/14/2019 hoc lap trinh c++
41/64
8/14/2019 hoc lap trinh c++
42/64
Cng vi cch t chc tng t nh vic nh s cc ngi nh, h iu hnh t chc bnh thnh nhng s n nht, tun t, nn nu chng ta ni n v tr 1776 trong b nhchng 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 cth trong b nh. Ni chung chng ta khng quyt nh ni no bin c t - thtmay mn rng iu c lm t ng bi trnh bin dch v h iu hnh, nhngmt 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 teda 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 bnh.
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 fredni dung ca bin andy nh chng ta lm rt ln nhiu khc
trong nhng phn trc nhng vi bin tedchng ta gn a chm h iu hnh lugi 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 lcon tr. Trong C++ con tr c rt nhiu u im v chng c s dng rt thngxuyn, Tip theo chng ta s thy cc bin kiu ny c khai bo nh th no.
8/14/2019 hoc lap trinh c++
43/64
Ton t tham chiu (*)
Bng cch s dng con tr chng ta c th truy xut trc tip n gi tr c lu trtrong bin c tr bi n bng cch trc tn bin con tr mt du sao (*) - y cth 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, vtedbng 1776 v gi tr tr bi 1776 l 25.
Bn phi phn bit c rng tedc gi tr 1776, nhng *ted(vi mt du sao ngtrc) tr ti gi tr c lu tr trong a ch 1776, l 25. Hy ch s khc bit giavic c hay khng c du sao tham chiu.
beth = ted; // beth bng ted ( 1776 )beth = *ted; // beth bnggi 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 lmt 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
8/14/2019 hoc lap trinh c++
44/64
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 phich r kiu d liu no m mt bin con tr tr ti khai bo n. V vy, khai bo ca mtbin 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 cba u l con tr v chng u chim mt lng b nh nh nhau (kch thc ca mtbin con tr ty thuc vo h iu hnh). nhng d liu m chng tr ti khng chimlng 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 cngha rng: l mt con tr v hon ton khng lin quan n ton t tham chiu mchng ta xem xt trc . n gin ch l hai tc v khc nhau c biu din bicng mt du.
// my first pointer
#include
int main (){int value1 = 5, value2 = 15;int * mypointer;
mypointer = &value1;*mypointer = 10;mypointer = &value2;*mypointer = 20;cout
8/14/2019 hoc lap trinh c++
45/64
bn c th thy rng mt con tr c th mang mt vi gi tr trong cng mt chngtrnh chng ta s lp li qu trnh vivalue2 v vi cng mt con tr.
y l mt v d phc tp hn mt cht:
// more pointers#include
int main (){int value1 = 5, value2 = 15;int *p1, *p2;
p1 = &value1; // p1 = a chca value1p2 = &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 p1p1 = p2; // p1 = p2
(php gn con tr)*p1 = 20; // gi tr tr
bi p1 = 20cout
8/14/2019 hoc lap trinh c++
46/64
8/14/2019 hoc lap trinh c++
47/64
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 khngphi 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 lnhsau 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 trti 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 mtmng (hy nh rng mt mng ch n thun l mt con tr hng). V d, nu chng tamun thay k t 'o' bng mt du chm than, chng ta c th thc hin vic bng haicch:
terry[4] = '!';*(terry+4) = '!';
hy nh rng vit terry[4] l hon ton ging vi vit *(terry+4) mc d biu thcthng dng nht l ci u tin. Vi mt trong hai lnh trn xu do terry tr n s cgi tr nh sau:
8/14/2019 hoc lap trinh c++
48/64
8/14/2019 hoc lap trinh c++
49/64
*p++;*p++ = *q++;
Lnh u tin tng ng vi *(p++) iu m n thc hin l tngp (a ch nh mn 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 gncho *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 trnhnhng 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 nh7230, 8092 and 10502, ta c th m t on mtrn nh sau:
im mi trong v d ny l bin c, chng ta c th ni v n theo 3 cch khc nhau, micch 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
8/14/2019 hoc lap trinh c++
50/64
c tr ti khng th c tham chiu ti mt cch trc tip (chng ta khng th dngton t tham chiu * vi chng) v di ca n l khng xc nh v v vy chng taphi dng n ton t chuyn kiu d liu hay php gn chuyn con tr khng kiuthnh 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 chr kiu
// integer increaser#include
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));cout
8/14/2019 hoc lap trinh c++
51/64
8/14/2019 hoc lap trinh c++
52/64
v mt con tr tr ti u ca khi nh va c cp pht. Dng thc ca ton t nynh 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. Lnhth 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 nybobby tr n mt khi nh hpl 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 bnh 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 chngta chn khi thit k chng trnh trong khi cp pht b nh ng cho php cp pht bnh 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 nhimc th chy mt lc vi chng trnh c mt kh nng c th xy ra l ht b nh cppht. Nu iu ny xy ra v h iu hnh khng th cp pht b nh nh chng ta yucu vi ton t new, mt con tr null (zero) s c tr v. V vy cc bn nn kim traxem 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 tdelete.V b nh ng ch cn thit trong mt khong thi gian nht nh, khi n khng cndng n na th n s c gii phng c th cp pht cho cc nhu cu khc trongtng lai. thc hin vic ny ta dng ton t delete, dng thc ca n nh sau:
8/14/2019 hoc lap trinh c++
53/64
deletepointer;
hoc
delete []pointer;
Biu thc u tin nn c dng gii phng b nh c cp pht cho mt phn tv lnh th hai dng gii phng mt khi nh gm nhiu phn t (mng). Trong huht cc trnh dch c hai biu thc l tng ng mc d chng l r rng l hai ton tkhc nhau.
// rememb-o-matic#include #include
int main (){char input [100];
int i,n;long * l, total = 0;cout
8/14/2019 hoc lap trinh c++
54/64
Ton t new v delete l c quyn C++ v chng khng c trong ngn ng C. Trongngn 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 dngtrong mt s chng trnh.
Hm mallocy 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 trkiu 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 tmong mun vi kch thc ca chng. Tht may mn l chng ta c ton t sizeof, tont 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 cakiu d liu ny c th bng 2, 4 hay hn ty thuc vo h thng m chng trnh cdch.
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 kchthc 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 tac th nh ngha bobby vi calloc nh sau:
int * bobby;bobby = (int *) calloc (5, sizeof(int));
Mt im khc nhau na giamalloc v calloc l calloc khi to tt c cc phn tca 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);
8/14/2019 hoc lap trinh c++
55/64
tham spointernhn vo mt con tr c cp pht b nh hay mt con tr null, vsize ch nh kch thc ca khi nh mi. Hm ny s cp pht size byte b nh chocon tr. N c th phi thay i v v tr ca khi nh c th ch cho kch thcmi ca khi nh, trong trng hp ny ni dung hin thi ca khi nh c copy ti vtr 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 nhngtham spointerv ni dung ca n s khng b thay i.
Hmfree.Hm ny gii phng mt khi nh ng c cp pht bimalloc, callochocrealloc.
void free (void *pointer);
Hm ny ch c dng gii phng b nh c cp pht bi cc hmmalloc,callocand 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 vimt 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 mttn hp l cho i tng. Bn trong cp ngoc nhn l tn cc phn t ca cu trc vkiu ca chng.
Nu nh ngha ca cu trc bao gm tham s model_name (tu chn), tham s ny trthnh mt tn kiu hp l tng ng vi cu trc. V d:
struct products {char name [30];float price;
} ;
products apple;products orange, melon;
8/14/2019 hoc lap trinh c++
56/64
Chng ta nh ngha cu trcproducts vi hai trng: name vprice, mi trng cmt kiu khc nhau. Chng ta cng s dng tn ca kiu cu trc (products) khaibo ba i tng c kiu : apple, orange vmelon.
Sau khi c khai bo,products tr thnh mt tn kiu hp l ging cc kiu c bn
nh int, charhayshort.
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 vmelon 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 numodel_name khng c s dng th chng ta s khng th khai bo thm cc i tngc kiu mu ny.
Mt iu quan trng l cn phn bit r rng u l kiu mu cu trc, u l i tngcu trc. Nu dng cc thut ng chng ta s dng vi cc bin, kiu mu l tn kiud liu cn i tng l cc bin.
Sau khi khai bo ba i tng c kiu l mt mu cu trc xc nh (apple, orangeandmelon) chng ta c th thao tc vi cc trng to nn chng. lm vic ny chngta s dng mt du chm (.) chn gia tn i tng v tn trng. V d, chng ta cth thao tc vi bt k phn t no ca cu trc nh l i vi cc bin chun :
apple.nameapple.priceorange.nameorange.pricemelon.namemelon.price
mi trng c kiu d liu tng ng: apple.name, orange.name vmelon.name ckiu char[30], v apple.price, orange.price vmelon.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 #include #include
struct movies_t {char title [50];int year;
Enter title: AlienEnter year: 1979
My favourite movie is:2001 A Space Odyssey (1968)
And yours:Alien (1979)
8/14/2019 hoc lap trinh c++
57/64
} mine, yours;
void printmovie (movies_t movie);
int main (){
char buffer [50];
strcpy (mine.title, "2001 A SpaceOdyssey");mine.year = 1968;
cout
8/14/2019 hoc lap trinh c++
58/64
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
8/14/2019 hoc lap trinh c++
59/64
#include #include
struct movies_t {char title [50];int year;
};
int main (){char buffer[50];
movies_t amovie;movies_t * pmovie;pmovie = & amovie;
cout title,50);cout year = atoi (buffer);
cout title v (*movies).title u hp l v chng u dng tham chiu n phn t title ca cu trc c tr bimovies. Bn cn phn bit rrng vi:
*movies.title
n tng ng vi
8/14/2019 hoc lap trinh c++
60/64
8/14/2019 hoc lap trinh c++
61/64
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 dliu c. c th lm vic chng ta s s dng t kho typedef, dng thc nhsau:
typedef existing_type new_type_name ;
trong existing_type l mt kiu d liu c bn hay bt k mt kiu d liu nhngha 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 vfieldkiu char, unsigned int, char* kiu char[50], chng ta hon ton c th sdng 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 lpli trong chng trnh hoc kiu d liu bn mun dng c tn qu di v bn mun nc tn ngn hn.
Union
Union cho php mt phn b nh c th c truy xut di dng nhiu kiu d liukhc nhau mc d tt c chng u nm cng mt v tr trong b nh. Phn khai bo vs 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 lkch thc ca phn t ln nht. V d:
8/14/2019 hoc lap trinh c++
62/64
union mytypes_t {char c;int i;float f;} mytypes;
nh ngha ba phn tmytypes.cmytypes.imytypes.f
mi phn t c mt kiu d liu khc nhau. Nhng v tt c chng u nm cng mt chtrong b nh nn bt k s thay i no i vi mt phn t s nh hng ti tt c ccthnh phn cn li.
Mt trong nhng cng dng ca union l dng kt hp mt kiu d liu c bn vimt 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 vmix.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 trctrong union bn c th thy cc cch khc nhau m chng ta c th truy xut d liu.
Cc unions v danhTrong C++ chng ta c th s dng cc unions v danh. Nu chng ta t mt uniontrong mt cu trc m khng tn (phn i sau cp ngoc nhn { }) union s tr thnhv danh v chng ta c th truy xut trc tip n cc phn t ca n m khng cn ntn ca union (c cn cng khng c). V d, hy xem xt s khc bit gia hai phnkhai bo sau y:
8/14/2019 hoc lap trinh c++
63/64
union union v danh
struct {char title[50];char author[50];union {
float dollars;int yens;} price;
} book;
struct {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 tncho union (price) cn trong ci th hai th khng. Khi truy nhp vo cc phn tdollars v yens, trong trng hp th nht chng ta vit:
book.price.dollarsbook.price.yens
cn trong trng hp th hai:
book.dollarsbook.yens
Mt ln na ti nhc li rng v n l mt union, hai trng dollars v yens u chimcng 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 nnh sau:
enummodel_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 khaibo. Chng ta to ra mt kiu d liu mi m khng da trn bt k kiu d liu no
8/14/2019 hoc lap trinh c++
64/64
c sn: kiu color_t, nhng gi tr c th ca kiu color_t c vit trong cp ngocnhn {}. 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 cchng s nguyn c ch nh. Nu iu ny khng oc ch nh, gi tr nguyn tngng vi phn t u tin l 0 v cc gi tr tip theo c th tng ln 1, V vy, trongkiu d liu colors_t m chng ta nh ngha trn, white tng ng vi 0,bluetng 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 kmonths_t c th cha mt trong 12gi 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