c++ can ban

79

Upload: cao-cuong-le

Post on 18-Oct-2015

53 views

Category:

Documents


0 download

TRANSCRIPT

  • Updatesofts.com Ebooks Team

    Trang 1

    C++ Cn bn v nng cao Mc lc:

    I. C bn v C++ (2) I. Cu trc ca mt trng trnh C++ (2) II. Cc bin kiu v hng s (5) III. Cc ton t (13) IV. Giao tip vi Console (19)

    II. Cc cu trc iu khin v Hm (22) I. Cu trc d liu iu khin (22) II. Hm I (29) III. Hm II (34)

    III. D liu nng cao (41) I. Mng (41) II. Su k t (48) III. Con tr (54) IV. B nh ng (65) V. Cc cu trc (69) VI. Cc kiu d liu do ngi dng nh ngha. (typedef, union, enum) (75)

  • Updatesofts.com Ebooks Team

    Trang 2

    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

    int main () { cout

  • Updatesofts.com Ebooks Team

    Trang 3

    (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

  • Updatesofts.com Ebooks Team

    Trang 4

    with more comments */

    #include

    int main () { cout

  • Updatesofts.com Ebooks Team

    Trang 5

    Cc bin, kiu v hng s Identifiers Mt tn (indentifiers) hp l l mt chui gm cc ch ci, ch s hoc k t gch di. Chiu di ca mt tn l khng gii hn.

    K t trng, cc k t nh du u khng th c mt trong mt tn. Ch c ch ci, ch s v k t gch di l c cho php. Thm vo , mt tn bin lun phi bt u bng mt ch ci. Chng cng c th bt u bng k t gch di ( _ ) nhng k t ny thng c dnh cho cc lin kt bn ngoi (external link). Khng bao gi chng bt u bng mt ch s.

    Mt lut na m bn phi quan tm n khi to ra cc tn ca ring mnh l chng khng c trng vi bt k t kho no ca ngn ng hay ca trnh dch, v d cc tn sau y lun lun c coi l t kho theo chun ANSI-C++ v do vy chng khng th c dng t tn

    asm, car, bool, break, marry, catch, to char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, to register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t

    Thm vo , mt s biu din khc ca cc ton t (operator) cng khng c dng lm tn v chng l nhng t c dnh ring trong mt s trng hp.

    and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq

    Trnh dch ca bn c th thm mt t dnh ring c trng khc. V d, rt nhiu trnh dch 16 bit (nh cc trnh dch cho DOS) cn c th cc t kho far, huge v near.

    Ch : Ngn ng C++ l "case sensitive" c ngha l phn bit ch hoa ch thng. Do vy bin RESULT khc vi result cng nh Result.

    Cc kiu d liu Khi lp trnh, chng ta lu tr cc bin trong b nh ca my tnh nhng my tnh phi bit chng ta mun lu tr g trong chng v cc kiu d liu khc nhau s cn lng b nh khc nhau.

  • Updatesofts.com Ebooks Team

    Trang 6

    B nh ca my tnh chng ta c t chc thnh cc byte. Mt byte l lng b nh nh nht m chng ta c th qun l. Mt byte c th dng lu tr mt loi d liu nh nh l kiu s nguyn t 0 n 255 hay mt k t. Nhng my tnh c th x l cc kiu d liu phc tp hn bng cch gp nhiu byte li vi nhau, nh s nguyn di hay s thp phn. Tip theo bn s c mt danh sch cc kiu d liu c bn trong C++ cng nh min gi tr m chng c th biu din

    Tn S byte M t Min gi tr

    char 1 K t hay kiu s nguyn 8-bit c du: -128 to 127 khng du: 0 to 255

    short 2 kiu s nguyn 16-bit c du: -32763 to 32762 khng du: 0 to 65535

    long 4 kiu s nguyn 32-bit c du:-2147483648 to 2147483647 khng du: 0 to 4294967295

    int * S nguyn. di ca n ph thuc vo h thng, nh trong MS-DOS n l 16-bit, trn Windows 9x/2000/NT l 32 bit...

    Xem short, long

    float 4 Dng du phy ng 3.4e + / - 38 (7 digits) double 8 Dng du phy ng vi chnh xc gp

    i 1.7e + / - 308 (15 digits) long double 10

    Dng du phy ng vi chnh xc hn na

    1.2e + / - 4932 (19 digits)

    bool 1 Gi tr logic. N mi c thm vo chun ANSI-C++. Bi vy khng phi tt c cc trnh dch u h tr n.

    true hoc false

    Ngoi cc kiu d liu c bn ni trn cn tn ti cc con tr v cc tham s khng kiu (void) m chng ta s xem xt sau.

    Khai bo mt bin c th s dng mt bin trong C++, u tin chng ta phi khai bo n, ghi r n l kiu d liu no. Chng ta ch cn vit tn kiu (nh int, short, float...) tip theo sau l mt tn bin hp l. V d

    int a; float mynumber;

    Dng u tin khai bo mt bin kiu int vi tn l a. Dng th hai khai bo mt bin kiu float vi tn mynumber. Sau khi c khai bo, cc bin trn c th c dng trong phm vi ca chng trong chng trnh.

  • Updatesofts.com Ebooks Team

    Trang 7

    Nu bn mun khai bo mt vi bin c cng mt kiu v bn mun tit kim cng sc vit bn c th khai bo chng trn mt dng, ngn cch cc tn bng du phy. V d

    int a, b, c;

    khai bo ba bin kiu int (a,b v c) v hon ton tng ng vi : int a; int b; int c;

    Cc kiu s nguyn (char, short, long and int) c th l s c du hay khng du tu theo min gi tr m chng ta cn biu din. V vy khi xc nh mt kiu s nguyn chng ta t t kho signed hoc unsigned trc tn kiu d liu. V d:

    unsigned short NumberOfSons; signed int MyAccountBalance;

    Nu ta khng ch r signed or unsigned n s c coi l c du, v vy trong khai bo th hai chng ta c th vit :

    int MyAccountBalance

    cng hon ton tng ng vi dng khai bo trn. Trong thc t, rt t khi ngi ta dng n t kho signed. Ngoi l duy nht ca lut ny kiu char. Trong chun ANSI-C++ n l kiu d liu khc vi signed char v unsigned char.

    c th thy r hn vic khai bo trong chng trnh, chng ta s xem xt mt on m C++ v d nh sau:

    // operating with variables

    #include

    int main () { // declaring variables: int a, b; int result;

    // process: a = 5; b = 2; a = a + 1; result = a - b;

    // print out the result: cout

  • Updatesofts.com Ebooks Team

    Trang 8

    return 0; }

    ng lo lng nu nh vic khai bo c v hi l lng vi bn. Bn s thy phn chi tit cn li trong phn tip theo

    Khi to cc bin Khi khai bo mt bin, gi tr ca n mc nhin l khng xc nh. Nhng c th bn s mun n mang mt gi tr xc nh khi c khai bo. lm iu , bn ch cn vit du bng v gi tr bn mun bin s mang:

    type identifier = initial_value ;

    V d, nu chng ta mun khai bo mt bin int l a cha gi tr 0 ngay t khi khi to, chng ta s vit :

    int a = 0;

    B xung vo cch khi to kiu C ny, C++ cn c thm mt cch mi khi to bin bng cch bc mt cp ngoc n sau gi tr khi to. V d :

    int a (0);

    C hai cch u hp l trong C++.

    Phm vi hot ng ca cc bin Tt c cc bin m chng ta s s dng u phi c khai bo trc. Mt im khc bit gia Cv C++ l trong C++ chng ta c th khai bo bin bt k ni no trong chng trnh, thm ch l ngay gia cc lnh thc hin ch khng ch l u khi lnh nh trong C.

    Mc d vy chng ta vn nn theo cch ca ngn ng C khi khai bo cc bin bi v n s rt hu dng khi cn sa cha mt chng trnh c tt c cc phn khai bo c gp li vi nhau. Bi vy, cch thng dng nht khai bo bin l t n trong phn bt u ca mi hm (bin cc b) hay trc tip trong thn chng trnh, ngoi tt c cc hm (bin ton cc).

    Global variables (bin ton cc) c th c s dng bt k u trong chng trnh, ngay sau khi n c khai bo.

    Tm hot ng ca local variables (bin cc b) b gii hn trong phn m m n c khai bo. Nu chng c khai bo u mt hm (nh hm main), tm hot ng s l ton b hm main. iu c ngha l trong v d trn, cc bin c khai bo trong

  • Updatesofts.com Ebooks Team

    Trang 9

    hm main() ch c th c dng trong hm , khng c dng bt k u khc.

    Thm vo cc bin ton cc v cc b, cn c cc bin ngoi (external). Cc bin ny khng nhng c dng trong mt file m ngun m cn trong tt c cc file c lin kt trong chng trnh.

    Trong C++ tm hot ng ca mt bin chnh l khi lnh m n c khai bo (mt khi lnh l mt tp hp cc lnh c gp li trong mt bng cc ngoc nhn { } ). Nu n c khai bo trong mt hm tm hot ng s l hm , cn nu c khai bo trong vng lp th tm hot ng s ch l vng lp ....

    Cc hng s Mt hng s l bt k mt biu thc no mang mt gi tr c nh, nh:

    Cc s nguyn

    1776 707 -273

    chng l cc hng mang gi tr s. Ch rng khi biu din mt hng kiu s chng ta khng cn vit du ngoc kp hay bt k du hiu no khc.

    Thm vo nhng s h c s 10 ( ci m tt c chng ta u bit) C++ cn cho php s dng cc hng s c s 8 v 16. biu din mt s h c s 8 chng ta t trc n k t 0, biu din s h c s 16 chng ta t trc n hai k t 0x. V d:

    75 // C s 10 0113 // c s 8 0x4b // c s 16

    Cc s thp phn (dng du phy ng) Chng biu din cc s vi phn thp phn v/hoc s m. Chng c th bao gm phn thp phn, k t e (biu din 10 m...).

    3.14159 // 3.14159 6.02e23 // 6.02 x 1023 1.6e-19 // 1.6 x 10-19 3.0 // 3.0

    K t v xu k t Trong C++ cn tn ti cc hng khng phi kiu s nh:

    'z'

    'p' "Hello world" "How do you do?"

  • Updatesofts.com Ebooks Team

    Trang 10

    Hai biu thc u tin biu din cc k t n, cc k t c t trong du nhy n ('), hai biu thc tip theo biu thc cc xu k t c t trong du nhy kp (").

    Khi vit cc k t n hay cc xu k t cn phi chng trong cc du nhy phn bit vi cc tn bin hay cc t kho. Ch :

    x

    'x'

    x tr n bin x trong khi 'x' l k t hng 'x'.

    Cc k t n v cc xu k t c mt tnh cht ring bit l cc m iu khin. Chng l nhng k t c bit m khng th c vit bt k u khc trong chng trnh nh l m xung dng (\n) hay tab (\t). Tt c u bt u bng du x ngc (\). Sau y l danh sch cc m iu khin :

    \n xung dng \r li v u dng \t k t tab \v cn thng theo chiu dc \b backspace \f sang trang \a Ku bp \' du nhy n \" du nhy kp \ du hi \\ k t x ngc

    V d:

    '\n' '\t' "Left \t Right" "one\ntwo\nthree"

    Thm vo , biu din mt m ASCII bn cn s dng k t x ngc (\) tip theo l m ASCII vit trong h c s 8 hay c s 16. Trong trng hp u m ASCII c vit ngay sau du s ngc, trong trng hp th hai, s dng s trong h c s 16 bn cn vit k t x trc s (v d \x20 hay \x4A).

    Cc hng chui k t c th c vit trn nhiu dng nu mi dng c kt thc bng mt du s ngc (\):

  • Updatesofts.com Ebooks Team

    Trang 11

    "string expressed in \ two lines"

    Bn c th ni mt vi hng xu k t ngn cch bng mt hay vi du trng, k t tab, xung dng hay bt k k t trng no khc.

    "we form" "a unique" "string" "of characters"

    nh ngha cc hng (#define) Bn c th nh ngha cc hng vi tn m bn mun c th s dng thng xuyn m khng mt ti nguyn cho cc bin bng cch s dng ch th #define. y l dng ca n:

    #define identifier value

    V d:

    #define PI 3.14159265 #define NEWLINE '\n' #define WIDTH 100

    chng nh ngha ba hng s mi. Sau khi khai bo bn c th s dng chng nh bt k cc hng s no khc, v d

    circle = 2 * PI * r; cout

  • Updatesofts.com Ebooks Team

    Trang 12

    Trong trng hp kiu khng c ch r (nh trong v d cui) trnh dch s coi n l kiu int

  • Updatesofts.com Ebooks Team

    Trang 13

    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

  • Updatesofts.com Ebooks Team

    Trang 14

    % 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 (+=, -=, *=, /=, %=, >>=,

  • Updatesofts.com Ebooks Team

    Trang 15

    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

  • Updatesofts.com Ebooks Team

    Trang 16

    ( (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 > 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 );

  • Updatesofts.com Ebooks Team

    Trang 17

    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

    ++ -- tng/gim ~ o ngc bit ! NOT & * Ton t con tr (type) Chuyn i kiu

    3

    + - Dng hoc m

    Phi

    4 * / % Ton t s hc Tri

  • Updatesofts.com Ebooks Team

    Trang 18

    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 = += -= *= /= %= >>=

  • Updatesofts.com Ebooks Team

    Trang 19

    Giao tip vi console. Console l giao din c bn ca my tnh. Bn phm l thit b vo c bn cn mn hnh l thit b ra c bn.

    Trong th vin iostream ca C++, cc thao tc vo ra c bn ca mt chng trnh c h tr bi hai dng d liu : cin nhp d liu v cout xut. Thm vo , cn c cerr v clog l hai dng d liu dng hin th cc thng bo li trn thit b ra chun (thng l mn hnh) hoc ra mt file. Thng thng cout c gn vi mn hnh cn cin c gn vi bn phm.

    S dng hai dng d liu ny bn s c th giao tip vi ngi s dng v bn c th hin th cc thng bo ln mn hnh cng nh nhn d liu t bn phm.

    Xut d liu (cout) Dng cout c s dng vi ton t qu ti

  • Updatesofts.com Ebooks Team

    Trang 20

    cout

  • Updatesofts.com Ebooks Team

    Trang 21

    i*2 > a >> b;

    tng ng vi

    cin >> a; cin >> b;

    Trong c hai trng hp ngi s dng phi cung cp hai d liu, mt cho bin a v mt cho bin b v c ngn cch bi mt du trng hp l: mt du cch, du tab hay k t xung dng.

    Trong trng hp kiu khng c ch r (nh trong v d cui) trnh dch s coi n l kiu int.

  • Updatesofts.com Ebooks Team

    Trang 22

    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

  • Updatesofts.com Ebooks Team

    Trang 23

    if (x == 100) cout

  • Updatesofts.com Ebooks Team

    Trang 24

    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 int main () { unsigned long n; do { cout > n; cout

  • Updatesofts.com Ebooks Team

    Trang 25

    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 int main () { for (int n=10; n>0; n--) { cout

  • Updatesofts.com Ebooks Team

    Trang 26

    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 int main () { int n; for (n=10; n>0; n--) { cout

  • Updatesofts.com Ebooks Team

    Trang 27

    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

  • Updatesofts.com Ebooks Team

    Trang 28

    default: cout

  • Updatesofts.com Ebooks Team

    Trang 29

    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

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

    int main () { int z; z = addition (5,3); cout

  • Updatesofts.com Ebooks Team

    Trang 30

    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

    The first result is 5 The second result is 5

  • Updatesofts.com Ebooks Team

    Trang 31

    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

  • Updatesofts.com Ebooks Team

    Trang 32

    v 5 l kt qu ca subtraction (7,2).

    Cn vi lnh

    cout

  • Updatesofts.com Ebooks Team

    Trang 33

    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 ();

    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.

  • Updatesofts.com Ebooks Team

    Trang 34

    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

    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

  • Updatesofts.com Ebooks Team

    Trang 35

    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

    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

  • Updatesofts.com Ebooks Team

    Trang 36

    // default values in functions #include

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

    int main () { cout

  • Updatesofts.com Ebooks Team

    Trang 37

    return (a/b); }

    int main () { int x=5,y=2; float n=5.0,m=2.0; cout

  • Updatesofts.com Ebooks Team

    Trang 38

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

    int main () { long l; cout > l; cout

  • Updatesofts.com Ebooks Team

    Trang 39

    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

  • Updatesofts.com Ebooks Team

    Trang 40

    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.

  • Updatesofts.com Ebooks Team

    Trang 41

    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:

  • Updatesofts.com Ebooks Team

    Trang 42

    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:

  • Updatesofts.com Ebooks Team

    Trang 43

    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

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

    int main () { for ( n=0 ; n

  • Updatesofts.com Ebooks Team

    Trang 44

    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)

  • Updatesofts.com Ebooks Team

    Trang 45

    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

    #define WIDTH 5 #define HEIGHT 3

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

    int main () { for (n=0;n

  • Updatesofts.com Ebooks Team

    Trang 46

    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

    void printarray (int arg[], int length) { for (int n=0; n

  • Updatesofts.com Ebooks Team

    Trang 47

    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.

    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.

  • Updatesofts.com Ebooks Team

    Trang 48

    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:

  • Updatesofts.com Ebooks Team

    Trang 49

    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';

  • Updatesofts.com Ebooks Team

    Trang 50

    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 #include

    int main () { char szMyName [20]; strcpy (szMyName,"J. Soulie"); cout

  • Updatesofts.com Ebooks Team

    Trang 51

    { char szMyName [20]; setstring (szMyName,"J. Soulie"); cout

  • Updatesofts.com Ebooks Team

    Trang 52

    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 #include

    int main () { char mybuffer [100]; float price; int quantity; cout

  • Updatesofts.com Ebooks Team

    Trang 53

    return 0; }

    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[]

  • Updatesofts.com Ebooks Team

    Trang 54

    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:

  • Updatesofts.com Ebooks Team

    Trang 55

    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 (&)

  • Updatesofts.com Ebooks Team

    Trang 56

    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

    value1==10 / value2==20

  • Updatesofts.com Ebooks Team

    Trang 57

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

    mypointer = &value1; *mypointer = 10; mypointer = &value2; *mypointer = 20; cout

  • Updatesofts.com Ebooks Team

    Trang 58

    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

    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

  • Updatesofts.com Ebooks Team

    Trang 59

    }

    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:

  • Updatesofts.com Ebooks Team

    Trang 60

    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.

  • Updatesofts.com Ebooks Team

    Trang 61

    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++;

  • Updatesofts.com Ebooks Team

    Trang 62

    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

    void increase (void* data, int

    6, 10, 13

  • Updatesofts.com Ebooks Team

    Trang 63

    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

  • Updatesofts.com Ebooks Team

    Trang 64

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

    int main () { int m,n; m = operation (7, 5, &addition); n = operation (20, m, minus); cout

  • Updatesofts.com Ebooks Team

    Trang 65

    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

  • Updatesofts.com Ebooks Team

    Trang 66

    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 #include

    int main () { char input [100]; int i,n; long * l, total = 0; cout

  • Updatesofts.com Ebooks Team

    Trang 67

    cout

  • Updatesofts.com Ebooks Team

    Trang 68

    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.

  • Updatesofts.com Ebooks Team

    Trang 69

    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.

  • Updatesofts.com Ebooks Team

    Trang 70

    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 #include #include

    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

  • Updatesofts.com Ebooks Team

    Trang 71

    return 0; }

    void printmovie (movies_t movie) { cout

  • Updatesofts.com Ebooks Team

    Trang 72

    for (n=0; n

  • Updatesofts.com Ebooks Team

    Trang 73

    cout title; cout 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 bi movies (*movies).title

    *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];

  • Updatesofts.com Ebooks Team

    Trang 74

    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

  • Updatesofts.com Ebooks Team

    Trang 75

    Cc kiu d liu t 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;

  • Updatesofts.com Ebooks Team

    Trang 76

    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

  • Updatesofts.com Ebooks Team

    Trang 77

    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 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;

  • Updatesofts.com Ebooks Team

    Trang 78

    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.