hoc lap trinh c++

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