giao trinh c++. thay binh

Upload: coc-dai-hiep

Post on 07-Apr-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/6/2019 Giao Trinh c++. Thay Binh

    1/157

    1

    CHNG 1

    CC KHI NIM C S

    CA LP TRNH HNG I TNG

    Chng 1 trnh by nhng vn sau:

    Tho lun v cch tip cn hng i tng, nhng nhc im ca lp

    trnh truyn thng v cc c im ca lp trnh hng i tng.

    Cc khi nim csca phng php hng i tng:

    i tng

    Lp

    Tru tng ha dliu v bao gi thng tin

    Ktha

    Tng ng bi

    Lin ktng

    Truyn thng bo

    Cc bc cn thitthit kchng trnh theo hng i tng

    Cc u im ca lp trnh hng i tng

    Cc ngn nghng i tng

    Mt sng dng ca lp trnh hng i tng

    1.1. Gii thiu

    1.1.1. Tip cn hng i tng

    Trong th gii thc, chung quanh chng ta l nhng i tng, l cc

    thc th c mi quan h vi nhau. V d cc phng trong mt cng ty kinh

    doanh c xem nh nhng i tng. Ccphngy c th l: phng qun

    l, phng bn hng, phng k ton, phng tip th,... Mi phng ngoi nhng

    cn b m nhim nhng cng vic c th, cn c nhng d liu ring nh

    thng tin v nhn vin, doanh s bn hng, hoc cc d liu khc c lin quan

    n b phn . Vic phn chia cc phng chc nng trong cng ty s to iu

    kin d dng cho vic qun l cc hot ng. Mi nhn vin trong phng siu

    khin v x l d liu ca phng . V d phng k ton ph trch v lng

    bng nhn vin trong cng ty. Nu bn ang b phn tip th v cn tm thng

    tin chi tit v lng ca n v mnh th s gi yu cu v phng k ton. Vi

    cch lm ny bn c m bo l ch c nhn vin ca b phn k ton c

    quyn truy cp d liu v cung cp thng tin cho bn. iu ny cng cho thy

  • 8/6/2019 Giao Trinh c++. Thay Binh

    2/157

    2

    rng, khng c ngi no thuc b phn khc c th truy cp v thay i d liu

    ca b phn k ton. Khi nim nh th vi tng hu nh c thc m

    rng i vi mi lnh vc trong i sng x hi v hn na - i vi vic t

    chc chng trnh. Mi ng dng c thc nh ngha nh mt tp cc thcth - hoc cc i tng, sao cho qu trnh ti to nhng suy ngha ca chng ta

    l gn st nht v th gii thc.

    Trong phn tip theo chng ta s xem xt phng php lp trnh truyn

    thng t thy rng v sao chng ta cn chuyn sang phng php lp trnh

    hng i tng.

    1.1.2. Nhng nhc im ca lp trnh hng th tc

    Cch tip cn lp trnh truyn thng l lp trnh hng th tc (LTHTT).Theo cch tip cn ny th mt h thng phn mm c xem nh l dy cc

    cng vic cn thc hin nhc d liu, tnh ton, x l, lp bo co v in n

    kt qu v.v... Mi cng vic sc thc hin bi mt s hm nht nh.

    Nh vy trng tm ca cch tip cn ny l cc hm chc nng. LTHTT s dng

    k thut phn r hm chc nng theo cch tip cn trn xung (top-down) to

    ra cu trc phn cp. Cc ngn ng lp trnh bc cao nh COBOL, FORTRAN,

    PASCAL, C, v.v..., l nhng ngn ng lp trnh hng th tc. Nhng nhcim chnh ca LTHTT l:

    Chng trnh kh kim sot v kh khn trong vic b sung, nng cp

    chng trnh. Chng trnh c xy dng theo cch TCHTT thc cht l

    danh sch cc cu lnh m theo my tnh cn thc hin. Danh sch cc

    lnh c t chc thnh tng nhm theo n v cu trc ca ngn ng lp

    trnh v c gi l hm/th tc. Trong chng trnh c nhiu hm/th tc,

    thng th c nhiu thnh phn d liu quan trng sc khai bo tng th(global) cc hm/th tc c th truy nhp, c v lm thay i gi tr ca

    bin tng th. iu ny s lm cho chng trnh rt kh kim sot, nht l

    i vi cc chng trnh ln, phc tp th vn cng trnn kh khn hn.

    Khi ta mun thay i, b sung cu trc d liu dng chung cho mt s

    hm/th tc th phi thay i hu nh tt c cc hm/th tc lin quan n d

    liu .

    M hnh c xy dng theo cch tip cn hng th tc khng m tcy , trung thc h thng trong thc t.

  • 8/6/2019 Giao Trinh c++. Thay Binh

    3/157

    3

    Phng php TCHTT t trng tm vo hm l hng ti hot ng s

    khng thc s tng ng vi cc thc th trong h thng ca th gii thc.

    1.1.3. Lp trnh hng i tng

    Lp trnh hng i tng (Object Oriented Programming - LTHT) lphng php lp trnh ly i tng lm nn tng xy dng thut gii, xy

    dng chng trnh. i tng c xy dng trn csgn cu trc d liu vi

    cc phng thc (cc hm/th tc) s th hin c ng cch m chng ta suy

    ngh, bao qut v th gii thc. LTHT cho php ta kt hp nhng tri thc bao

    qut v cc qu trnh vi nhng khi nim tru tng c s dng trong my

    tnh.

    im cn bn ca phng php LTHT l thit k chng trnh xoayquanh d liu ca h thng. Ngha l cc thao tc x l ca h thng c gn

    lin vi d liu v nh vy khi c s thay i ca cu trc d liu th chnh

    hng n mt s t cc phng thc x l lin quan.

    LTHT khng cho php d liu chuyn ng t do trong h thng. D liu

    c gn cht vi tng phng thc thnh cc vng ring m cc phng thc

    tc ng ln v n c bo v cm vic truy nhp ty tin t bn ngoi.

    LTHT cho php phn tch bi ton thnh tp cc thc thc gi l cc itng v sau xy dng cc d liu cng vi cc phng thc xung quanh cc

    i tng .

    Tm li LTHT c nhng c tnh ch yu nhsau:

    1. Tp trung vo d liu thay cho cc phng thc.

    2. Chng trnh c chia thnh cc lp i tng.

    3. Cc cu trc d liu c thit k sao cho c tc cc i tng.

    4. Cc phng thc xc nh trn cc vng d liu ca i tng c gnvi nhau trn cu trc d liu .

    5. D liu c bao bc, che du v khng cho php cc thnh phn bn

    ngoi truy nhp t do.

    6. Cc i tng trao i vi nhau thng qua cc phng thc.

    7. D liu v cc phng thc mi c th d dng b sung vo i tng no

    khi cn thit.

    8. Chng trnh c thit k theo cch tip cn bottom-up (di -ln).

  • 8/6/2019 Giao Trinh c++. Thay Binh

    4/157

    4

    1.2. Cc khi nim cbn ca lp trnh hng i tng

    Nhng khi nim c bn trong LTHT bao gm: i tng; Lp; Tru

    tng ha d liu, bao gi thng tin; K tha; Tng ng bi; Lin kt ng;

    Truyn thng bo.1.2.1. i tng

    Trong th gii thc, khi nim i tng c hiu nh l mt thc th, n

    c th l ngi, vt hoc mt bng d liu cn x l trong chng trnh,... Trong

    LTHT th i tng l bin th hin ca lp.

    1.2.2. Lp

    Lp l mt khi nim mi trong LTHT so vi k thut LTHTT. N l

    mt bn mu m t cc thng tin cu trc d liu v cc thao tc hp l ca cc

    phn t d liu. Khi mt phn t d liu c khai bo l phn t ca mt lp

    th n c gi l i tng. Cc hm c nh ngha hp l trong mt lp

    c gi l ccphng thc (method) v chng l cc hm duy nht c th x

    l d liu ca cc i tng ca lp . Mi i tng c ring cho mnh mt

    bn sao cc phn t d liu ca lp. Mi lp bao gm: danh sch cc thuc tnh

    (attribute) v danh sch cc phng thc x l cc thuc tnh . Cng thc

    phn nh bn cht ca k thut LTHT l:

    i tng = D liu + Phng thc

    Chng hn, chng ta xt lp HINH_CN bao gm cc thuc tnh: (x1,y1)

    to gc trn bn tri, d,r l chiu di v chiu rng ca HCN. Cc phng

    thc nhp s liu cho HCN, hm tnh din tch, chu vi v hm hin th. Lp

    HINH_CN c thc m t nh sau:

  • 8/6/2019 Giao Trinh c++. Thay Binh

    5/157

    5

    Hnh 2.2 M t lp HINH_CN

    Ch : Trong LTHT th lp l khi nim tnh, c th nhn bit ngay t vn

    bn chng trnh, ngc li i tng l khi nim ng, n c xc nh

    trong b nhca my tnh, ni i tng chim mt vng b nhlc thc hin

    chng trnh. i tng c to ra x l thng tin, thc hin nhim vc

    thit k, sau b hy b khi i tng ht vai tr.1.2.3. Tru tng ha dliu v bao gi thng tin

    Tru tng ha l cch biu din nhng c tnh chnh v b qua nhng

    chi tit vn vt hoc nhng gii thch. Khi xy dng cc lp, ta phi s dng

    khi nim tru tng ha. V d ta c thnh ngha mt lp m t cc i

    tng trong khng gian hnh hc bao gm cc thuc tnh tru tng nh l kch

    thc, hnh dng, mu sc v cc phng thc xc nh trn cc thuc tnh ny.

    Vic ng gi d liu v cc phng thc vo mt n v cu trc lpc xem nh mt nguyn tc bao gi thng tin. D liu c t chc sao cho

    th gii bn ngoi (cc i tng lp khc) khng truy nhp vo, m ch cho

    php cc phng thc trong cng lp hoc trong nhng lp c quan h k tha

    vi nhau mi c quyn truy nhp. Chnh cc phng thc ca lp sng vai

    tr nh l giao din gia d liu ca i tng v phn cn li ca chng trnh.

    Nguyn tc bao gi d liu ngn cm s truy nhp trc tip trong lp trnh

    c gi l s che giu thng tin.

    HINH_CN

    Thuc tnh :x1,y1

    d,r

    Phng thc :

    Nhp_sl

    Din tch

    Chu vi

    Hin th

  • 8/6/2019 Giao Trinh c++. Thay Binh

    6/157

    6

    1.2.4. K tha

    Ktha l qu trnh m cc i tng ca lp ny c quyn s dng mt

    s tnh cht ca cc i tng ca lp khc. S k tha cho php ta nh ngha

    mt lp mi trn cscc lp tn ti. Lp mi ny, ngoi nhng thnh phnc k tha, s c thm nhng thuc tnh v cc hm mi. Nguyn l k tha

    h trcho vic to ra cu trc phn cp cc lp.

    1.2.5. Tng ng bi

    Tng ng bi l kh nng ca mt khi nim (chng hn cc php ton)

    c th s dng vi nhiu chc nng khc nhau. V d, php + c th biu din

    cho php cng cc s nguyn (int), s thc (float), s phc (complex) hoc

    xu k t (string) v.v... Hnh vi ca php ton tng ng bi ph thuc vo kiud liu m n s dng x l.

    Tng ng bi ng vai quan trng trong vic to ra cc i tng c cu

    trc bn trong khc nhau nhng cng dng chung mt giao din bn ngoi (nh

    tn gi).

    1.2.6. Lin kt ng

    Lin ktng l dng lin kt cc th tc v hm khi chng trnh thc hin

    li gi ti cc hm, th tc . Nh vy trong lin kt ng, ni dung ca on

    chng trnh ng vi th tc, hm s khng c bit cho n khi thc hin li

    gi ti th tc, hm .

    1.2.7. Truyn thng bo

    Cc i tng gi v nhn thng tin vi nhau ging nh con ngi trao i

    vi nhau. Chnh nguyn l trao i thng tin bng cch truyn thng bo cho

    php ta d dng xy dng c h thng m phng gn hn nhng h thngtrong th gii thc. Truyn thng bo cho mt i tng l yu cu i tng

    thc hin mt vic g . Cch ng x ca i tng c m t bn trong lp

    thng qua cc phng thc.

    Trong chng trnh, thng bo gi n cho mt i tng chnh l yu cu

    thc hin mt cng vic c th, ngha l s dng nhng hm tng ng x l

    d liu c khai bo trong i tng . V vy, trong thng bo phi ch ra

    c hm cn thc hin trong i tng nhn thng bo. Thng bo truyn i

    cng phi xc nh tn i tng v thng tin truyn i. V d, lp

    CONGNHAN c th hin l i tng c th c i din bi Hoten nhn

  • 8/6/2019 Giao Trinh c++. Thay Binh

    7/157

    7

    c thng bo cn tnh lng thng qua hm TINHLUONG c xc nh

    trong lp CONGNHAN. Thng bo sc x l nh sau:

    Trong chng trnh hng i tng, mi i tng ch tn ti trong thi

    gian nht nh. i tng c to ra khi n c khai bo v s b hy b khi

    chng trnh ra khi min xc nh ca i tng . S trao i thng tin ch

    c th thc hin trong thi gian i tng tn ti.

    1.3. Cc bc cn thit thit k chng trnh theo hng i tngChng trnh theo hng i tng bao gm mt tp cc i tng v mi

    quan h gia cc i tng vi nhau. V vy, lp trnh trong ngn ng hng

    i tng bao gm cc bc sau:

    1. Xc nh cc dng i tng (lp) ca bi ton.

    2. Tm kim cc c tnh chung (d liu chung) trong cc dng i tng

    ny, nhng g chng cng nhau chia x.

    3. Xc nh lp csda trn cscc c tnh chung ca cc dng itng.

    4. T lp cs, xy dng cc lp dn xut cha cc thnh phn, nhng c

    tnh khng chung cn li ca cc dng i tng. Ngoi ra, ta cn a ra cc lp

    c quan h vi cc lp csv lp dn xut.

    1.4. Cc u im ca lp trnh hng i tng

    Cch tip cn hng i tng gii quyt c nhiu vn tn ti trong

    qu trnh pht trin phn mm v to ra c nhng sn phm phn mm ccht lng cao. Nhng u im chnh ca LTHT l:

    1. Thng qua nguyn l k tha, c th loi bc nhng on chng

    trnh lp li trong qu trnh m t cc lp v mrng kh nng s dng cc lp

    c xy dng.

    2. Chng trnh c xy dng t nhng n th (i tng) trao i vi

    nhau nn vic thit k v lp trnh sc thc hin theo quy trnh nht nh

    ch khng phi da vo kinh nghim v k thut nh trc. iu ny m bort ngn c thi gian xy dng h thng v tng nng sut lao ng.

    i tng Thng bo Thng tin

  • 8/6/2019 Giao Trinh c++. Thay Binh

    8/157

    8

    3. Nguyn l che giu thng tin gip ngi lp trnh to ra c nhng

    chng trnh an ton khng b thay bi nhng on chng trnh khc.

    4. C th xy dng c nh x cc i tng ca bi ton vo i tng

    ca chng trnh.5. Cch tip cn thit kt trng tm vo i tng, gip chng ta xy

    dng c m hnh chi tit v gn vi dng ci t hn.

    6. Nhng h thng hng i tng d mrng, nng cp thnh nhng h

    ln hn.

    7. K thut truyn thng bo trong vic trao i thng tin gia cc i

    tng gip cho vic m t giao din vi cc h thng bn ngoi trnn n gin

    hn.

    8. C th qun l c phc tp ca nhng sn phm phn mm.

    Khng phi trong h thng hng i tng no cng c tt c cc tnh

    cht nu trn. Kh nng c cc tnh cht cn ph thuc vo lnh vc ng

    dng ca d n tin hc v vo phng php thc hin ca ngi pht trin phn

    mm.

    1.5. Cc ngn nghng i tng

    Lp trnh hng i tng khng l c quyn ca mt ngn ng no cbit. Cng ging nh lp trnh c cu trc, nhng khi nim trong lp trnh

    hng i tng c th ci t trong nhng ngn ng lp trnh nh C hoc

    Pascal,... Tuy nhin, i vi nhng chng trnh ln th vn lp trnh s tr

    nn phc tp. Nhng ngn ngc thit kc bit, h trcho vic m t, ci

    t cc khi nim ca phng php hng i tng c gi chung l ngn

    ngi tng. Da vo kh nng p ng cc khi nim v hng i tng, ta

    c th chia ra lm hai loi:1. Ngn ng lp trnh da trn i tng

    2. Ngn ng lp trnh hng i tng

    Lp trnh da trn i tng l kiu lp trnh h trchnh cho vic bao gi,

    che giu thng tin v nh danh cc i tng. Lp trnh da trn i tng c

    nhng c tnh sau:

    Bao gi d liu

    Cch che giu v truy nhp d liuTng to lp v xa b cc i tng

  • 8/6/2019 Giao Trinh c++. Thay Binh

    9/157

    9

    Php ton ti bi

    Ngn ng h trcho kiu lp trnh trn c gi l ngn ng lp trnh da

    trn i tng. Ngn ng trong lp ny khng h trcho vic thc hin k tha

    v lin kt ng, chng hn Ada l ngn ng lp trnh da trn i tng.Lp trnh hng i tng l kiu lp trnh da trn i tng v b sung

    thm nhiu cu trc ci t nhng quan h v k tha v lin kt ng. V

    vy c tnh ca LTHT c th vit mt cch ngn gn nh sau:

    Cc c tnh da trn i tng + k tha + lin kt ng.

    Ngn ng h trcho nhng c tnh trn c gi l ngn ng LTHT, v

    d nh C++, Smalltalk, Object Pascal v.v...

    Vic chn mt ngn ng ci t phn mm ph thuc nhiu vo cc

    c tnh v yu cu ca bi ton ng dng, vo kh nng s dng li ca nhng

    chng trnh c v vo t chc ca nhm tham gia xy dng phn mm.

    1.6. Mt sng dng ca LTHT

    LTHT ang c ng dng pht trin phn mm trong nhiu lnh vc

    khc nhau. Trong s, c ng dng quan trng v ni ting nht hin nay l h

    iu hnh Windows ca hng Microsoft c pht trin da trn k thut

    LTHT. Mt s nhng lnh vc ng dng chnh ca k thut LTHT bao gm:+ Nhng h thng lm vic theo thi gian thc.

    + Trong lnh vc m hnh ha hoc m phng cc qu trnh

    + Cc csd liu hng i tng.

    + Nhng h siu vn bn, multimedia

    + Lnh vc tr tu nhn to v cc h chuyn gia.

    + Lp trnh song song v mng n-ron.

    + Nhng h tng ha vn phng v trgip quyt nh....

  • 8/6/2019 Giao Trinh c++. Thay Binh

    10/157

    10

    CHNG 2

    CC M RNG CA NGN NG C++

    Chng 2 trnh by nhng vn sau y:

    Gii thiu chung vngn ngC++Mt smrng ca ngn ngC++ so vi ngn ngC

    Cc c tnh ca C++ htrlp trnh hng i tng

    Vo ra trong C++

    Cp pht v gii phng b nh

    Bin tham chiu, hng tham chiu

    Truyn tham scho hm theo tham chiu

    Hm tr vgi tr tham chiuHm vi tham sc gi tr mc nh

    Cc hm ni tuyn (inline)

    Hm ti bi

    2.1. Gii thiu chung v C++

    C++ l ngn ng lp trnh hng i tng v l s mrng ca ngn ng

    C. V vy mi khi nim trong C u dng c trong C++. Phn ln cc

    chng trnh C u c th chy c trong C++. Trong chng ny ch tptrung gii thiu nhng khi nim, c tnh mi ca C++ h tr cho lp trnh

    hng i tng. Mt s kin thc c trong C++ nhng c trong ngn ng C

    s khng c trnh by li y.

    2.2. Mt s mrng ca C++ so vi C

    2.2.1. t li ch thch

    Ngoi kiu ch thch trong C bng /* ... */ , C++ a thm mt kiu ch

    thch th hai, l ch thch bt u bng //. Kiu ch thch /*...*/c dng

    cho cc khi ch thch ln gm nhiu dng, cn kiu //c dng cho cc ch

    thch trn mt dng. Chng trnh dch s b qua tt c cc ch thch trong

    chng trnh.

    V d: /* y l

    cu ch thch trn nhiu dng */

    //y l ch thch trn mt dng

  • 8/6/2019 Giao Trinh c++. Thay Binh

    11/157

    11

    2.2.2. Khai bo bin

    Trong C tt c cc cu lnh khai bo bin, mng cc b phi t ti u

    khi. V vy v tr khai bo v v tr s dng ca bin c thcch kh xa nhau,

    iu ny gy kh khn trong vic kim sot chng trnh. C++ khc phcnhc im ny bng cch cho php cc lnh khai bo bin c tht bt k ch

    no trong chng trnh trc khi cc bin c s dng. Phm vi hot ng ca

    cc bin kiu ny l khi trong bin c khai bo.

    V d 2.1 Chng trnh sau y nhp mt dy s thc ri sp xp theo th t

    tng dn:

    #include

    #include #include

    void main()

    {

    int n;

    printf("\n So phan tu cua day N=");

    scanf("%d",&n);

    float *x=(float*)malloc((n+1)*sizeof(float));for (int i=0;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    12/157

    12

    getch();

    }

    2.2.3. Php chuyn kiu bt buc

    Ngoi php chuyn kiu bt buc c vit trong C theo c php:(kiu) biu thc

    C++ cn s dng mt php chuyn kiu mi nh sau:

    Kiu(biu thc)

    Php chuyn kiu ny c dng nh mt hm s chuyn kiu ang c gi.

    Cch chuyn kiu ny thng c s dng trong thc t.

    V d 2.2 Chng trnh sau y tnh sau tng S =n

    1...

    3

    1

    2

    11

    Vi n l mt s nguyn dng nhp t bn phm.

    #include

    #include

    void main()

    {

    int n;

    printf("\n So phan tu cua day N=");

    scanf("%d",&n);

    float s=0.0;

    for (int i=1;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    13/157

    13

    #include

    #include

    void main()

    {

    float a[20][20],smax;

    int m,n,i,j,imax,jmax;

    clrscr();

    puts(" Cho biet so hang va so cot cua ma tran: ");

    scanf("%d%d",&m,&n);

    for (i=0;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    14/157

    14

    printf("\n Co gia tri=%6.1f", smax);

    printf("\n\n Tai hang %d cot %d",imax,jmax);

    getch();

    }

    2.3. Vo ra trong C++

    xut d liu ra mn hnh v nhp d liu t bn phm, trong C++ vn c

    th dng hm printf() v scanf(), ngoi ra trong C++ ta c th dng dng

    xut/nhp chun nhp/xut d liu thng qua hai bin i tng ca dng

    (stream object) l cout v cin.

    2.3.1. Xut dliu

    C php: cout >bin N;

    Ton tcinc nh ngha trc nh mt i tng biu din cho thit b vo

    chun ca C++ l bn phm, cinc s dng kt hp vi ton t trch >>

    nhp d liu t bn phm cho cc bin 1, 2, ..., N.

    Ch :

    nhp mt chui khng qu n k t v lu vo mng mt chiu a (kiu

    char) c th dng hm cin.get nh sau: cin.get(a,n);

    Ton t nhp cin>> s li k t chuyn dng \n trong bm. K t ny

    c th lm tri phng thc cin.get. khc phc tnh trng trn cn dng

    phng thc cin.ignore(1) b qua mt k t chuyn dng.

    s dng cc loi ton t v phng thc ni trn cn khai bo tp tin dn

    hng iostream.h

    2.3.3. nh dng khi in ra mn hnh

    quy nh s thc c hin th ra mn hnh vi p ch s sau du chm

    thp phn, ta s dng ng thi cc hm sau:

    setiosflags(ios::showpoint); // Bt chiu showpoint(p)setprecision(p);

  • 8/6/2019 Giao Trinh c++. Thay Binh

    15/157

    15

    Cc hm ny cn t trong ton t xut nh sau:

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    16/157

    16

    cout >ts[i].d1>>ts[i].d2>>ts[i].d3;

    ts[i].td=ts[i].d1+ts[i].d2+ts[i].d3;

    }

    for (i=0;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    17/157

    17

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    18/157

    18

    2.4.1. Ton tnew cp pht b nh

    Ton t new thay cho hm malloc() v calloc() ca C c c php nh sau:

    new Tn kiu ;

    hoc new (Tn kiu);Trong Tn kiu l kiu d liu ca bin con tr, n c th l: cc kiu d

    liu chun nh int, float, double, char,... hoc cc kiu do ngi lp trnh nh

    ngha nh mng, cu trc, lp,...

    Ch : cp pht b nhcho mng mt chiu, dng c php nh sau:

    Bin con tr = new kiu[n];

    Trong n l s nguyn dng xc nh s phn t ca mng.

    V d: float *p = new float; //cp pht b nhcho bin con tr p c kiu intint *a = new int[100]; //cp pht b nh lu tr mng mt chiu a

    // gm 100 phn t

    Khi s dng ton t new cp pht b nh, nu khng b nh cp

    pht, new s tr li gi tr NULL cho con tr. on chng trnh sau minh ha

    cch kim tra li cp pht b nh:

    double *p;

    int n;cout>n;

    p = new double[n]

    if (p == NULL)

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    19/157

    19

    gim ca tng im, in danh sch th sinh sau khi sp xp, gii phng b nh

    cp pht.

    #include

    #include #include

    #include

    #include

    struct TS

    {

    char ht[20];

    long sobd;

    float td;

    };

    void main(void)

    {

    TS *ts;

    int n;

    coutn;

    ts = new TS[n+1];

    if (ts == NULL)

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    20/157

    20

    cout>ts[i].td;

    }

    for (i=0;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    21/157

    21

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    22/157

    22

    s thao tc trn cc bn sao ny ch khng x l trc tip vi cc tham s thc

    s. Cch ny rt tt nu khi thc hin hm trong chng trnh khng cn lm

    thay i gi tr ca bin gc. Tuy nhin, nhiu khi ta li mun nhng tham s

    thay i khi thc hin hm trong chng trnh. C++ cung cp thm cch truynd liu cho hm theo tham chiu bng cch dng i l tham chiu. Cch lm

    ny c u dim l khng cn to ra cc bn sao ca cc tham s, do d tit kim

    b nhv thi gian chy my. Mt khc, hm ny s thao tc trc tip trn vng

    nhca cc tham s, do d dng thay i gi tr cc tham s khi cn.

    V d 2.7 Chng trnh sau s nhp dy s thc, sp xp dy theo th t tng

    dn v hin th ra mn hnh.

    #include #include

    #include

    void nhapds(double *a,int n)

    {

    for(int i=0;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    23/157

    23

    double x[100];

    int i,n;

    clrscr();

    coutn;

    nhapds(x,n);

    sapxep(x,n);

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    24/157

    24

    coutts[i].d2>>ts[i].d3;

    ts[i].td=ts[i].d1+ts[i].d2+ts[i].d3;

    }

    }

    void hvts(TS &ts1,TS &ts2)

    {

    TS tg=ts1;

    ts1=ts2;

    ts2=tg;

    }

    void sapxep(TS *ts,int n)

    {

    for(int i=0;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    25/157

    25

    ints(ts[i]);

    else

    break;

    getch();

    }

    V d 2.9 Chng trnh sau s nhp mt mng thc kch thc 20x20, in mng

    nhp v in cc phn t ln nht v nh nht trn mi hng ca mng.

    #include

    #include

    #include

    #include

    void nhapmt(float a[20][20],int m,int n)

    {

    for(int i=0;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    26/157

    26

    for(int i=1;ix[vtmax]) vtmax=i;

    if(x[i]>n;

    nhapmt(a,m,n);

    inmt(a,m,n);

    float *p=(float*) a;

    int vtmax,vtmin;

    for(int i=0;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    27/157

    27

    }

    Trong trng hp ny biu thc c tr li trong cu lnh return phi l

    tn ca mt bin xc nh t bn ngoi hm, bi v khi mi c th s dng

    c gi tr ca hm. Khi ta tr v mt tham chiu n mt bin cc b khai bobn trong hm, bin cc b ny s b mt i khi kt thc thc hin hm. Do vy

    tham chiu ca hm s khng cn ngha na.

    Khi gi tr tr v ca hm l tham chiu, ta c th gp cc cu lnh gn hi

    khc thng, trong v tri l mt li gi hm ch khng phi l tn ca mt

    bin. iu ny hon ton hp l, bi v bn thn hm c gi tr tr v l mt

    tham chiu. Ni cch khc, v tri ca lnh gn c th l li gi n mt hm c

    gi tr tr v l mt tham chiu.Xem cc v d sau:

    V d 2.10

    #include

    #include

    int z;

    int &f()// ham tra ve mot bi danh cua bien toan bo z

    {

    return z;

    }

    void main()

    {

    f()=50;//z=50

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    28/157

    28

    clrscr();

    int b =10, a= 7, c= 20;

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    29/157

    29

    {

    //Cc cu lnh

    }

    Ch :i vi cc hm c tham s mc nh th li gi hm cn vit theo quynh: Cc tham s vng mt trong li gi hm tng ng vi cc tham s mc

    nh cui cng (tnh t tri sang phi), v d vi hm:

    void f(int a, float x, char *st=TRUNG TAM, int b=1, double y = 1.234);

    th cc li gi hm ng:

    f(3,3.4,TIN HOC,10,1.0);//y tham s

    f(3,3.4,ABC); //Thiu 2 tham s cui

    f(3,3.4); //Thiu 3 tham s cui

    Cc li gi hm sai:

    f(3);

    f(3,3.4, ,10);

    V d 2.12

    #include

    #include

    void ht(char *dc="TRUNG TAM",int n=5);void ht(char *dc,int n)

    {

    for(int i=0;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    30/157

    30

    mi on chong trnh thc hin nhim v ca hm c thay bng li gi hm.

    Tuy nhin hm cng c nhc im l lm l chm tc thc hin chng

    trnh v phi thc hin mt s thao tc c tnh th tc mi khi gi hm nh: cp

    pht vng nhcho cc tham s v bin cc b, truyn d liu ca cc tham scho cc i, gii phng vng nhtrc khi thot khi hm.

    C++ cho kh nng khc phc c nhc im ni trn bng cch dng

    hm ni tuyn. bin mt hm thnh hm ni tuyn ta vit thm t kha

    inline vo trc khai bo nguyn mu hm.

    Ch : Trong mi trng hp, t kha inline phi xut hin trc cc li gi

    hm th trnh bin dch mi bit cn x l hm theo kiu inline.

    V d hm f() trong chng trnh sau s khng phi l hm ni tuyn v inline

    vit sau li gi hm.

    V d 2.13

    #include

    #include

    void main()

    {

    int s ;s=f(5,6);

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    31/157

    31

    hm theo kiu ni tuyn. T kho inline ch l mt t kho gi cho chng

    trnh dch ch khng phi l mt mnh lnh bt buc.

    V d 2.14 Chong trnh sau s dng hm inline tnh chu vi v din tch hnh

    ch nht.#include

    #include

    inline void dtcvhcn(int a,int b,int &dt,int &cv)

    {

    dt=a*b;

    cv=2*(a+b);

    }void main()

    {

    int a[20],b[20],cv[20],dt[20],n;

    coutn;

    for(int i=0;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    32/157

    32

    #include

    inline void dtcvhcn(int a,int b,int &dt,int &cv);

    void main()

    {

    int a[20],b[20],cv[20],dt[20],n;

    coutn;

    for(int i=0;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    33/157

  • 8/6/2019 Giao Trinh c++. Thay Binh

    34/157

    34

    }

    int max(int *x,int n)

    {

    int s=x[0];

    for(int i=1;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    35/157

    35

    Ch : Nu hai hm trng tn v trng i th trnh bin dch khng th phn

    bit c. Ngay c khi hai hm ny c cng kiu khc nhau th trnh bin dch

    vn bo li. V d sau xy dng hai hm cng c tn l f v cng mt i

    nguyn a, nhng kiu hm khc nhau. Hm th nht c kiu nguyn( tr v a*a),hm th hai c kiu void. Chng trnh sau s b thng bo li khi bin dch.

    V d 2.17

    #include

    #include

    int f(int a);

    void f(int a);

    int f(int a){

    return a*a;

    }

    void f(int a)

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    36/157

    36

    BI TP

    1. Vit chng trnh thc hin cc yu cu sau y:

    - Nhp d liu cho cc sinh vin (dng cu trc danh sch lin kt n),

    cc thng tin ca sinh vin bao gm: m sinh vin, h tn, lp, imtrung bnh.

    - Chng trnh c s dng ton t new v delete.

    - In ra danh sch sinh vin c sp xp v th theo im trung bnh.

    2. Vit chng trnh sp xp mt mng thc hai chiu theo th t tng

    dn, trong chng trnh c c s dng ton t new v delete.

    3. Vit cc hm ti bi tnh din tch tam gic, din tch hnh ch nht,

    din tch hnh trn.

    4. Vit chng trnh nhn hai ma trn Amxn v Bnxp , mi ma trn c cp

    pht ng v cc gi tr ca chng pht sinh ngu nhin.

  • 8/6/2019 Giao Trinh c++. Thay Binh

    37/157

    37

    CHNG 3

    LP

    Chng ny trnh by nhng vn sau y:

    nh ngh

    a lp

    To lp i tng

    Truy nhp n cc thnh phn ca lp

    Con tri tng

    Con tr this

    Hm bn

    Dliu thnh phn tnh, hm thnh phn tnh

    Hm to, hm hy

    Hm to sao chp

    Lp l khi nim trung tm ca lp trnh hng i tng, n l s m

    rng ca cc khi nim cu trc (struct) ca C. Ngoi cc thnh phn d liu,

    lp cn cha cc thnh phn hm, cn gi l phng thc (method) hoc hm

    thnh vin (member function). Lp c th xem nh mt kiu d liu cc bin,

    mng i tng. T mt lp nh ngha, c th to ra nhiu i tng khc

    nhau, mi i tng c vng nhring.

    Chng ny s trnh by cch nh ngha lp, cch xy dng phng thc,

    gii thch v phm vi truy nhp, s dng cc thnh phn ca lp, cch khai bo

    bin, mng cu trc, li gi ti cc phng thc .

    3.1. nh ngha lp

    C php: Lp c nh ngha theo mu :

    class tn_lp{

    private: [Khai bo cc thuc tnh]

    [nh ngha cc hm thnh phn (phng thc)]

    public : [Khai bo cc thuc tnh]

    [nh ngha cc hm thnh phn (phng thc)]

    } ;

    Thuc tnh ca lp c gi l d liu thnh phn v hm c gi lphng thc hoc hm thnh vin. Thuc tnh v hm c gi chung l cc

  • 8/6/2019 Giao Trinh c++. Thay Binh

    38/157

    38

    thnh phn ca lp. Cc thnh phn ca lp c t chc thnh hai vng: vng

    s hu ring (private) v vng dng chung (public) quy nh phm vi s

    dng ca cc thnh phn. Nu khng quy nh c th (khng dng cc t kha

    private v public) th C++ hiu l private. Cc thnh phn private chc sdng bn trong lp (trong thn ca cc hm thnh phn). Cc thnh phn public

    c php s dng c bn trong v bn ngoi lp. Cc hm khng phi l hm

    thnh phn ca lp th khng c php s dng cc thnh phn ny.

    Khai bo cc thu c tnh ca lp: c thc hin y nh vic khai bo bin.

    Thuc tnh ca lp khng th c kiu chnh ca lp , nhng c th l kiu con

    tr ca lp ny,

    V d:

    class A

    {

    A x; //Khng cho php, v x c kiu lp A

    A *p ; // Cho php, v p l con tr kiu lp A

    } ;

    nh ngha cc hm thnh phn: Cc hm thnh phn c thc xy

    dng bn ngoi hoc bn trong nh ngha lp. Thng thng, cc hm thnh

    phn n gin, c t dng lnh sc vit bn trong nh ngha lp, cn cc

    hm thnh phn di th vit bn ngoi nh ngha lp. Cc hm thnh phn vit

    bn trong nh ngha lp c vit nh hm thng thng. Khi nh ngha hm

    thnh phn bn ngoi lp, ta dng c php sau y:

    Kiu_tr_v_ca_hm Tn_lp::Tn_hm(khai bo cc tham s)

    { [ni dung hm]

    }

    Ton t :: c gi l ton t phn gii min xc nh, c dng ch ra

    lp m hm thuc vo.

    Trong thn hm thnh phn, c th s dng cc thuc tnh ca lp, cc hm

    thnh phn khc v cc hm t do trong chng trnh.

    Ch :

    Cc thnh phn d liu khai bo l private nhm bo m nguyn l che

    du thng tin, bo v an ton d liu ca lp, khng cho php cc hm

    bn ngoi xm nhp vo d liu ca lp .

  • 8/6/2019 Giao Trinh c++. Thay Binh

    39/157

    39

    Cc hm thnh phn khai bo l public c thc gi ti t cc hm

    thnh phn public khc trong chng trnh .

    3.2. To lp i tng

    Sau khi nh ngha lp, ta c th khai bo cc bin thuc kiu lp. Cc binny c gi l cc i tng. C php khai bo bin i tng nh sau:

    Tn_lp Danh_sch_bin ;

    i tng cng c th khai bo khi nh ngha lp theo c php sau:

    class tn_lp

    {

    ...

    } ;

    Mi i tng sau khi khai bo sc cp pht mt vng nhring

    cha cc thuc tnh ca chng. Khng c vng nhring cha cc hm thnh

    phn cho mi i tng. Cc hm thnh phn sc s dng chung cho tt c

    cc i tng cng lp.

    3.3. Truy nhp ti cc thnh phn ca lp

    truy nhp n d liu thnh phn ca lp, ta dng c php:Tn_i_tng. Tn_thuc_tnh

    Cn ch rng d liu thnh phn ring ch c thc truy nhp bi nhng

    hm thnh phn ca cng mt lp, i tng ca lp cng khng th truy nhp.

    s dng cc hm thnh phn ca lp, ta dng c php:

    Tn_i_tng. Tn_hm (Cc_khai_bo_tham_s_thc_s)

    V d 3.1

    #include

    #include

    class DIEM

    {

    private :

    int x,y ;

    public :

    void nhapsl( ){

  • 8/6/2019 Giao Trinh c++. Thay Binh

    40/157

    40

    cout >x>>y ;

    }

    void hienthi( )

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    41/157

    41

    A ob;

    ob.nhap();

    ob.hienthi();

    getch();

    }

    Ch : Cc hm t do c th c cc i l i tng nhng trong thn hm

    khng th truy nhp n cc thuc tnh ca lp. V d gi s nh ngha lp :

    class DIEM

    {

    private :

    double x,y ; // toa do cua diem

    public :

    void nhapsl()

    {

    cout > x>>y ;

    }

    void in()

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    42/157

    42

    #include

    class Box

    {

    private:

    int dai;

    int rong;

    int cao;

    public:

    int get_thetich(int lth,int wdth = 2,int ht = 3);

    };

    int Box::get_thetich(int l, int w, int h)

    {

    dai = l;

    rong = w;

    cao = h;

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    43/157

    43

    10 2 3 60

    10 7 3 210

    5 5 5 125

    V d 3.4 V d sau minh ha vic s dng hm inline trong lp:

    #include

    #include

    #include

    class phrase

    {

    private:char dongtu[10];

    char danhtu[10];

    char cumtu[25];

    public:

    phrase();

    inline void set_danhtu(char* in_danhtu);

    inline void set_dongtu(char* in_dongtu);inline char* get_phrase(void);

    };

    void phrase::phrase()

    {

    strcpy(danhtu,"");

    strcpy(dongtu,"");

    strcpy(cumtu,"");

    }

    inline void phrase::set_danhtu(char* in_danhtu)

    {

    strcpy(danhtu, in_danhtu);

    }

    inline void phrase::set_dongtu(char* in_dongtu)

    {

    strcpy(dongtu, in_dongtu);

    }

  • 8/6/2019 Giao Trinh c++. Thay Binh

    44/157

    44

    inline char* phrase::get_phrase(void)

    {

    strcpy(cumtu,dongtu);

    strcat(cumtu," the ");

    strcat(cumtu,danhtu);

    return cumtu;

    }

    void main()

    {

    phrase text;

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    45/157

    45

    int number;

    public:

    void print_it(const int data_value);

    };

    void constants::print_it(const int data_value)

    {

    number = data_value;

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    46/157

    46

    3.4. Con tri tng

    Con tri tng dng cha a ch ca bin i tng, c khai bo

    nh sau :

    Tn_lp * Tn_con_ tr ;V d : Dng lp DIEM, ta c th khai bo:

    DIEM *p1, *p2, *p3 ; // Khai bo 3 con tr p1, p2, p3

    DIEM d1, d2 ; //Khai bo hai i tng d1, d2

    DIEM d [20] ; // Khai bo mng i tng

    C th thc hin cu lnh :

    p1 = &d2 ; //p1 cha a ch ca d2, p1 tr ti d2

    p2 =d ; // p2 tr ti u mng dp3 =new DIEM //to mt i tng v cha a ch ca n vo p3

    truy xut cc thnh phn ca lp t con tri tng, ta vit nh sau :

    Tn_con_tr -> Tn_thuc_tnh

    Tn_con_tr -> Tn_hm(cc tham s thc s)

    Nu con tr cha u a ch ca mng, c th dng con tr nh tn mng.

    V d 3.6

    #include #include

    class mhang

    { int maso;

    float gia;

    public: void getdata(int a, float b)

    {maso= a; gia= b;}

    void show(){ cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    47/157

    47

    int x,i;

    float y;

    cout getdata(x,y);

    p++;}

    for (i = 0; i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    48/157

    48

    cin >>this->x>>this->y ;

    }

    Con trthis l i th nht ca hm thnh phn. Khi mt li gi hm thnh

    phn c pht ra bi mt i tng th tham s truyn cho con trthis

    chnh la ch ca i tng .

    V d: Xt mt li gi ti hm nhapsl() :

    DIEM d1 ;

    d1.nhapsl();

    Trong trng hp ny ca d1 th this =&d1. Do this -> x chnh l d1.x v

    this-> y chnh l d1.y

    Ch : Ngoi tham sc bit this khng xut hin mt cch tng minh, hm

    thnh phn lp c th c cc tham1 khc c khai bo nh trong cc hm

    thng thng.

    V d 3.7

    #include

    #include

    class time

    { int h,m;public :

    void nhap(int h1, int m1)

    { h= h1; m = m1;}

    void hienthi(void)

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    49/157

    49

    time ob1, ob2,ob3;

    ob1.nhap(2,45);

    ob2.nhap(5,40);

    ob3.tong(ob1,ob2);

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    50/157

    50

    ...

    }

    double f2 (...)

    { ...

    }

    Cch 2: Dng t kha friend xy dng hm trong nh ngha lp . Mu vit

    nh sau :

    class A

    {

    private :

    // Khai bo cc thuc tnh

    public :

    ...

    // Khai bo cc hm bn ca lp A

    void f1 (...)

    {

    ...

    }

    double f2 (...)

    {

    ...

    }

    } ;

    Hm bn c nhng tnh cht sau:

    - Hm bn khng phi l hm thnh phn ca lp.

    - Vic truy nhp ti hm bn c thc hin nh hm thng thng.

    - Trong thn hm bn ca mt lp c th truy nhp ti cc thuc tnh ca i

    tng thuc lp ny. y l s khc nhau duy nht gia hm bn v hm thng

    thng.

    - Mt hm c th l bn ca nhiu lp. Lc n c quyn truy nhp ti tt c

    cc thuc tnh ca cc i tng trong cc lp ny. lm cho hm f trthnhbn ca cc lp A, B v C ta s dng mu vit sau :

  • 8/6/2019 Giao Trinh c++. Thay Binh

    51/157

    51

    class A ; //Khai bo trc lp A

    class B ; // Khai bo trc lp B

    class C ; // Khai bo trc lp C

    //nh ngha lp Aclass A

    {

    // Khai bo f l bn ca A

    friend void f(... )

    } ;

    //nh ngha lp B

    class B

    {

    // Khai bo f l bn ca B

    friend void f(...)

    } ;

    //nh ngha lp C

    class C

    {

    // Khai bo f l bn ca C

    friend void f(...)

    } ;

    // Xy dng hm f

    void f(...)

    {

    ...

    } ;

    V d 3.8

    #include

    #include

    class sophuc

    {float a,b;

    public : sophuc() {}

    sophuc(float x, float y)

    {a=x; b=y;}

  • 8/6/2019 Giao Trinh c++. Thay Binh

    52/157

    52

    friend sophuc tong(sophuc,sophuc);

    friend void hienthi(sophuc);

    };

    sophuc tong(sophuc c1,sophuc c2)

    {sophuc c3;

    c3.a=c1.a + c2.a ;

    c3.b=c1.b + c2.b ;

    return (c3);

    }

    void hienthi(sophuc c)

    {cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    53/157

    53

    public:

    void nhap(int a)

    { v2=a;}

    void hienthi(void)

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    54/157

    54

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    55/157

    55

    int A::ts; // Khi gn cho ts gi tr 0

    int A::ts = 1234; // Khi gn cho ts gi tr 1234

    Ch : Khi cha khai bo th thnh phn tnh cha tn ti. Hy xem chng

    trnh sau:V d 3.10

    #include

    #include

    class HDBH

    {

    private:

    char *tenhang;

    double tienban;

    static int tshd;

    static double tstienban;

    public:

    static void in()

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    56/157

    56

    class HDBH

    {

    private:

    int shd;

    char *tenhang;

    double tienban;

    static int tshd;

    static double tstienban;

    public:

    static void in()

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    57/157

    57

    Tn lp :: Tn hm thnh phn tnh(cc tham s thc s)

    - V hm thnh phn tnh l c lp vi cc i tng, nn khng th dng hm

    thnh phn tnh x l d liu ca cc i tng trong li gi phng thc

    tnh. Ni cch khc khng cho php truy nhp cc thuc tnh (tr thuc tnhtnh) trong thn hm thnh phn tnh. on chng trnh sau minh ha iu ny:

    class HDBH

    {

    private:

    int shd;

    char *tenhang;

    double tienban;

    static int tshd;

    static double tstienban;

    public:

    static void in()

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    58/157

    58

    }

    static void show_n(void)

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    59/157

    59

    c th thc hin mt s cng vic khc nhm chun b cho i tng mi. Khi

    xy dng hm to cn lu nhng c tnh sau ca hm to:

    - Tn hm to trng vi tn ca lp.

    - Hm to khng c kiu tr v.- Hm to phi c khai bo trong vng public.

    - Hm to c thc xy dng bn trong hoc bn ngoi nh ngha lp.

    - Hm to c th c tham s hoc khng c tham s.

    - Trong mt lp c th c nhiu hm to (cng tn nhng khc cc tham

    s).

    V d 3.13

    class DIEM{

    private:

    int x,y;

    public:

    DIEM() //Ham tao khong tham so

    {

    x = y = 0;}

    DIEM(int x1, int y1) //Ham tao co tham so

    {

    x = x1;y=y1;

    }

    //Cac thanh phan khac

    };

    Ch 1: Nu lp khng c hm to, chng trnh dch s cung cp mt hm to

    mc nh khng i, hm ny thc cht khng lm g c. Nh vy mt i tng

    to ra chc cp pht b nh, cn cc thuc tnh ca n cha c xc nh.

    V d 3.14

    #include

    #inlcule

    class DIEM

    {

    CH

  • 8/6/2019 Giao Trinh c++. Thay Binh

    60/157

    60

    private:

    int x,y;

    public:

    void in()

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    61/157

    61

    #include

    #include

    #include

    class DIEM

    {

    private:

    int x,y;

    public:

    DIEM()

    {

    x = y = 0;

    }

    DIEM(int x1, int y1)

    {

    x = x1; y = y1;

    }

    friend void in(DIEM d)

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    62/157

    62

    in(*d); // Goi ham ban in()

    DIEM(2,2).in();// Goi ham thanh phan in()

    DIEM t[3]; // 3 lan goi ham tao khong doi

    DIEM *q; // Goi ham tao khong doi

    int n;

    cout > n;

    q = new DIEM [n+1]; //n+1 lan goi ham tao khong doi

    for (int i=0;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    63/157

    63

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    64/157

    64

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    65/157

    65

    void rectangle::set(int new_dai,int new_rong)

    {

    dai = new_dai;

    rong = new_rong;

    }

    int rectangle::get_area()

    {

    return (dai * rong);

    }

    int rectangle::get_extra()

    {

    return extra_data++; }

    void main()

    {

    rectangle small, medium, large;

    small.set(5, 7);

    large.set(15, 20);

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    66/157

    66

    Gia tri du lieu tinh la : 2

    Gia tri du lieu tinh la : 3

    3.9. Hm to sao chp

    3.9.1. Hm to sao chp mc nh

    Gi s nh ngha mt lp ABC no . Khi :

    - Ta c th dng cu lnh khai bo hoc cp pht b nh to cc i

    tng mi, v d:

    ABC p1, p2;

    ABC *p = new ABC;

    - Ta cng c th dng lnh khai bo to mt i tng mi t mt i

    tng tn ti, v d:ABC u;

    ABC v(u); // To v theo u

    Cu lnh ny c ngha nh sau:

    - Nu trong lp ABC cha xy dng hm to sao chp, th cu lnh ny

    s gi ti mt hm to sao chp mc nh ca C++. Hm ny s sao chp ni

    dung tng bit ca u vo cc bit tng ng ca v. Nh vy cc vng nhca u v

    v s c ni dung nh nhau.- Nu trong lp ABC c hm to sao chp th cu lnh:

    PS v(u);

    s to ra i tng mi v, sau gi ti hm to sao chp khi gn v theo u.

    V d sau minh ha cch dng hm to sao chp mc nh:

    Trong chng trnh a vo lp PS (phn s):

    + Cc thuc tnh gm: t (t s) v m (mu).

    + Trong lp m khng c phng thc no c m ch c hai hm bn lcc hm ton t nhp (>>) v xut (

  • 8/6/2019 Giao Trinh c++. Thay Binh

    67/157

    67

    private: int t,m;

    public:

    friend ostream& operator

  • 8/6/2019 Giao Trinh c++. Thay Binh

    68/157

    68

    public:

    PS(const PS &p)

    {

    t= p.t;

    m= p.m;

    }

    };

    Hm to sao chp trong v d trn khng khc g hm to sao chp mc nh.

    Ch :

    - Nu lp khng c cc thuc tnh kiu con tr hoc tham chiu th dng

    hm to sao chp mc nh l .

    - Nu lp c cc thuc tnh con tr hoc tham chiu, th hm to sao chp

    mc nh cha p ng c yu cu.

    class DT

    {

    private:

    int n; // Bac da thuc

    double *a; // Tro toi vung nho chua cac he so da thuc a0, a1,

    public:

    DT()

    {

    n = 0; a = NULL;

    }

    DT(int n1)

    {n = n1;

    a = new double[n1+1];

    }

    friend ostream& operator> (istream& is,DT &d);

    };

  • 8/6/2019 Giao Trinh c++. Thay Binh

    69/157

    69

    By gichng ta hy theo di xem vic dng hm to mc nh trong on

    chng trnh sau s dn n sai lm nh th no:

    DT d;

    cin >> d; /* Nhp i tng d gm: nhp mt s nguyn dng v gn cho d.n, cp

    pht vng nhcho d.n, nhp cc h s ca a thc v cha vo vng nhc

    cp pht

    */

    DT u(d);

    /* Dng hm to mc nh xy dng i tng u theo d. Kt qu: u.n =

    d.n v u.a = d.a. Nh vy hai con tr u.a v d.a cng trn mt vng nh.

    */

    Nhn xt: Mc ch ca ta l to ra mt i tng u ging nh d, nhng c lp

    vi d. Ngha l khi d thay i th u khng bnh hng g. Th nhng mc tiu

    ny khng t c, v u v d c chung mt vng nhcha h s ca a thc,

    nn khi sa i cc h s ca a thc trong d th cc h s ca a thc trong u

    cng thay i theo. Cn mt trng hp na cng dn n li l khi mt trong

    hai i tng u v d b gii phng (thu hi vng nhcha a thc) th i tng

    cn li cng s khng cn vng nhna.

    V d sau s minh ha nhn xt trn: Khi d thay i th u cng thay i v

    ngc li khi u thay i th d cng thay i theo.

    V d 3.20

    #include

    #include

    #include

    class DT

    {

    private:

    int n; // Bac da thuc

    double *a; // Tro toi vung nho chua cac he

    //so da thuc a0,a1,...

    public:

    DT()

    {

  • 8/6/2019 Giao Trinh c++. Thay Binh

    70/157

    70

    this->n=0; this->a=NULL;

    }

    DT(int n1)

    {

    this->n=n1;

    this->a= new double[n1+1];

    }

    friend ostream& operator> (istream& is,DT &d);

    };

    ostream& operator

  • 8/6/2019 Giao Trinh c++. Thay Binh

    71/157

    71

    clrscr();

    cout d;

    DT u(d);

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    72/157

    72

    friend ostream& operator> (istream& is,DT &d);

    };

    DT::DT(const DT &d)

    {

    this->n = d.n;

    this->a = new double[d.n+1];

    for (int i=0;ia[i] = d.a[i];

    }

    ostream& operator

  • 8/6/2019 Giao Trinh c++. Thay Binh

    73/157

    73

    clrscr();

    cout d;

    DT u(d);

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    74/157

    74

    public:

    ~A()

    {

    n = 0;

    delete a;

    }

    };

    V d 3.22

    #include

    class Count{

    private:

    static int counter;

    int obj_id;

    public:

    Count();

    static void display_total();

    void display();

    ~Count();

    };

    int Count::counter;

    Count::Count()

    {

    counter++;

    obj_id = counter;

    }

    Count::~Count(){

    counter--;

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    75/157

    75

    }

    void Count::display()

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    76/157

    76

    BI TP

    1. Xy dng lp thi gian Time. D liu thnh phn bao gm gi, pht giy.

    Cc hm thnh phn bao gm: hm to, hm truy cp d liu, hm

    normalize() chun ha d liu nm trong khong quy nh ca gi(0 gi< 24) , pht (0 pht

  • 8/6/2019 Giao Trinh c++. Thay Binh

    77/157

    77

    7. Xy dng lp hng i Queue cha phn t kiu int. Cc hm thnh phn

    bao gm: hm to, hm hy v nhng ton t hng i thng thng: hm

    insert() thm phn t vo hng i, hm remove() loi b phn

    t, hm isEmpty() kim tra hng i c rng khng, hm isFull() kimtra hng i c y khng. S dng mt mng thc hin.

    4. Xy dng lp a thc v cc phng thc cng, tr hai a thc.

    8. Xy dng lp Sinhvien qun l h tn sinh vin, nm sinh, im thi 9 mn

    hc ca cc sinh vin. Cho bit sinh vin no c lm kha lun tt nghip,

    bao nhiu sinh vin thi tt nghip, bao nhiu sinh vin thi li, tn mn thi li>

    Tiu chun xt nh sau:

    - Sinh vin lm kha lun phi c im trung bnh t 7 tr ln, trong khng c mn no di 5.

    - Sinh vin thi t nghip khi im trung bnh nh hn 7 v im cc mn

    khng di 5.

    - Sinh vin thi li mn di 5.

    9. Xy dng lp vector lu tr cc vectgm cc s thc. Cc thnh phn

    d liu bao gm:

    - Kch thc vect.

    - Mt mng ng cha cc thnh phn ca vect.

    Cc hm thnh phn bao gm hm to, hm hy, hm tnh tch v hng hai

    vect, tnh chun ca vect(theo chun bt k no ).

    10. Xy dng lp Phanso vi d liu thnh phn l t v mu s. Cc hm

    thnh phn bao gm:

    - Cng hai phn s, kt qu phi dc ti gin

    - Tr hai phn s, kt qu phi dc ti gin

    - Nhn hai phn s, kt qu phi dc ti gin

    - Chia hai phn s, kt qu phi dc ti gin

  • 8/6/2019 Giao Trinh c++. Thay Binh

    78/157

    78

    CHNG 4

    TON T TI BI

    Chng 4 trnh by cc vn sau:

    nh ngh

    a ton t

    ti b

    iMt slu khi xy dng ton tti bi

    Mt sv d minh ha

    4.1. nh ngha ton tti bi

    Cc ton t cng tn thc hin nhiu chc nng khc nhau c gi l ton

    t ti bi. Dng nh ngha tng qut ca ton t ti bi nh sau:

    Kiu_tr_v operator op(danh sch tham s)

    {//thn ton t}Trong : Kiu_tr_v l kiu kt qu thc hin ca ton t.

    op l tn ton t ti bi

    operator op(danh sch tham s) gi l hm ton t ti bi, n c th

    l hm thnh phn hoc l hm bn, nhng khng th l hm tnh. Danh sch

    tham sc khai bo tng t khai bo bin nhng phi tun theo nhng quy

    nh sau:

    - Nu ton t ti bi l hm thnh phn th: khng c tham s cho ton t mtngi v mt tham s cho ton t hai ngi. Cng ging nh hm thnh phn

    thng thng, hm thnh phn ton t c i u tin (khng tng minh) l

    con tr this .

    - Nu ton t ti bi l hm bn th: c mt tham s cho ton t mt ngi v hai

    tham s cho ton t hai ngi.

    Qu trnh xy dng ton tti bi c thc hin nhsau:

    - nh ngha lp xc nh kiu d liu sc s dng trong cc ton tti bi

    - Khai bo hm ton t ti bi trong vng public ca lp

    - nh ngha ni dung cn thc hin

    4.2. Mt s lu khi xy dng ton tti bi

    1. Trong C++ ta c th a ra nhiu nh ngha mi cho hu ht cc ton t

    trong C++, ngoi tr nhng ton t sau y:

    - Ton t xc nh thnh phn ca lp (.)- Ton t phn gii min xc nh (::)

  • 8/6/2019 Giao Trinh c++. Thay Binh

    79/157

    79

    - Ton t xc nh kch thc (sizeof)

    - Ton tiu kin 3 ngi (?:)

    2. Mc du ng ngha ca ton tc mrng nhng c php, cc quy tc vn

    phm nh s ton hng, quyn u tin v th t kt hp thc hin ca cc tont vn khng c g thay i.

    3. Khng th thay i ngha cbn ca cc ton t nh ngha trc, v d

    khng thnh ngha li cc php ton +, - i vi cc s kiu int, float.

    4. Cc ton t = , ( ) , [ ] , -> yu cu hm ton t phi l hm thnh phn ca

    lp, khng th dng hm bn nh ngha ton t ti bi.

    4.3. Mt s v d

    V d 4.1 Ton t ti bi mt ngi, dng hm bn#include

    #include

    class Diem

    {

    private:

    float x,y,z;

    public:Diem() {}

    Diem(float x1,float y1,float z1)

    { x = x1; y = y1; z=z1;}

    friend Diem operator -(Diem d)

    {

    Diem d1;

    d1.x = -d.x; d1.y = -d.y;d1.z=-d.z;

    return d1;

    }

    void hienthi()

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    80/157

    80

    clrscr();

    Diem p(2,3,-4),q;

    q = -p;

    p.hienthi();

    q.hienthi();

    getch();

    }

    V d 4.2 Ton t ti bi hai ngi, dng hm bn

    #include

    #include

    class Diem

    {

    private:

    float x,y,z;

    public:

    Diem() {}

    Diem(float x1,float y1,float z1)

    { x = x1; y = y1; z=z1;}

    friend Diem operator +(Diem d1, Diem d2)

    {

    Diem tam;

    tam.x = d1.x + d2.x;

    tam.y = d1.y + d2.y;

    tam.z = d1.z + d2.z;

    return tam;

    }void hienthi()

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    81/157

    81

    d3=d1+d2;

    d1.hienthi();

    d2.hienthi();

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    82/157

    82

    }

    V d 4.4 Ton t ti bi hai ngi, dng hm thnh phn

    #include

    #include class Diem

    {

    private:

    float x,y,z;

    public:

    Diem() {}

    Diem(float x1,float y1,float z1)

    { x = x1; y = y1; z=z1;}

    Diem operator +(Diem d2)

    {

    x = x + d2.x;

    y = y + d2.y;

    z = z + d2.z;

    return (*this);

    }

    void hienthi()

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    83/157

    83

    }

    V d 4.5

    #include

    #include class Diem

    {

    private:

    int x,y;

    public:

    Diem() {}

    Diem(int x1,int y1)

    { x = x1; y = y1;}

    void operator -()

    {

    x = -x; y = -y;

    }

    void hienthi()

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    84/157

    84

    sophuc(float x, float y)

    {a=x; b=y;}

    sophuc operator +(sophuc c2)

    { sophuc c3;

    c3.a= a + c2.a ;

    c3.b= b + c2.b ;

    return (c3);

    }

    void hienthi(sophuc c)

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    85/157

    85

    {

    a= a + c2.a ;

    b= b + c2.b ;

    return (*this);

    }

    void hienthi(sophuc c)

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    86/157

    86

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    87/157

    87

    string string::operator =(string s2)

    {

    strcpy(s,s2.s) ;

    return *this;

    }

    int string::operator 0 ;

    }

    int string::operator ==(string s2)

    {

    return strcmp(s,s2.s)==0 ;

    }

    void main()

    { clrscr();

    string o1 ("Trung Tam "), o2 (" Tin hoc"), o3;

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    88/157

    88

    if (o2 == o3)

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    89/157

    89

    }

    Diem Diem::operator ++(int)

    {

    Diem temp = *this;

    ++*this;

    return temp;

    }

    Diem & Diem::operator --()

    {

    x--;

    y--;

    return (*this);

    }

    Diem Diem::operator --(int)

    {

    Diem temp = *this;

    --*this;

    return temp;

    }

    void main()

    {

    clrscr();

    Diem d1(5,10),d2(20,25),d3(30,40),d4(50,60);

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    90/157

    90

    --d3;

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    91/157

    91

    {

    private:

    int giatri;

    public:

    SO(int x=0)

    {

    giatri = x;

    }

    SO (SO &tso)

    {

    giatri = tso.giatri;

    }

    friend istream& operator>>(istream&,SO&);

    friend ostream& operator

  • 8/6/2019 Giao Trinh c++. Thay Binh

    92/157

    92

    }

  • 8/6/2019 Giao Trinh c++. Thay Binh

    93/157

    93

    BI TP

    1. nh ngha cc php ton ti bi =, ==, ++, --, +=, trn lp Time (bi

    tp 1 chng 3).2. nh ngha cc php ton ti bi =, ==, ++, --, +=, trn lp Date (bi

    tp 2 chng 3).

    1. nh ngha cc php ton ti bi +, -, *, =, ==, != trn lp cc ma trn vung.

    2. nh ngha cc php ton ti bi +, -, * trn lp a thc.

    3. nh ngha cc php ton ti bi +, -, *, /, =, ==, +=, -=, *=, /= , , =,

    != , ++, -- trn lp Phanso (bi tp 10 chng 3).

    4. Ma trn c xem l mt vectm mi thnh phn ca n l mt vect. Theo

    ngha , hy nh ngha lp Matran da trn vect. Tm cch chng

    trnh dch hiu c php truy nhp m[i][j], trong m l mt i tng

    thuc lp Matran.

  • 8/6/2019 Giao Trinh c++. Thay Binh

    94/157

    94

    CHNG 5

    K THA

    Chng 5 trnh by cc vn sau:

    n k

    th

    a,

    a k

    th

    aHm to v hm hy i vi sktha

    Hm o, lp cso

    5.1. Gii thiu

    K tha l mt trong cc khi nim csca phng php lp trnh hng

    i tng. Tnh k tha cho php nh ngha cc lp mi t cc lp c. Mt

    lp c th l lp cscho nhiu lp dn xut khc nhau. Lp dn xut s k

    tha mt s thnh phn (d liu v hm) ca lp c s, ng thi c thmnhng thnh phn mi. C hai loi k tha l: n k tha v a k tha, c th

    minh ha qua cc hnh v sau y:

    Hnh 5.1.n k tha, lp A l lp csca lp B

    (a) (b) (c)

    Hnh 5.2. a k tha

    Hnh (a): Lp A l lp csca lp B, lp B l lp csca lp C

    Hnh (b): Lp A l lp csca cc lp B, C, D

    Hnh (c): Lp A, B, C l lp csca lp D

    5.2. n k tha

    B

    A

    B C D

    A B C

    D

    B

    C

  • 8/6/2019 Giao Trinh c++. Thay Binh

    95/157

    95

    5.2.1. nh ngha lp dn xut tmt lp cs

    Gi s nh ngha lp A. C php xy dng lp B dn xut t lp A

    nh sau:

    class B: mode A{

    private:

    // Khai bo cc thuc tnh ca lp B

    public:

    // nh ngha cc hm thnh phn ca lp B

    };

    Trong mode c th l private hoc public vi ngha nh sau:- K tha theo kiu public th tt c cc thnh phn public ca lp cscng l

    thnh phn public ca lp dn xut.

    - K tha theo kiu private th tt c cc thnh phn public ca lp css tr

    thnh cc thnh phn private ca lp dn xut.

    Ch : Trong c hai trng hp trn th thnh phn private ca lp csl

    khng c k tha. Nh vy trong lp dn xut khng cho php truy nhp n

    cc thnh phn private ca lp cs.5.2.2. Truy nhp cc thnh phn trong lp dn xut

    Thnh phn ca lp dn xut bao gm: cc thnh phn khai bo trong lp

    dn xut v cc thnh phn m lp dn xut tha k t cc lp cs. Quy tc s

    dng cc thnh phn trong lp dn xut c thc hin theo theo mu nh sau:

    Tn i tng.Tn_lp::Tn_thnh_phn

    Khi chng trnh dch C++ d dng phn bit thnh phn thuc lp no.

    V d 5.1 Gi s c cc lp A v B nh sau:class A

    {

    public: int n;

    void nhap()

    {

    coutn;}

  • 8/6/2019 Giao Trinh c++. Thay Binh

    96/157

    96

    };

    class B: public A

    {

    public: int m;

    void nhap()

    {

    coutm;

    }

    };

    Xt khai bo: B ob;

    Lc : ob.B::m l thuc tnh n khai bo trong B

    ob.A::n l thuc tnh n tha k t lp A

    ob.D::nhap() l hm nhap() nh ngha trong lp B

    ob.A::nhap() l hm nhap() nh ngha trong lp A

    Ch : s dng cc thnh phn ca lp dn xut, c th khng dng tn lp,

    ch dng tn thnh phn. Khi chng trnh dch phi t phn on bit

    thnh phn thuc lp no: trc tin xem thnh phn ang xt c trng tn

    vi cc thnh phn no ca lp dn xut khng? Nu trng th thnh phn

    ca lp dn xut. Nu khng trng th tip tc xt cc lp cstheo th t: cc

    lp c quan h gn vi lp dn xut sc xt trc, cc lp quan h xa hn

    xt sau. Ch trng hp thnh phn ang xt c mt ng thi trong 2 lp c

    s c cng mt ng cp quan h vi lp dn xut. Trng hp ny chng

    trnh dch khng th quyt nh c thnh phn ny tha k t lp no v s

    a ra mt thng bo li.

    5.2.3. nh ngha li cc hm thnh phn ca lp cstrong lp dn xut

    Trong lp dn xut c thnh ngha li hm thnh phn ca lp cs.

    Nh vy c hai phin bn khc nhau ca hm thnh phn trong lp dn xut.

    Trong phm vi lp dn xut, hm nh ngha li che khut hm c nh

    ngha. Vic s dng hm no cn tun theo quy nh trn.

    Ch : Vic nh ngha li hm thnh phn khc vi nh ngha hm qu ti.

    Hm nh ngha li v hm bnh ngha li ging nhau v tn, tham s v gitr tr v. Chng ch khc nhau v v tr: mt hm t trong lp dn xut v hm

  • 8/6/2019 Giao Trinh c++. Thay Binh

    97/157

    97

    kia th trong lp cs. Trong khi , cc hm qu ti ch c cng tn, nhng

    khc nhau v danh sch tham s v tt c chng thuc cng mt lp. nh ngha

    li hm thnh phn chnh l cscho vic xy dng tnh a hnh ca cc hm.

    C++ cho php t trng tn thuc tnh trong cc lp csv lp dn xut.Cc thnh phn cng tn ny c th cng kiu hay khc kiu. Lc ny bn trong

    i tng ca lp dn xut c ti hai thnh phn khc nhau c cng tn, nhng

    trong phm vi lp dn xut, tn chung nhm chnh thnh phn c khai

    bo li trong lp dn xut. Khi mun chnh thnh phn trng tn trong lp c

    sphi dng tn lp ton t:: t trc tn hm thnh phn.

    V d 5.2 Xt cc lp A v B c xy dng nh sau:

    class A

    {

    private:

    int a, b, c;

    public:

    void nhap()

    { couta;

    coutb;

    coutc;

    }

    void hienthi()

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    98/157

    98

    Xt khai bo : B ob; Lc cc cu lnh sau y l li :

    ob.nhap();

    ob.d=10;

    ob.a = ob.b = ob.c = 5;ob.hienthi();

    bi v i tng ob khng th truy nhp vo cc thnh phn private ca lp A v

    B.

    V d 5.3 Chng trnh minh ha n k tha theo kiu public:

    #include

    #include

    class A

    {

    int a; //Bien private, khong duoc ke thua

    public:

    int b; //Bien public, se duoc ke thua

    void get_ab();

    int get_a(void);

    void show_a(void);

    };

    class B: public A

    {

    int c;

    public:

    void mul(void);

    void display(void);

    };

    void A::get_ab(void)

    { a = 5; b = 10;}

    int A::get_a()

    { return a;}

    void A::show_a()

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    99/157

    99

    void B::display()

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    100/157

    100

    void nhap()

    {

    coutx;

    couty;

    }

    void hienthi()

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    101/157

    101

    }

    Chng trnh cho kt qu:

    Nhap toa do tam va ban kinh hinh tron

    x = 2y = 3

    r = 10

    Hinh tron co tam:

    x = 2 y = 3

    Co ban kinh = 10

    5.2.4. Hm to i vi tnh k tha

    Cc hm to ca lp csl khng c k tha. Mt i tng ca lpdn xut v thc cht c th xem l mt i tng ca lp cs, v vy vic gi

    hm to lp dn xut to i tng ca lp dn xut s ko theo vic gi n

    mt hm to ca lp cs. Th t thc hin ca cc hm to s l: hm to cho

    lp cs, ri n hm to cho lp dn xut.

    C++ thc hin iu ny bng cch: trong nh ngha ca hm to lp dn

    xut, ta m t mt li gi ti hm to trong lp cs. C php truyn tham

    s t lp dn xut n lp csnh sau:Tn_ lp_dn_xut(danh sch i):Tn_ lp_c_s(danh sch i)

    {

    //thn hm to ca lp dn xut

    };

    Trong phn ln cc trng hp, hm to ca lp dn xut v hm to ca

    lp css khng dng tham s ging nhau. Trong trng hp cn truyn mt

    hay nhiu tham s cho mi lp, ta phi truyn cho hm to ca lp dn xut tt

    ccc tham s m c hai lp dn xut v cscn n. Sau , lp dn xut ch

    truyn cho lp csnhng tham s no m lp cscn.

    V d 5.5 Chng trnh sau minh ha cch truyn tham s cho hm to ca lp

    cs:

    #include

    #include

    class Diem

    {

    private:

  • 8/6/2019 Giao Trinh c++. Thay Binh

    102/157

    102

    double x, y;

    public:

    Diem()

    {

    x=y=0.0;

    }

    Diem(double x1, double y1)

    {

    x=x1; y=y1;

    }

    void in()

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    103/157

    103

    void main()

    {

    Hinhtron h(2.5, 3.5, 8);

    clrscr();

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    104/157

    104

    ~DX()

    {cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    105/157

    105

    5.3. a k tha

    5.3.1. nh ngha lp dn xut tnhiu lp cs

    Gi s nh ngha cc lp A, B. C php xy dng lp C dn xut t

    lp A v B nh sau:class C: mode A, mode B

    {

    private:

    // Khai bo cc thuc tnh

    public:

    // Cc hm thnh phn

    };trong mode c th l private, public hoc protected. ngha ca kiu dn

    xut ny ging nh trng hp n k tha.

    5.3.2. Mt s v d va k tha

    V d 5.7 Chng trnh sau minh ha mt lp k tha t hai lp cs:

    #include

    #include

    #include

    class M

    { protected :

    int m;

    public :

    void getm(int x) {m=x;}

    };class N

    { protected :

    int n;

    public :

    void getn(int y) {n=y;}

    };

    class P : public M,public N

  • 8/6/2019 Giao Trinh c++. Thay Binh

    106/157

    106

    {

    public :

    void display(void)

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    107/157

    107

    void nhap()

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    108/157

    108

    };

    void main()

    { int i,n; ketqua sv[100];

    coutn;

    clrscr();

    for(i=0;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    109/157

    109

    { protected : float d1,d2;

    public :

    void nhap_diem()

    {

    coutd1>>d2;

    }

    void hienthi_diem()

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    110/157

    110

    { int i,n; ketqua sv[100];

    coutn;

    clrscr();

    for(i=0;i

  • 8/6/2019 Giao Trinh c++. Thay Binh

    111/157

    111

    class house : public Building

    { int bedrooms; //tong so phong ngu

    int bathrooms; //tong so phong tam

    public :

    house(int f, int r, int ft, int br, int bth)

    { floors=f; rooms=r; footage=ft;

    bedrooms=br; bathrooms=bth;

    }

    void show()

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    112/157

    112

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    113/157

    113

    };

    class B : public A

    {

    public:

    void xuat()

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    114/157

    114

    p = &a; q = &b; r = &c;

    Ta xt cc li gi hm thnh phn t cc con tr p, q, r:

    p->xuat(); q->xuat(); r->xuat();

    C 3 cu lnh trn u gi ti hm thnh phn xuat() ca lp A, bi v cccon tr p, q, r u c kiu lp A. Sdnh vy l v mt li gi (xut pht t

    mt i tng hay con tr) ti hm thnh phn lun lun lin kt vi mt hm

    thnh phn c nh v s lin kt ny xc nh trong qu trnh bin dch

    chng trnh. Ta bo y l slin kt tnh.

    C th tm lc cch thc gi cc hm thnh phn nh sau:

    1. Nu li gi xut pht t mt i tng ca lp no , th hm thnh

    phn ca lp sc gi.

    2. Nu li gi xut pht t mt con tr kiu lp, th hm thnh phn ca lp

    sc gi bt k con tr cha a ch ca i tng no.

    Vn t ra l: Ta mun ti thi im con trang trn i tng no

    th li gi hm phi lin kt ng hm thnh phn ca lp m i tng

    thuc vo ch khng ph thuc vo kiu lp ca con tr. C++ gii quyt vn

    ny bng cch dng khi nim hm o.

    5.4.2. nh ngha hm o

    Hm o l hm thnh phn ca lp, n c khai bo trong lp csv

    nh ngha li trong lp dn xut. nh ngha hm o th phn khai bo hm

    phi bt u bng t kha virtual. Khi mt lp c cha hm o c k tha,

    lp dn xut snh ngha li hm o cho chnh mnh. Cc hm o trin khai

    t tng ch o ca tnh a hnh l mt giao din cho nhiu hm thnh

    phn. Hm o bn trong lp csnh ngha hnh thc giao tip i vi hm

    . Vic nh ngha li hm o lp dn xut l thi hnh cc tc v ca hm linquan n chnh lp dn xut . Ni cch khc, nh ngha li hm o chnh l

    to ra phng thc c th. Trong phn nh ngha li hm o lp dn xut,

    khng cn phi s dng li t kha virtual.

    Khi xy dng hm o, cn tun theo nhng quy tc sau:

    1. Hm o phi l hm thnh phn ca mt lp;

    2. Nhng thnh phn tnh (static) khng th khai bo o;

    3. S dng con tr truy nhp ti hm o;

  • 8/6/2019 Giao Trinh c++. Thay Binh

    115/157

    115

    4. Hm o c nh ngha trong lp c s, ngay khi n khng c s

    dng;

    5. Mu ca cc phin bn ( lp csv lp dn xut) phi ging nhau.

    Nu hai hm cng tn nhng c mu khc nhau th C++ s xem nh hmti bi;

    6. Khng c to ra hm to o, nhng c th to ra hm hy o;

    7. Con tr ca lp csc th cha a ch ca i tng thuc lp dn

    xut, nhng ngc li th khng c;

    8. Nu dng con tr ca lp cs trn i tng ca lp dn xut th

    php ton tng gim con tr s khng tc dng i vi lp dn xut, ngha

    l khng phi con tr s tr ti i tng trc hoc tip theo trong lp

    dn xut. Php ton tng gim ch lin quan n lp cs.

    V d:

    class A

    {

    ...

    virtual void hienthi()

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    116/157

    116

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    117/157

    117

    B b; // b l bin i tng kiu B

    p = &a; // p v a cng lp A

    p = &b; // p l con tr lp cs, b l i tng lp dn xut

    Ch : Khng cho php gn a chi tng ca lp cscho con tr ca lpdn xut, chng hn vi khai bo B *q; A a; th cu lnh q = &a; l sai.

    V d 5.11 Chng trnh sau y minh ha vic s dng hm o:

    #include

    #include

    class A

    {

    public:virtual void hienthi()

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    118/157

    118

    A *p;

    A a; B b; C c;

    a.hienthi(); //goi ham cua lop A

    p = &b; //p tro to doi tuong b cua lop B

    p->hienthi(); //goi ham cua lop B

    p=&c; //p tro to doi tuong c cua lop C

    p->hienthi(); //goi ham cua lop C

    getch();

    }

    Chng trnh ny cho kt qu nh sau:

    Lop A

    Lop B

    Lop C

    Ch :

    Cng mt cu lnh p->hienthi(); c tng ng vi nhiu hm khc

    nhau khc nhau khi hienthi() l hm o. y chnh l s tng ng bi.

    Kh nng ny cho php x l nhiu i tng khc nhau theo cng mt

    cch thc.Cng vi li gi: p->hienthi(); (hienthi() l hm o) th li gi ny khng

    lin kt vi mt phng thc cnh, m ty thuc v ni dung con tr.

    l s lin ktng v phng thc c lin kt (c gi) thay i

    mi khi c s thay i ni dung con tr trong qu trnh chy chng trnh.

    V d 5.12 Chng trnh sau to ra mt lp csc tn lnumlu tr mt s

    nguyn, v mt hm o ca lp c tn l shownum(). Lpnumc hai lp dn

    xut louthex voutoct. Trong hai lp ny snh ngha li hm o shownum() chng in ra s nguyn di dng s h 16 v s h 8.

    #include

    #include

    class num

    {

    public :

    int i;num(int x) { i=x; }

  • 8/6/2019 Giao Trinh c++. Thay Binh

    119/157

    119

    virtual void shownum()

    { cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    120/157

  • 8/6/2019 Giao Trinh c++. Thay Binh

    121/157

    121

    {...};

    clacc D : public B, public C

    {...};

    Vic chnh A l o trong cc lp B v C ngha l A s ch xut hin mtln trong lp D. Khai bo ny khng nh hng n cc lp B v C.

    Ch : T kha virtual c th t trc hoc sau t kha public, private,

    protected.

    V d 5.13

    #include

    #include

    class A

    { float x,y;

    public:

    void set(float x1, float y1)

    {

    x = x1; y = y1;

    }

    float getx()

    { return x;

    }

    float gety()

    { return y;

    }

    };

    class B : virtual public A

    { };

    class C : virtual public A

    { };

    class D : public B, public C

    { };

    void main()

    { clrscr();

    D d;cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    122/157

    122

    d.B::set(2,3);

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    123/157

    123

    Vi s k tha nh hnh v 5.4., th t gi hm to s l A, B, C v cui

    cng l D. Chng trnh sau minh ha iu ny:

    V d 5.14

    #include #include

    class A

    { float x,y;

    public:

    A() {x = 0; y = 0;}

    A(float x1, float y1)

    {cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    124/157

    124

    public:

    C(float x1, float y1):A(x1,y1)

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    125/157

    125

    B::B(float,float)

    C::C(float,float)

    D::D(float,float)

    D d (2,3)

    d.C::getx() = 2

    d.B::getx() = 2

    d.C::gety() = 3

    d.B::gety() = 3

    d1 (10,20)

    A::A(float,float)

    B::B(float,float)

    C::C(float,float)

    D::D(float,float)

    d.C::getx() = 2

    d.B::getx() = 2

    d.C::gety() = 3

    d.B::gety() = 3

  • 8/6/2019 Giao Trinh c++. Thay Binh

    126/157

    126

    BI TP

    1. Xy dng lp c tn l Stack vi cc thao tc cn thit. T hy dn xut t

    lp stack i mt s nguyn dng sang hm bt k.

    2. Vit mt phn cp k tha cho cc lp hnh t gic, hnh thang, hnh bnhhnh, hnh ch nht, hnh vung.

    3. To mt lp csc tn l airship lu thng tin v s lng hnh khch

    ti a v trng lng hng ha ti a m my bay c th chc. T

    hy to hai lp dn xut airplane v balloon, lp airplane lu thng tin v kiu

    ng c(gm ng ccnh qut v ng cphn lc), lp balloon lu thng

    tin v loi nhin liu s dng cho kh cu (gm hai loi l hydrogen v

    helium). Hy vit chng trnh minh ha.

    4. Mt nh xut bn nhn xut bn sch. Sch c hai loi: loi c hnh nh

    trang ba v loi khng c hnh nh trang ba. Loi c hnh nh trang ba

    th phi thu ha sv ba. Vit chng trnh thc hin cc yu cu :

    - To mt lp csc tn l SACH lu thng tin v tn sch, tc gi, s

    trang, gi bn v nh ngha hm thnh phn cho php nhp d liu cho cc

    i tng ca lp SACH.

    - To lp BIA k tha t lp SACH lu cc thng tin : M hnh nh, tin

    v v nh ngha hm thnh phn cho php nhp d liu cho cc i tng

    ca lp BIA.

    - To lp HOASY lu cc thng tin h tn, a ch ca ha s v nh

    ngha hm thnh phn cho php nhp d liu cho cc i tng ca lp

    HOASY.

    - To lp SACHVEBIA k tha t lp BIA v lp HOASY v nh ngha

    hm thnh phn cho php nhp d liu cho cc i tng ca lp

    SACHVEBIA. Vit hm main() cho php nhp vo hai danh sch : danh sch

    cc sch c v ba v danh sch cc sch khng c v ba (c th dng mng

    tnh hoc mng con tr).

    5. Xy dng lp hnh vung c tn l HVUONG vi cc d liu thnh phn nh

    sau: di cnh. Cc hm thnh phn nhp d liu, hin th d liu, tnh

    din tch, chu vi hnh vung. T lp HVUONG, xy dng lp dn xut c tnl CHUNHAT, l lp k tha ca lp HVUONG v c b sung thm thuc

  • 8/6/2019 Giao Trinh c++. Thay Binh

    127/157

    127

    tnh sau: di cnh th hai. Cc hm thnh phn nhp d liu, hin th d

    liu tnh din tch v chu vi hnh ch nht. Vit chng trnh minh ha.

    6. Xy dng lp csCANBO c d liu thnh phn l m cn b, m n v,

    h tn, ngy sinh. Cc hm thnh phn bao gm: nhp d liu cn b, hin thd liu. Lp dn xut LUONG k tha lp CANBO v c thm cc thuc

    tnh: ph cp, h s lng, bo him. Hm thnh phn tnh lng cn b

    theo cng thc:

    lng = h s lng *290000 + ph cp - bo him

    Hy thit k chng trnh p ng cc yu cu:

    - Nhp danh sch cn b

    - In bng lng cc cn b theo tng n v.7. Nhn vin trong mt cquan c lnh lng theo cc dng khc nhau. Dng

    ngi lao ng hng lng t ngn sch Nh nc gi l cn b, cng chc

    (dng bin ch). Dng ngi lao ng lnh lng t ngn sch ca cquan

    gi l ngi lm hp ng. Nh vy h thng c hai i tng: bin ch v

    hp ng.

    - Hai loi i tng ny c c tnh chung l vin chc lm vic cho cquan.

    Ty c th to nn lp cs qun l mt vin chc (lp Nguoi) baogm m s, h tn, lng.

    - Hai lp k tha t lp cstrn:

    + Lp Bienche gm cc thuc tnh: h s lng, tin ph cp chc v.

    + Lp Hopdong gm cc thuc tnh: tin cng lao ng, s ngy lm

    vic trong thng, h s vt gi.

    Hy thit k cc lp trn v vit chng trnh minh ha.

    8. Vit chng trnh qun l sch bo, tp ch ca th vin trong trng i hc,hng thng gi v khoa h tn ca cc gio vin v sinh vin qu thi hn

    mn sch.

    9. Vit chng trnh tnh v in bng lng hng thng ca gio vin v ngi

    lm hp ng trong mt trng i hc. Gi s vic tnh tan tin lng c

    cn c vo cc yu t sau:

    - i vi gio vin: s tit dy trong thng, tin dy mt tit.

    - i vi ngi lm hp ng: tin cng ngy, s ngy lm vic

  • 8/6/2019 Giao Trinh c++. Thay Binh

    128/157

    128

    10. Gi s cui nm hc cn trao phn thng cho cc sinh vin gii, cc gio

    vin c tham gia nghin cu khoa hc. iu kin khen thng ca sinh vin

    l c im trung bnh ln hn 8. iu kin khen thng ca gio vin l c t

    nht mt bi bo nghin cu khoa hc. S cu trc phn cp lp nh sau:

    Nguoi

    H tn

    Ngy sinh

    Cc phng

    thc

    Sinhvien

    Lp

    im trung

    bnh

    Cc phng

    thc

    Yu cu:

    - Xy dng cc lp theo s k tha trn, mi lp c cc hm thnh phn nhp, xut d liu, hm kim tra khen thng.

    - Hy vit hm main() cho php nhp vo d liu ca khng qu 100 sinh vin

    v khng qu 30 gio vin. In ra danh sch sinh vin v gio vin c khen

    thng.

    Giaovien

    B mn

    S bi bo

    Cc phng

    thc

  • 8/6/2019 Giao Trinh c++. Thay Binh

    129/157

    129

    11. Gi s ta c s k tha ca cc lp nh sau:

    HINHHOC

    HAICHIEU

    Yu cu:

    - Thit k cc lp c th in ra cc thng tin ca cc hnh (trn, ch nht, lp

    phng) bao gm: din tch, chu vi, th tch.

    - Vit chng trnh minh ha.

    12. Vit chng trnh qun l vic mn v tr sch mt th vin theo

    phng php lp trnh hng i tng. Chng trnh cho php:- ng k bn c mi vi thng tin l m v tn bn c, sin thoi

    - Nhp sch mi vi thng tin l m sch, tn sch, s lng, nh xut bn.

    - Mn v tr sch.

    - Thng k bn c.

    - Thng k sch.

    BACHIEU

    TRON CHUNHAT LAPPHUONG

  • 8/6/2019 Giao Trinh c++. Thay Binh

    130/157

    130

    CHNG 6

    KHUN HNH

    6.1. Khun hnh hm

    6.1.1. Khi nim

    Ta bit hm qu ti cho php dng mt tn duy nht cho nhiu hm

    thc hin cc cng vic khc nhau. Khi nim khun hnh hm cng cho php

    s dng cng mt tn duy nht thc hin cc cng vic khc nhau, tuy nhin

    so vi nh ngha hm qu ti, n c phn mnh hn v cht ch hn. Mnh hn

    v ch cn vit nh ngha khun hnh hm mt ln, ri sau chng trnh bin

    dch lm cho n thch ng vi cc kiu d liu khc nhau. Cht ch hn bi v

    da theo khun hnh hm, tt c cc hm th hin c sinh ra bi chng trnhdch s tng ng vi cng mt nh ngha v nh vy s c cng mt gii

    thut.

    6.1.2. To mt khun hnh hm

    Gi thit rng chng ta cn vit mt hmmina ra gi tr nh nht trong

    hai gi tr c cng kiu. Ta c th vit mt nh ngha nh th vi kiu int nh

    sau:

    int min (int a, int b)

    {

    if (a

  • 8/6/2019 Giao Trinh c++. Thay Binh

    131/157

    131

    Nh vy ta phi vit rt nhiu nh ngha hm hon ton tng t nhau, ch

    c kiu d liu l thay i. Chng trnh dch C++ cho php gii quyt n gin

    vn trn bng cch nh ngha mt khun hnh hm duy nht theo c php:

    template tn hm(khai bo tham s){

    //nh ngha hm

    }

    trong l cc kiu d liu c khai bo vi t kho

    class, cch nhau bi du phy. Kiu d liu l mt kiu bt k, k c kiu class.

    V d 6.1 Xy dng khun hnh cho hm tm gi tr nh nht ca hai s:

    template Kieuso min(Kieuso a, Kieuso

    b)

    {

    if (a

  • 8/6/2019 Giao Trinh c++. Thay Binh

    132/157

    132

    - Cc bin truyn cho danh sch tham s ca hm phi chnh xc vi kiu

    khai bo.

    - Mun p dng c vi kiu lp th trong lp phi nh ngha cc ton t

    ti bi tng ng.6.1.4. Cc tham s kiu ca khun hnh hm

    Khun hnh hm c th c mt hay nhiu tham s kiu, mi tham si lin

    sau t kho class. Cc tham s ny c th bt k u trong nh ngha ca

    khun hnh hm, ngha l :

    - Trong dng tiu (dng u khai bo template).

    - Trong cc khai bo bin cc b.

    - Trong cc ch th thc hin.Trong mi trng hp, mi tham s kiu phi xut hin t nht mt ln

    trong khai bo danh sch tham s hnh thc ca khun hnh hm. iu hon

    ton logic, bi v nhcc tham s ny, chng trnh dch mi c th sn sinh ra

    hm th hin cn thit.

    khun hnh hm min trn, mi ch cho php tm min ca hai s cng

    kiu, nu mun tm min hai s khc kiu th khun hnh hm trn cha p ng

    c. V d sau s khc phc c iu ny.

    V d 6.2

    #include

    template kieuso1

    min(kieuso1 a,kieuso2 b)

    {

    return a

  • 8/6/2019 Giao Trinh c++. Thay Binh

    133/157

    133

    class SO

    {

    private:

    int giatri;

    public:

    SO(int x=0)

    {

    giatri = x;

    }

    SO (SO &tso)

    {

    giatri = tso.giatri;

    }

    SO (){}; //Giong nhu ham thiet lap ngam dinh

    ~SO()

    { }

    int operator(istream&,SO&);

    friend ostream& operator

  • 8/6/2019 Giao Trinh c++. Thay Binh

    134/157

    134

    return a;

    else

    return b;

    }

    void main(){

    float a =2.5;

    int b = 8;

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    135/157

    135

    Nu khng c hm thng thng no tng ng chnh xc vi li gi, khi

    ta kim tra tt c cc khun hnh hm c trng tn vi li gi, khi ta kim

    tra tt c cc khun hnh hm c trng tn vi li gi; nu ch c mt tng ng

    chnh xc c tm thy, hm th hin tng ng c sn sinh v vn cgii quyt; cn nu c nhiu hn mt khun hnh hm iu s gy ra li bin

    dch v qu trnh dng.

    Cui cng, nu khng c khun hnh hm ph hp, ta kim tra mt ln na

    tt c cc hm thng thng cng tn vi li gi. Trong trng hp ny chng

    ta phi tm kim s tng ng da vo c cc chuyn kiu cho php trong

    C/C++.

    6.2. Khun hnh lp6.2.1. Khi nim

    Bn cnh khi nim khun hnh hm, C++ cn cho php nh ngha khun

    hnh lp. Cng ging nh khun hnh hm, y ta ch cn vit nh ngha cc

    khun hnh lp mt ln ri sau c th p dng chng vi cc kiu d liu

    khc nhau c cc lp th hin khc nhau.

    6.2.2. To mt khun hnh lp

    Trong chng trc ta nh ngha cho lp SO, gi tr cc s l kiu int.

    Nu ta mun lm vic vi cc s kii float, double,... th ta phi nh ngha li

    mt lp khc tng t, trong kiu d liu int cho d liu giatri sc thay

    bng float,double,...

    trnh s trng lp trong cc tnh hung nh trn, chng trnh dch C++

    cho php nh ngha mt khun hnh lp v sau , p dng khun hnh lp ny

    vi cc kiu d liu khc nhau thu c cc lp th hin nh mong mun. V

    d :

    template class SO

    {

    kieuso giatri;

    public :

    SO (kieuso x =0);

    void Hienthi();

  • 8/6/2019 Giao Trinh c++. Thay Binh

    136/157

    136

    ...

    };

    Cng ging nh cc khun hnh hm, template

    xc nh rng l mt khun hnh trong c mt tham s ku kieuso .C++ s dng t kho class ch ni rng kieusoi din cho mt kiu d

    liu no .

    Vic nh ngha cc hm thnh phn ca khun hnh lp, ngi ta phn bit

    hai trng hp:

    Khi hm thnh phn c nh ngha bn trong nh ngha lp th khng c

    g thay i.

    Khi hm thnh phn c nh ngha bn ngoi lp, khi cn phi nhcli cho chng trnh bit cc tham s kiu ca khun hnh lp, c ngha l phi

    nhc li template chng hn, trc nh ngha hm. V

    d hm Hienthi() c nh ngha ngoi lp:

    template void SO::Hienthi()

    {

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    137/157

    137

    #include

    #include

    template class SO

    {

    kieuso giatri;

    public :

    SO (kieuso x =0);

    void Hienthi(){

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    138/157

    138

    T x;

    U y;

    .....

    Z fct1 (int);

    .....

    };

    Mt lp th hin c khai bo bng cch lit k ng sau tn khun hnh

    lp cc tham s thc, l tn kiu d liu, vi s lng bng cc tham s trong

    danh sch ca khun hnh lp (template)

    6.2.5. Tm tt

    Khun hnh lp/hm l phng tin m t ngha ca mt lp/hm tngqut, cn lp/hm th hin l mt bn sao ca khun hnh tng qut vi cc kiu

    d liu c th.

    Cc khun hnh lp/hm thng c tham s ho. Tuy nhin vn c th

    s dng cc kiu d liu c th trong cc khun hnh lp/hm nu cn.

  • 8/6/2019 Giao Trinh c++. Thay Binh

    139/157

    139

    BI TP

    1. Vit khun hnh hm tm s ln nht ca hai s bt k

    2. Vit khun hnh hm tr v gi tr trung bnh ca mt mng, cc tham

    s hnh thc ca hm ny l tn mng, kch thc mng.

    3. Ci t hng i templete.

    4. Vit khun hnh hm sp xp kiu d liu bt k.

    5. Xy dng khun hnh lp cho cc ta im trong mt phng, cc

    thnh phn d liu ca lp l toadox, toadoy.

    6. Xy dng khun hnh lp cho vector qun l cc vector c thnh phn

    c kiu ty .

  • 8/6/2019 Giao Trinh c++. Thay Binh

    140/157

    140

    Ph lc

    CC DNG XUT NHP

    C++ s dng khi nim dng (stream) v a ra cc lp dng t chc

    vic nhp xut. Dng c th xem nh mt dy tun t cc byte. Thao tc nhp lc cc byte t dng (gi l dng nhpinput) vo b nh. Thao tc xut l a

    cc byte t b nhra dng (gi l dng xut- output). Cc thao tc ny l c

    lp thit b. thc hin vic nhp, xut ln mt thit b c th, chng ta ch cn

    gn dng tin vi thit b ny.

    1.1. Cc lp stream

    C 4 lp stream quan trng l: lp csios, t lp ios dn xut n hai lp

    istream v iostream. Hai lp istream v ostream li dn xut vi lp iostream.

    S k tha gia cc lp nh sau;

    Lp ios: nh ngha cc thuc tnh c s dng lm cc cnh dng

    cho vic xut nhp v cc ckim tra li, cc phng thc ca lp ios

    phc v vic nh dng d liu nhp xut, kim tra li.

    Lp iostream: cung cp ton t nhp >> v nhiu phng thc nhp

    khc, chng hn cc phng thc: get, getline, read,ignore, peek, seekg,

    tellg, ...

    Lp ostream: cung cp ton t xut

  • 8/6/2019 Giao Trinh c++. Thay Binh

    141/157

    141

    1.2. Dng cin v ton tnhp >>

    1.2.1 Dng cin

    cin l i tng ca lp istream. l dng nhp v c ni l b rng

    buc ti hoc kt ni ti thit b nhp chun, thng thng l bn phm. Ccthao tc nhp trn dng cinng ngha vi nhp d liu t bn phm.

    1.2.2. Ton ttrch >>

    Ton t trch >> c s dng nh sau c d liu t dng cin:

    cin>> bin;

    nhp gi tr ca nhiu bin trn mt dng lnh ta dng c php sau:

    cin>>bin 1>>bin 2>>...>>bin n;

    1.3. Nhp k tv chui k t

    C th dng cc phng thc sau (nh ngha trong lp istream) nhp k

    t v chui: cin.get cin.getline cin.ignore

    1.3.1. Phng thc get() c 3 dng:

    Dng 1: int cin.get();

    Dng c mt k t (k c khong trng).

    Dng 2: istream& cin.get(char &ch);Dng c mt k t (k c khong trng) v t vo mt bin kiu char c

    tham chiu bi ch.

    Dng 3: istream& cin.get(char *str, int n, char d = \n);

    Dng c mt dy k t (k c khong trng) v a vo vng nhdo str tr

    ti. Qu trnh c kt thc khi xy ra mt trong hai tnh hung sau:

    + Gp k t gii hn (cho trong d). K t gii hn mc nh l \n.

    + nhn (n-1) k t.Ch :

    + K t kt thc chui \0 c b sung vo cui chui nhn c.

    + K t gii hn vn cn li trn dng nhp dnh cho cc lnh nhn tip

    theo.

    + K t cn li trn dng nhp c th lm tri phng thc get() dng

    3. V d: Xt on chng trnh:

    char hoten[25], diachi[50], quequan[30];cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    142/157

    142

    cin.get(ht,25);

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    143/157

    143

    char hoten[25], diachi[50];

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    144/157

    144

    int m=1234, n=56;

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    145/157

    145

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    146/157

    146

    cout.setf(ios::left); //bat co ios::left

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    147/157

    147

    + Khi ios::oct bt: s nguyn c in di dng cs 8

    + khi ios::hex bt: s nguyn c in di dng cs 16

    Nhm 3 gm cc cnh dng s thc:

    ios::fixed ios::scientific ios::showpointMc nh : c ios::fixed bt (on) v cios::showpoint tt (off).

    + Khi ios::fixed bt v c ios::showpoint tt th s thc in ra di dng thp

    phn, s ch s phn phn (sau du chm) c tnh bng chnh xc n nhng

    khi in th bi cc ch s 0 cui.

    V d nu chnh xc n = 4 th

    S thc -87.1500 c in: -87.15

    S thc 23.45425 c in: 23.4543

    S thc 678.0 c in: 678

    + Khi ios::fixed bt v cios::showpoint bt th s thc in ra di dng thp

    phn, s ch s phn phn (sau du chm) c in ra ng bng chnh xc n.

    V d nu chnh xc n = 4 th

    S thc -87.1500 c in: -87.1500

    S thc 23.45425 c in: 23.4543

    S thc 678.0 c in: 6780000

    + Khi ios::scientific bt v cios::showpoint tt th s thc in ra di dng

    khoa hc. S ch s phn phn (sau du chm) c tnh bng chnh xc n

    nhng khi in th bi cc ch s 0 cui.

    V d nu chnh xc n=4 th

    S thc -87.1500 c in: -87.15e+01

    S thc 23.45425 c in: 23.4543e+01

    S thc 678.0 c in: 678e+02

    + Khi ios::scientific bt v cios::showpoint bt th s thc in ra di dng

    m . S ch s phn phn (sau du chm) ca phn nh trc in ng bng

    chnh xc n.

    V d nu chnh xc n=4 th

    S thc -87.1500 c in: -87.150e+01

    S thc 23.45425 c in: 23.4543e+01

    S thc 678.0 c in: 67800e+01

    Nhm 4 gm cc hin th:

    ios::uppercase ios::showpos ios::showbase

  • 8/6/2019 Giao Trinh c++. Thay Binh

    148/157

    148

    Cios::showpos

    + Nu c ios::showpos tt (mc nh) th du cng khng c in trc s

    dng.

    + Nu cios::showpos tt th du cng c in trc s dng.C ios::showbase bt th s nguyn h 8 c in bt u bng k t 0 v s

    nguyn h 16 c bt u bng cc k t 0x. V d nu a = 40 th:

    Dng in h 8 l: 050

    Dng in h 16 l 0x28

    Cios::showbase tt (mc nh) th khng in 0 trc s nguyn h 8 v khng

    0x trc s nguyn h 16. V d nu a = 40 th:

    Dng in h 8 l: 50

    Dng in h 16 l 28

    Cios::uppercase

    + Nu cios::uppercase bt th cc ch s h 16 (nh A, B, C,...) c in di

    dng ch hoa.

    + Nu c ios::uppercase tt (mc nh) th cc ch s h 16 (nh A, B, C,...)

    c in di dng ch thng.

    1.4.5. Cc phng thc bt tt cCc phng thc ny nh ngha trong lp ios.

    1. Phng thc long cout.setf(long f) ;

    s bt cc clit k trong f v tr v mt gi tr long biu th cc cang bt.

    2. Phng thc long cout.unsetf(long f) ;

    s tt cc clit k trong f v tr v mt gi tr long biu th cc cang bt.

    3. Phng thc long cout.flags(long f) ;

    c tc dng ging nh cout.setf(long).4. Phng thc long cout.flags() ;

    s tr v mt gi tr long biu th cc cang bt.

    1.4.6. Cc b phn nh dng

    Cc b phn nh dng (nh ngha trong tp tin iostream.h) bao gm:

    dec // nh cios::dec

    oct // nh cios::oct

    hex // nh cios::hexendl // xut k t\n (chuyn dng)

  • 8/6/2019 Giao Trinh c++. Thay Binh

    149/157

    149

    flush //y d liu ra thit b xut

    V d Xt chng trnh sau:

    #include

    #include #include

    void main()

    {

    clrscr();

    cout.setf(ios::showbase);

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    150/157

    150

    cout

  • 8/6/2019 Giao Trinh c++. Thay Binh

    151/157

    151

    {

    clrscr();

    float x=-87.1500, y=23.45425,z=678.0;

    clog.setf(ios::scientific);

    clog.precision(4);

    clog.fill('*');

    clog

  • 8/6/2019 Giao Trinh c++. Thay Binh

    152/157

    152

    - fd(file disciptor) l ch s tp tin. Ch s tp tin nh sn i vi stdprn

    (my in chun) l 4.

    - Cc tham s buf v n