Bai Giang C++ - Smith.N Studio

Embed Size (px)

Citation preview

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    1/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 1

    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/3/2019 Bai Giang C++ - Smith.N Studio

    2/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 2

    (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/3/2019 Bai Giang C++ - Smith.N Studio

    3/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 3

    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 thm ccch thch cho chng trnh :

    /* my second program in C++

    with more comments */

    #include

    int main (){

    cout

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    4/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 4

    y l dng ch thch. Tt c cc dng bt u bng hai du s (//) c coi l cht thchm chng khng c bt k mt nh hng no n hot ng ca chng trnh. Chng cthc cc lp trnh vin dng gii thch hay bnh phm bn trong m ngun cachng trnh. Trong trng hp ny, dng ch thch l mt gii thch ngn gn nhng gm chng trnh chng ta lm.

    #include Cc cu bt u bng du (#) c dng cho preprocessor (ai dch h ti t ny vi).Chng khng phi l nhng dng m thc hin nhng c dng bo hiu cho trnhdch. y cu lnh #include bo cho trnh dch bit cn phi "include"th vin iostream. y l mt th vin vo ra cbn trong C++ v n phi c"include" v n sc dng trong chng trnh. y l cch cin s dng th viniostream

    int main ()Dng ny tng ng vi phn bt u khai bo hm main. Hm main l im m tt c

    cc chng trnh C++ bt u thc hin. N khng ph thuc vo v tr ca hm ny (u, cui hay gia ca m ngun) m ni dung ca n lun c thc hin u tin 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/3/2019 Bai Giang C++ - Smith.N Studio

    5/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 5

    cout

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    6/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 6

    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 trongbng ch ci nhng li c trn hu ht cc bn phm trn th gii. Hiu bit v chng lrt quan trng v y l mt trong nhng thnh phn cbn ca ngn ng C++.

    Ton tgn (=).

    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 cth 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 phiv khng bao gio ngc

    a = b;

    gn gi tr ca bin a bng gi trang 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 ts hc ( +, -, *, /, % )

    Nm ton t s hc c h trbi ngn ng l:

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    7/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 7

    + 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 li 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 tgn phc hp (+=, -=, *=, /=, %=, >>=,

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    8/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 8

    c 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 2

    B=3;A=++B;// A is 4, B is 4

    B=3;A=B++;// A is 3, B is 4

    Cc ton tquan h ( ==, !=, >, =, Ln hn

    < Nh hn

    > = Ln hn hoc bng< = Nh hn hoc bng

    V d:

    (7 == 5)s tr gi trfalse

    (6 >= 6)s tr gi trtruett nhin thay v s dng cc s, chng ta c th s dng bt c biu thcno. Cho a=2, b=3 v c=6

    (a*b >= c) s tr gi trtrue.

    (b+4 < a*c)s tr gi trfalse

    Cn ch rng = (mt du bng) lf hon ton khc vi == (hai du bng). Duu 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 cbng nhau hay khng.

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    9/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 9

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

    Cc ton tlogic ( !, &&, || ).

    Ton t! tng ng vi ton t logic NOT, n ch c mt i spha bnphi v vic duy nht m n lm l i ngc gi tr ca i s ttrue sang falsehoc ngc li. V d:

    !(5 == 5)tr vfalse v biu thc bn phi (5 == 5) c gi trtrue.

    !(6 6)) tr vtrue ( true ||false ).

    Ton tiu kin ( ? ).

    Ton tiu 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

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    10/68

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    11/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 11

    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 cbng byte ca kiu hay i tng .

    a = sizeof (char);

    a s mang gi tr 1 v kiu char lun c kch c1 byte trn mi h thng. Gi trtr v ca sizeofl mt hng s v vy n lun lun c tnh trc khi chngtrnh thc hin.

    Cc ton tkhc

    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 sc ni n c th trong cc phntng ng.

    Thtu 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, 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 tu 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 tu tin ca chng c lit k trong bng sautheo th t t cao xung thp.

    Tht

    Ton t M t Associativity

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    12/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 12

    1 :: scope Tri

    2 () [ ] -> . sizeof Tri

    3

    ++ -- tng/gim

    Phi

    ~ o ngc bit

    ! NOT

    & * Ton t con tr

    (type) Chuyn i kiu

    + - Dng hoc m

    4 * / % Ton t s hc Tri

    5 + - Ton t s hc Tri

    6 > Dch bit Tri

    7 < >= Ton t quan h Tri

    8 == != Ton t quan h Tri

    9 & ^ |Ton t thao tcbit

    Tri

    10 && || Ton t logic Tri

    11 ?: Ton tiu kin Phi

    12= += -= *= /= %=

    >>=

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    13/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 13

    Hu ht cc cu trc iu khin m chng ta s xem xt trong chng ny cho php sdng mt lnh n hay mt khi lnh lm tham s, tu thuc vo chng ta c t ntrong cp ngoc nhn hay khng.

    Cu trc iu kin: if v else

    Cu trc ny c dng khi mt lnh hay mt khi lnh chc thc hin khi mt iukin no tho mn. Dng ca n nh sau:

    if (condition) statement

    trong condition l biu thc sc tnh ton. Nu iu kin l true,statementc thc hin. Nu khng statementb b qua (khng thc hin) v chng trnh tiptc 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

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    14/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 14

    else if (x < 0)

    cout > n;while (n>0) {

    cout 0) cn c tho mn.

    Chng ta cn phi nhrng vng lp phi kt thc mt im no , vvy bn trong vng lp chng ta phi cung cp mt phng thc no buc condition trthnh sai nu khng th n s lp li mi mi. Trong v

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    15/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 15

    d trn vng lp phi c lnh --n; lm cho condition trthnh sai saumt s ln lp.

    Vng lpdo-while

    Dng thc:

    do statementwhile (condition);

    Chc nng ca n l hon ton ging vng lp while ch tr c mt iu l iukin iu khin vng lp c tnh ton sau khistatementc thc hin, v vystatementsc thc hin t nht mt ln ngay c khi condition khng bao gic tho mn. V d, chng trnh di y s vit ra bt k s no m bn nhpvo cho n khi bn nhp s 0.

    // number echoer

    #include int main (){

    unsigned long n;

    do {cout > n;

    cout

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    16/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 16

    Cch thc hot ng ca n nh sau:

    1, initializationc thc hin. Ni chung n t mt gi kh ban u chobin iu khin. Lnh ny c thc hin chmt ln.2, conditionc kim tra, nu n l ng vng lp tip tc cn nu

    khng vng lp kt thc v statementc b qua.3, statementc thc hin. N c th l mt lnh n hoc l mt khilnh c bao trong mt cp ngoc nhn.4, Cui cng, increasec thc hin tng bin iu khin v vng lpquay trli bc 2.

    Sau y l mt v dm ngc s dng vngfor.

    // countdown using a for loop

    #include

    int main ()

    {for (int n=10; n>0; n--) {

    cout

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    17/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 17

    Lnhbreak.

    S dng breakchng ta c th thot khi vng lp ngay c khi iu kin n ktthc cha c tho mn. Lnh ny c thc dng kt thc mt vng lpkhng 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

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    18/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 18

    Lnh ny cho php nhy v iu kin ti bt k im no trong chng trnh. Nichung bn nn trnh dng n trong chng trnh C++. Tuy nhin chng ta vn cmt v d dng lnh gotom ngc:

    // goto loop example

    #include int main (){

    int n=10;

    loop: ;cout

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    19/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 19

    default block of instructions

    }

    N hot ng theo cch sau: switch tnh biu thc v kim tra xem n c bng constant1hay 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. 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 chnh trn (bn cth chnh 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/3/2019 Bai Giang C++ - Smith.N Studio

    20/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 20

    Ch rng lnh switch ch c thc dng so snh mt biu thc vi cc hng. Vvy chng ta khng tht cc bin (case (n*2):) hay cc khong (case (1..3):) v chngkhng phi l cc hng hp l.

    style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP:

    medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT:medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 3pt solid">

    Nu bn cn kim tra cc khong hay nhiu gi tr khng phi l hng s hy kt hp cclnh 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 hmname 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 d intx) v ng vai tr bn trong hm nh bt k bin no khc. Chng dng truyn thams 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 du 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/3/2019 Bai Giang C++ - Smith.N Studio

    21/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 21

    }

    c th hiu c on m ny, trc ht hy nhli nhng iu ni bi u tin:mt chng trnh C++ lun bt u thc hin t hm main. V vy chng ta bt u t

    y.

    Chng ta c th thy hm main bt u bng vic khai bo bin z kiu int. Ngay sau l mt li gi ti hm addition. Nu chng ta s thy s tng t gia cu trc cali gi hm vi khai bo ca hm:

    Cc tham s c vai tr tht r rng. Bn trong hm main chng ta gi hm addition vtruyn hai gi tr: 5 v 3 tng ng vi hai tham sint a v int bc khai bo cho hmaddition.

    Vo thi im hm c gi tmain, quyn iu khin c chuyn sang cho hmaddition. Gi tr ca c hai tham s (5 v 3) c copy sang hai bin cc bint a v int bbn trong hm.

    Dng lnh sau:

    return (r);

    kt thc hm addition, v tr li quyn iu khin cho hm no gi n (main) v tiptc chng trnh ci im m n b ngt bi li gi n addition. Nhng thm vo ,gi trc dng vi lnh return (r) chnh l gi trc 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 sc c gi trc tr v bi addition (5, 3), l 8.

    Phm vi hot ng ca cc bin [nhc li]

    Bn cn nhrng phm vi hot ng ca cc bin khai bo trong mt hm hay bt k mtkhi lnh no khc ch l hm hay khi lnh v khng th s dng bn ngoi

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    22/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 22

    chng. V d, trong chng trnh v d trn, bn khng th s dng trc tip cc bin a, bhay r trong hm main v chng l cc bin cc b ca hm addition. Thm vo bncng khng th s dng bin z trc tip bn trong hm addition v n lm bin cc bca 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 bnngoi 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/3/2019 Bai Giang C++ - Smith.N Studio

    23/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 23

    z = subtraction (7,2);cout

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    24/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 24

    Hy tng tng rng chng ta mun to ra mt hm ch hin th mt thng bo lnmn hnh. N khng cn tr v mt gi tr no c, hn na cng khng cn nhn tham sno ht. V vy ngi ta nghra kiu d liu void trong ngn ng C. Hy xem xtchng trnh sau:

    // void function example#include

    void dummyfunction (void)

    {cout

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    25/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 25

    int x=5, y=3, z;

    z = addition ( x , y );

    Trong trng hp ny khi chng ta gi hm addition th cc gi tr5 and 3c 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 hay b bn trong hm th cc bin x v yvn khng thay i v chng u c c truyn cho hm ch c gi 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 nhtrong hm duplicate trong v ddi 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/3/2019 Bai Giang C++ - Smith.N Studio

    26/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 26

    Trong v d trn, chng ta lin kt a, b v c vi cc tham s khi gi hm (x, y v z) vmi s thay i vi a bn trong hm snh hng n gi tr ca x v hon ton tng tvi 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 su 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

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    27/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 27

    {int r;

    r=a/b;

    return (r);}

    int main ()

    {cout

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    28/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 28

    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/3/2019 Bai Giang C++ - Smith.N Studio

    29/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 29

    // 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/3/2019 Bai Giang C++ - Smith.N Studio

    30/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 30

    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 cacc 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/3/2019 Bai Giang C++ - Smith.N Studio

    31/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 31

    u tin chng ta thy khai bo mu ca hai hm odd v even:

    void odd (int a);

    void even (int a);

    cho php hai hm ny c thc s dng trc khi chng c nh ngha hon chnh.Tuy nhin l do c bit gii thch ti sao chng trnh ny li cn t nht mt hm phic khi bo mu l trong odd c mt li gi n even v trong even c mt li gi nodd. V vy nu khng c hm no c khai bo trc th li chc chn s xy ra.

    style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP:

    medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; BORDER-LEFT:

    medium none; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 3pt solid">

    Rt nhiu lp trnh vin kinh nghim khuyn rng tt c cc hm nn c khai bo mu. cng l li khuyn ca ti, nht l trong trng hp c nhiu hm hoc chng rt di,

    khi vic khai bo tt c cc hm cng mt ch cho php chng ta bit phi gi 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 nhv 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 c thc biu din nh sau:

    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 t0n 4 v phn tu tin ca mng lunl 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. Mtkhai 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 chnh mng s cha bao nhiu phn t

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    32/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 32

    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 nhtnh c kch cxc 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 ns 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 sc khi tov tt c cc phn tc t bng 0. V vy nu chng ta khai bo mng ton cc:

    int billy [5];

    mi phn t ca billy sc khi to l 0:

    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:

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    33/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 33

    S phn t trong mng m chng ta khi to vi cp ngoc nhn { } phi bng s phn tca mng c khai bo vi cp ngoc vung [ ]. Bi v iu ny c thc coi lmt 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 tca 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]

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

    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, phnt cui cng s l billy[4]. V vy nu chng ta vit billy[5], chng ta s truy xut nphn 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 sc ni n khn khi chng ta bt u sdng con tr.

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    34/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 34

    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, chnh 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 xutn mt phn tca 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 vmng#include

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

    int main (){

    for ( n=0 ; n

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    35/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 35

    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 nhrng ch s ca mng lun bt u t0).

    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 thxem xt lng b nhm mt mng c nhiu ch s cn n. V d:

    char century [100][365][24][60][60];

    gn mt gi trchar cho mi giy trong mt th k, phi cn n hn 3 t gi trchars!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#include

    #define WIDTH 5#define HEIGHT 3

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

    int main ()

    {for (n=0;n

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    36/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 36

    for (m=0;m

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    37/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 37

    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

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    38/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 38

    style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP:

    medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; BORDER-LEFT:medium none; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 3pt solid">

    Mng, c mt chiu v nhiu chiu, khi truyn cho hm nh l mt tham s thng l

    nguyn nhn gy li cho nhng lp trnh vin thiu kinh nghim. Cc bn nn c bi3.3. Con tr c th hiu r hn mng hot ng nh th no.

    Bi 8 : Xu K T

    Trong tt c cc chng trnh chng ta thy cho n gi, chng ta ch s dng cc binkiu s, ch dng biu din cc s. Nhng bn cnh cc bin kiu s cn c cc xu kt, chng cho php chng ta biu din cc chui k t nh l cc t, cu, on vn bn...Cho n gichng ta mi ch dng chng di dng hng ch cha quan tm n ccbin c th cha chng.

    Trong C++ khng c kiu d liu cbn lu cc xu k t. c th tha mn nhucu ny, ngi ta s dng mng c kiu char. Hy nhrng kiu d liu ny (char) chc th lu tr mt k tn, bi vy n c dng to ra xu ca cc k tn.

    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 nhsau:

    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 tbng mt k t null, c thc vit l '\0'.

    Chng ta c th biu dinjenny (mt mng c 20 phn t kiu char) khi lu tr xu k t"Hello" v "Merry Christmas" theo cch sau:

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    39/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 39

    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 c tng 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) mystringc 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 nhbn 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:

    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

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    40/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 40

    nhn mt trong nhng phn t ca n. Vo thi im khi to mng l mt trng hpc 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 nh nghatrong string.h v c thc gi nh sau:

    strcpy (string1, string2);

    Lnh ny copy ni dung ca string2 sang string1. string2 c th l mt mng, con tr haymt 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/3/2019 Bai Giang C++ - Smith.N Studio

    41/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 41

    Mc d chng ta lun c th vit mt hm n gin nh hm setstring di y thchin mt thao tc ging nhstrcpy:

    // setting value to string#include

    void setstring (char szOut [], char szIn []){

    int n=0;

    do {szOut[n] = szIn[n];

    n++;

    } while (szIn[n] != 0);}

    int main ()

    {char szMyName [20];

    setstring (szMyName,"J. Soulie");

    cout

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    42/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 42

    {char mybuffer [100];

    cout

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    43/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 43

    Tt c cc hm ny nhn mt tham s v tr v gi tr s (int, long hoc float). Cc hmny khi kt hp vi phng thc getline ca cin l mt cch ng tin cy hn phngthc cin>> cin 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

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    44/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 44

    Mt s m hnh tt i vi b nhmy tnh chnh l mt ph trong mt thnh ph. Trnmt ph tt c cc ngi nh u c nh s tun t vi mt ci tn duy nht nn nuchng ta ni n s 27 ph Trn Hng o th chng ta c th tm c ni m khnglm 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, hiu hnh t chc bnhthnh nhng sn 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 tly 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 tng bi trnh bin dch v hiu hnh, nhngmt khi hiu hnh gn mt a ch cho bin th chng ta c th mun bit bin c lu tru.

    iu ny c thc thc hin bng cch t trc tn bin mt du v (&), c ngha l"a chca". 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 andyc t nhc a ch1776 v chng ta vit nh sau:

    andy = 25;

    fred = andy;ted = &andy;

    kt qu s ging nh trong s di y:

    Chng ta gn cho fred ni dung ca bin andy nh chng ta lm rt ln nhiu khctrong nhng phn trc nhng vi bin ted chng ta gn a chm hiu hnh lugi tr ca bin andy, chng ta va gi s n l 1776.

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    45/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 45

    Nhng bin lu tra ch ca mt bin khc (nhtedtrong 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.

    Ton ttham chiu (*)

    Bng cch s dng con tr chng ta c th truy xut trc tip n gi trc lu trtrong bin c tr bi n bng cch trc tn bin con tr mt du sao (*) - y cthc dch l "gi trc tr bi". V vy, nu chng ta vit:

    beth = *ted;

    (chng ta c thc n l: "beth bng gi trc tr bi ted" beth s mang gi tr25, vted bng 1776 v gi tr tr bi 1776 l 25.

    Bn phi phn bit c rng ted c gi tr1776, nhng *ted (vi mt du sao ngtrc) tr ti gi trc lu tr trong a ch1776, 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 trc tr bi( 25 )

    Ton tly a ch (&)N c dng nh l mt tin t ca bin v c thc dch l "a ch ca", v vy&variable1 c thc c l "a ch ca variable1".

    Ton ttham 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 thc dch l "gi trc tr bi"..*mypointer c c l "gi trc tr bi mypointer".

    Vo lc ny, vi nhng v d vit trn

    andy = 25;

    ted = &andy;

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    46/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 46

    bn c th d dng nhn ra tt c cc biu thc sau l ng:

    andy == 25

    &andy == 1776ted == 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 nhnh nhau (kch thc ca mtbin con tr ty thuc vo hiu hnh). nhng d liu m chng tr ti khng chimlng b nhnh 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 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/3/2019 Bai Giang C++ - Smith.N Studio

    47/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 47

    return 0;}

    Ch rng gi tr ca value1 v value2c thay i mt cch gin tip. u tin chng

    ta gn cho mypointera ch ca value1 dng ton t ly a ch (&) v sau chng tagn 10 cho gi trc tr bi mypointer, l gi trc tr bi value1 v vy chngta sa bin value1 mt cch gin tip

    bn c th thy rng mt con tr c th mang mt vi gi tr trong cng mt chngtrnh chng ta s lp li qu trnh vi value2 v vi cng mt con tr.

    y l mt v d phc tp hn mt cht:

    // more pointers#include

    int main (){

    int value1 = 5, value2 = 15;

    int *p1, *p2;

    p1 = &value1; // p1 = a chcavalue1

    p2 = &value2; // p2 = a chcavalue2

    *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 = 20

    cout

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    48/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 48

    Con tr v mng.

    Trong thc t, tn ca mt mng tng ng vi a ch phn tu tin ca n, gingnh mt con tr tng ng vi a ch ca phn tu tin m n tr ti, v vy thct 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 nhtl chng ta c th gn mt gi tr khc cho con trp trong khi numbers lun trnphn tu tin trong s 20 phn t kiu int m n c nh ngha vi. V vy, khng

    ging nhp - l mt bin con tr bnh thng, numbers l mt con tr hng. Lnhgn sau y l khng hp l:

    numbers = p;

    bi v numbers l mt mng (con tr hng) v khng c gi tr no c thc gn chocc hng.

    V con tr cng c mi tnh cht ca mt bin nn tt c cc biu thc c con tr trong vd 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

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    49/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 49

    Trong bi "mng" chng ta dng du ngoc vung ch ra phn t ca mng mchng ta mun trn. Cp ngoc vung ny c coi nh l ton t offset v nghaca 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 ka l mng hay l mt con tr.

    Khi to con tr

    Khi khai bo con tr c th chng ta s mun chnh 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 khngphi l gi tr m n tr ti. Bn cn phi nhrng 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;

    Nhi vi mng, trnh bin dch cho php chng ta khi to gi tr m con tr tr tibng gi tr hng vo thi im khai bo bin con tr:

    char * terry = "hello";

    trong trng hp ny mt khi nhtnh c dnh cha "hello" v mt con tr tr ti

    k tu tin ca khi nhny ( l k t h') c gn cho terry. Nu "hello" c luti a ch 1702, lnh khai bo trn c thc hnh dung nh th ny:

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    50/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 50

    cn phi nhc li rng terry mang gi tr1702 ch khng phi l 'h' hay "hello".

    Bin con trterry tr ti mt xu k t v n c thc s dng nh l i vi mtmng (hy nhrng mt mng chn 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 nhrng vit terry[4] l hon ton ging vi vit *(terry+4) mc d biu thc thngdng nht l ci u tin. Vi mt trong hai lnh trn xu do terry trn s c gi trnh 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 snguyn khc. Trc ht, ch php cng v tr l c php dng. Nhng c cng v tru 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 nhiuhn hoc t hn cc kiu d liu khc. V d, trong cc kiu s nguyn, charchim 1byte, shortchim 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 nh1000, 2000 and 3000.

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    51/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 51

    Nu chng ta vit

    mychar++;

    myshort++;mylong++;

    mychar - nh bn mong i - s mang gi tr 1001. Tuy nhin myshort s mang gi tr2002 v mylong mang gi tr 3004. Nguyn nhn l khi cng thm 1 vo mt con tr thn s tr ti phn t tip theo c cng kiu m n c nh ngha, v vy kch thctnh bng byte ca kiu d liu n tr ti sc cng thm vo bin con tr.

    iu ny ng vi c hai php ton cng v tri vi con tr. Chng ta cng hon tonthu 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 tinln 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 nhm

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

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    52/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 52

    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 ton 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 trc 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 liuc tr ti khng thc 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 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 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;

    6, 10, 13

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    53/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 53

    }}

    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/3/2019 Bai Giang C++ - Smith.N Studio

    54/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 54

    int main ()

    {

    int m,n;m = operation (7, 5, &addition);

    n = operation (20, m, minus);cout

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    55/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 55

    Biu thc u tien c dng cp pht b nhcha 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, hiu hnh dnh ch cho 5 phn t kiu int trong b nhv trv mt con tr trn u ca khi nh. V vy lc ny bobby trn mt khi nhhpl gm 5 phn tint.

    Bn c th hi ti l c g khc nhau gia vic khai bo mt mng vi vic cp pht bnhcho mt con tr nh chng ta va lm. iu quan trng nht l kch thc ca mtmng 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 nhng cho php cp pht bnhtrong qu trnh chy vi kch thc bt k.

    B nhng ni chung c qun l bi hiu 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 hiu hnh khng th cp pht b nhnh chng ta yucu vi ton tnew, mt con tr null (zero) sc tr v. V vy cc bn nn kim traxem con tr tr v bi ton tnew c bng null hay khng:

    int * bobby;

    bobby = new int [5];if (bobby == NULL) {

    // error assigning memory. Take measures.

    };

    Ton tdelete.V b nhng ch cn thit trong mt khong thi gian nht nh, khi n khng cndng n na th n sc gii phng c th cp pht cho cc nhu cu khc trongtng lai. thc hin vic ny ta dng ton tdelete, dng thc ca n nh sau:

    deletepointer;

    hoc

    delete []pointer;

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    56/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 56

    Biu thc u tin nn c dng gii phng b nhc cp pht cho mt phn tv lnh th hai dng gii phng mt khi nhgm 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/3/2019 Bai Giang C++ - Smith.N Studio

    57/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 57

    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.

    Hmmallocy l mt hm tng qut cp pht b nhng 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 trch, v d:

    char * ronny;ronny = (char *) malloc (10);

    on m ny cp pht cho con tr ronny mt khi nh10 byte. Khi chng ta mun cppht mt khi d liu c kiu khc char (ln hn 1 byte) chng ta phi nhn s phn t

    mong mun vi kch thc ca chng. Tht may mn l chng ta c ton tsizeof, 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 nhgm 5 s nguyn kiu int, kch ccakiu d liu ny c th bng 2, 4 hay hn ty thuc vo h thng m chng trnh cdch.

    Hmcalloc.

    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 nhcn cp pht. Thng thng tham su tin (nelements)l s phn t v tham s thc hai (size) l kch thc ca mi phn t. V d, chng ta cthnh 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 can v 0.

    Hmrealloc.N thay i kch thc ca khi nh c cp pht cho mt con tr.

    void * realloc (void *pointer, size_t size);

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    58/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 58

    tham spointernhn vo mt con tr c cp pht b nhhay mt con tr null, vsize chnh kch thc ca khi nhmi. Hm ny s cp pht size byte b nhcho contr. N c th phi thay i v v tr ca khi nh c th ch cho kch thc mica khi nh, trong trng hp ny ni dung hin thi ca khi nhc copy ti v trmi m bo d liu khng b mt. Con tr mi tr ti khi nhc hm tr v. Nu

    khng th thay i kch thc ca khi nhth hm s tr v mt con tr null nhng thamspointerv ni dung ca n s khng b thay i.

    Hmfree.Hm ny gii phng mt khi nhng c cp pht bimalloc,calloc hocrealloc.

    void free (void *pointer);

    Hm ny chc dng gii phng b nhc cp pht bi cc hmmalloc,callocandrealloc.

    Bi 11 : Cc Cu Trc

    Cc cu trc dliu.

    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 smodel_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/3/2019 Bai Giang C++ - Smith.N Studio

    59/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 59

    Chng ta nh ngha cu trc products vi hai trng: name v price, 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 v melon.

    Sau khi c khai bo, products trthnh mt tn kiu hp l ging cc kiu cbn nh

    int, charhay short.

    Trng tu chn object_name c th nm cui ca phn khai bo cu trc dng khaibo trc tip i tng c kiu cu trc. V d, khai bo cc i tng apple, orangev 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 smodel_name trthnh 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, orangeand melon) chng ta c th thao tc vi cc trng to nn chng. lm vic nychng 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.nameapple.price

    orange.name

    orange.price

    melon.namemelon.price

    mi trng c kiu d liu tng ng: apple.name, orange.name v melon.name ckiu 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

    Enter title: Alien

    Enter year: 1979

    My favourite movie is:

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    60/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 60

    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

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    61/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 61

    Cc cu trc c s dng rt nhiu xy dng csd liu c bit nu chng ta xtn kh nng xy dng cc mng ca chng.

    // array of structures#include

    #include

    #define N_MOVIES 5

    struct movies_t {char title [50];

    int year;

    } films [N_MOVIES];

    void printmovie (movies_t movie);

    int main (){

    char buffer [50];

    int n;for (n=0; n

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    62/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 62

    Nh bt k cc kiu d liu no khc, cc cu trc c thc trn bi con tr. Quytc hon ton ging nhi vi bt k kiu d liu cbn no:

    struct movies_t {char title [50];

    int year;};

    movies_t amovie;

    movies_t * pmovie;

    y amovie l mt i tng c kiu movies_t v pmovie l mt con tr tr ti itng movies_t. OK, by gichng ta sn vi mt v d khc, n s gii thiu mtton t mi:

    // pointers to structures

    #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

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    63/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 63

    on m trn gii thiu mt iu quan trng: ton t->. y l mt ton t tham chiu

    ch dng tr ti cc cu trc v cc lp (class). N cho php chng ta khng phi dngngoc mi khi tham chiu n mt phn t ca cu trc. Trong v d ny chng ta sdng:

    movies->title

    n c thc dch thnh:

    (*movies).title

    c hai biu thc movies->title v (*movies).titleu hp l v chng u dng tham

    chiu n phn ttitle 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 trc tr bi phn ttitle ca cu trc movies, trongtrng hp ny (title khng phi l mt con tr) n chng c ngha g nhiu. Bn diy tng kt tt c cc kt hp c thc gia con tr v cu trc:

    Biu thc M tTng ngvi

    movies.title Phn ttitle ca cu trc movies

    movies->title

    Phn ttitle ca cu trc c tr bi movies (*movies).title

    *movies.titleGi trc tr bi phn ttitle ca cu trcmovies

    *(movies.title)

    Cc cu trc lng nhau

    Cc cu trc c thc t lng nhau v vy mt phn t hp l ca mt cu trc c thl mt cu trc khc.

    struct movies_t {char title [50];

    int year;

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    64/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 64

    }

    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.titlecharlie.favourite_movie.year

    pfriends->favourite_movie.year

    (trong hai biu thc cui cng l tng ng).

    Cc khi nim cbn v cu trc c cp n trong phn ny l hon ton ging vingn ng C, tuy nhin trong C++, cu trc c mrng thm cc chc nng ca mtlp vi tnh cht c trng l tt c cc phn t ca n u l cng cng (public). Bn sc thm cc thng tin chi tit trong phn 4.1, Lp.

    Bi 12:Cc Kiu DLiu Do Ngi Dngnh 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 tnh ngha khc:

    Tnh ngha cc kiu dliu (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 cbn 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];

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    65/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 65

    Trong trng hp ny chng ta nh ngha bn kiu d liu mi: C, WORD, string_tv field kiu char, unsigned int, char* kiu char[50], chng ta hon ton c th s dngchng 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 nhc thc 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 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 unionu chim cng mt ch trong b nh. Kch thc ca n lkch thc ca phn t ln nht. V d:

    union mytypes_t {

    char c;

    int i;

    float f;} mytypes;

    nh ngha ba phn t

    mytypes.cmytypes.i

    mytypes.f

    mi phn t c mt kiu d liu khc nhau. Nhng v tt c chng u nm cng mt chtrong b nhnn bt k s thay i no i vi mt phn t snh hng ti tt c ccthnh phn cn li.

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    66/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 66

    Mt trong nhng cng dng ca union l dng kt hp mt kiu d liu cbn 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 v mix.c m chng ta c th s dng tu theo vic chng ta mun truy xut nnhm 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 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 trthnhv 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:

    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;

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    67/68

    December 30, 2011 Smith Nguyen Studio.

    Smith Nguyen Ebooks. 67

    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 tdollarsv yens, trong trng hp th nht chng ta vit:

    book.price.dollars

    book.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 yensu chimcng mt ch trong b nhnn 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 mtcht, 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 viphn 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 cbn no trong phn khaibo. Chng ta to ra mt kiu d liu mi m khng da trn bt k kiu d liu noc sn: kiu color_t, nhng gi tr c th ca kiu color_tc 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 chnh. Nu iu ny khng oc chnh, gi tr nguyn tng

  • 8/3/2019 Bai Giang C++ - Smith.N Studio

    68/68

    December 30, 2011 Smith Nguyen Studio.ng vi phn tu 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 chnh mt gi tr nguyn cho mt gi tr no ca kiu d liu lit k

    (trong v d ny l phn tu 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 12gi tr tjanuaryn december v tng ng vi cc gi tr nguyn t1n 12,khng phi 0n 11 v chng ta tjanuary bng 1

    Ngun internet