Lời nói đầu - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/cong-nghe-thong-tin/the-loai-khac/... · Thông qua các ngôn ngữ Foxpro, Pascal, ... và đã trở thành

  • Upload
    vuhanh

  • View
    232

  • Download
    1

Embed Size (px)

Citation preview

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 1 [email protected]

    Li ni u Lp trnh cu trc l phng php t chc, phn chia chng trnh thnh cc hm, th tc, chng

    c dng x l d liu nhng li tch ri cc cu trc d liu. Thng qua cc ngn ng Foxpro, Pascal, C a s nhng ngi lm Tin hc kh quen bit vi phng php lp trnh ny.

    Lp trnh hng i tng da trn vic t chc chng trnh thnh cc lp. Khc vi hm v th tc, lp l mt n v bao gm c d liu v cc phng thc x l. V vy lp c th m t cc thc th mt cch chn thc, y c phn d liu v yu cu qun l. T tng lp trnh hng i tng c p dng cho hu ht cc ngn ng mi chy trn mi trng Windows nh Microsoft Access, Visual Basic, Visual C. V vy vic nghin cu phng php lp trnh mi ny l rt cn thit i vi tt c nhng ngi quan tm, yu thch Tin hc.

    C ra i nm 1973 vi mc ch ban u l vit h iu hnh Unix trn my tnh mini PDP. Sau C c s dng rng ri trn nhiu loi my tnh khc nhau v tr thnh mt ngn ng lp trnh cu trc rt c a chung.

    a C vo th gii hng hng i tng, nm 1980 nh khoa hc ngi M B. Stroustrup cho ra i mt ngn ng C mi c tn ban u l C c lp, sau n nm 1983 th gi l C++. Ngn ng C++ l mt s pht trin mnh m ca C. Trong C++ chng nhng a vo tt c cc khi nim, cng c ca lp trnh hng i tng m cn a vo nhiu kh nng mi m cho hm. Nh vy C++ l mt ngn ng lai cho php t chc chng trnh theo cc lp v cc hm. C th ni C++ thc y ngn ng C vn rt thuyt phc i vo th gii lp trnh hng i tng v C++ tr thnh ngn ng hng i tng ni bt trong nhng nm 90.

    Cun sch ny s trnh by mt cch h thng cc khi nim ca lp trnh hng i tng c ci t trong C++ nh lp, i tng, s tha k, tnh tng ng bi v cc kh nng mi trong xy dng, s dng hm nh: i tham chiu, i mc nh, hm trng tn, hm ton t. C mt s vn cn t c bit n nh cch xy dng hm vi s i bt nh trong C cng s c gii thiu. Cc chng t 1 n 10 vi cch gii thch t m v vi gn 100 chng trnh minh ho s cung cp cho bn c cc khi nim, phng php v kinh nghim lp trnh hng i tng trn C++. Mc lc cui sch s h thng ngn gn phng php phn tch, thit k v lp trnh hng i tng trn bnh din chung.

    Cun sch gm 10 chng v 6 ph lc Chng 1 hng dn cch lm vic vi phn mm TC++ 3.0 th nghim cc chng trnh,

    trnh by s lc v cc phng php lp trnh v gii thiu mt s m rng n gin ca C++ . Chng 2 trnh by cc kh nng mi trong vic xy dng v s dng hm trong C++ nh bin

    tham chiu, i c kiu tham chiu, i c gi tr mc nh, hm trc tuyn, hm trng tn, hm ton t.

    Chng 3 ni v mt khi nim trung tm ca lp trnh hng i tng l lp gm: nh ngha lp, khai bo cc bin, mng i tng (kiu lp), phng thc, dng con tr this trong phng thc, phm vi truy xut ca cc thnh phn, cc phng thc ton t.

    Chng 4 trnh by cc vn to dng, sao chp, hu b cc i tng v cc vn khc c lin quan nh: Hm to, hm to sao chp, hm hu, ton t gn, cp pht b nh cho i tng, hm bn, lp bn.

    Chng 5 trnh by mt khi nim quan trng to nn kh nng mnh ca lp trnh hng i tng trong vic pht trin, m rng phn mm, l kh nng tha k ca cc lp.

    Chng 6 trnh by mt khi nim quan trng khc cho php x l cc vn khc nhau, cc thc th khc nhau, cc thut ton khc nhau theo cng mt lc thng nht, l tnh tng ng bi v phng thc o. Cc cng c ny cho php d dng t chc chng trnh qun l nhiu dng i tng khc nhau.

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 2 [email protected]

    Chng 7 ni v vic t chc vo - ra trong C++. C++ a vo mt khi nim mi gi l cc dng tin (Stream). Cc thao tc vo - ra s thc hin trao i d liu gia b nh vi dng tin: Vo l chuyn d liu t dng nhp vo b nh, ra l chuyn d liu t b nh ln dng xut. nhp xut d liu trn mt thit b c th no, ta ch cn gn dng nhp xut vi thit b . Vic t chc vo ra theo cch nh vy l rt khoa hc v tin li v n c tnh c lp thit b.

    Chng 8 trnh by cc hm ho s dng trong C v C++. Cc hm ny c s dng ri rc trong ton b cun sch xy dng cc i tng ho.

    Chng 9 trnh by cc hm truy xut trc tip vo b nh ca my tnh, trong c b nh mn hnh. Cc hm ny s c s dng trong chng 10 xy dng cc lp menu v ca s .

    Chng 10 gii thiu 5 chng trnh tng i hon chnh nhm minh ho thm kh nng v k thut lp trnh hng i tng trn C++

    Ph lc 1 trnh by cc php ton trong C++ v th t u ca chng. Ph lc 2 lit k mt danh sch cc t kho ca C++. Ph lc 3 trnh by bng m ASCII v m qut ca cc k t. Ph lc 4 trnh by mt vn quan trng nhng cn t c ni n trong cc ti liu, l

    cch s dng con tr void xy dng cc hm vi s i khng c nh ging nh cc hm printf v scanf ca C.

    V trong C++ vn s dng cc hm ca C, nn trong ph lc 5 s gii thiu tm tt hn 200 hm bn c tin vic tra cu.

    Cui cng, ph lc 6 trnh by mt cch ngn gn phng php phn tch, thit k v lp trnh hng i tng trn bnh din chung.

    Khi vit chng ti ht sc c gng cun sch c hon chnh, song chc chn khng trnh khi thiu st, v vy rt mong nhn c s gp ca c gi.

    Nhn dp ny chng ti xin chn thnh cm n c nhn Nguyn Vn Phc tn tnh gip trong vic hiu nh v bin tp cun sch ny.

    Tc gi

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 3 [email protected]

    Chng 1

    C++ v lp trnh hng i tng Trong chng ny trnh by cc vn sau: - Cch s dng phn mm TC++ 3.0 - Nhng sa i cn thit mt chng trnh C bin n thnh mt chng trnh C++ (chy

    c trong mi trng C++) - Tm lc v cc phng php lp trnh cu trc v lp trnh hng i tng - Nhng m rng ca C++ so vi C

    Bi 1. Lm vic vi TC++ 3.0 Cc v d trong cun sch ny s vit v thc hin trn mi trng TC++ 3.0. B ci t TC++

    3.0 gm 5 a. Sau khi ci t (gi s vo th mc C:\TC) th trong th mc TC s gm cc th mc con sau:

    C:\TC\BGI cha cc tp ui BGI v CHR C:\TC\BIN cha cc tp chng trnh (ui EXE) nh TC, TCC, TLIB, TLINK C:\TC\INCLUDE cha cc tp tiu ui H C:\TC\LIB cha cc tp ui LIB, OBJ

    vo mi trng ca TC++ ch cn thc hin tp chng trnh TC trong th mc C:\TC\BIN . Kt qu nhn c h menu chnh ca TC++ vi mu nn xanh gn ging nh h menu quen thuc ca TC (Turbo C). H menu ca TC++ gm cc menu: File, Edit, Search, Run, Compile, Debug, Project, Options, Window, Help.

    Cch son tho, bin dch v chy chng trnh trong TC++ cngg ging nh trong TC, ngoi tr im sau: Tp chng trnh trong h son tho ca TC++ c ui mc nh l CPP cng trong TC th tp chng trnh lun c ui C.

    Trong TC++ c th thc hin c chng trnh C v C++. thc hin chng trnh C cn dng ui C t tn cho tp chng trnh, thc hin chng trnh C++ cn dng ui CPP t tn cho tp chng trnh.

    Bi 2. C v C++ - C th ni C++ l s m rng (ng k) ca C. iu c ngha l mi kh nng, mi khi

    nim trong C u dng c trong C++. - V trong C++ s dng gn nh ton b cc khi nim, nh ngha, cc kiu d liu, cc cu trc

    lnh, cc hm v cc cng c khc ca C, nn yu cu bt buc i vi cc c gi C++ l phi bit s dng tng i thnh tho ngn ng C.

    - V C++ l s m rng ca C, nn bn thn mt chng trnh C l chng trnh C++ (ch cn thay ui C bng ui CPP). Tuy nhin Trnh bin dch TC++ yu cu mi hm chun dng trong chng trnh u phi khai bo nguyn mu bng mt cu lnh #include, trong khi iu ny khng bt buc i vi Trnh bin dch ca TC.

    Trong C c th dng mt hm chun m b qua cu lnh #include khai bo nguyn mu ca hm c dng. iu ny khng bo li khi bin dch, nhng c th dn n kt qu sai khi chy chng trnh.

    V d khi bin dch chng trnh sau trong mi trng C s khng gp cc dng cnh bo (Warning) v thng bo li (error). Nhng khi chy s nhn c kt qu sai.

    #include void main()

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 4 [email protected]

    { float a,b,c,p,s; printf("\nNhap a, b, c "); scanf("%f%f%f",&a,&b,&c); p=(a+b+c)/2; s= sqrt(p*(p-a)*(p-b)*(p-c)); printf("\nDien tich = %0.2f",s); getch();

    } Nu bin dch chng trnh ny trong TC++ s nhn c cc thng bo li sau:

    Eror: Funtion sqrt should have a prototype Eror: Funtion getch should have a prototype

    bin chng trnh trn thnh mt chng trnh C++ cn: + t tn chng chng vi ui CPP + Thm 2 cu lnh #include khai bo nguyn mu cho cc hm sqrt, getch:

    #include #include

    Bi 3. Lp trnh cu trc v lp trnh hng i tng 3.1. Phng php lp trnh cu trc

    - T tng chnh ca lp trnh cu trc l t chc chng trnh thnh cc chng trnh con. Trong PASCAL c 2 kiu chng trnh con l th tc v hm. Trong C ch c mt loi chng trnh con l hm.

    Hm l mt n v chng trnh c lp dng thc hin mt phn vic no nh: Nhp s liu, in kt qu hay thc hin mt s tnh ton. Hm cn c i v cc bin, mng cc b dng ring cho hm.

    Vic trao i d liu gia cc hm thc hin thng qua cc i v cc bin ton b. Cc ngn ng nh C, PASCAL, FOXPRO l cc ngn ng cho php trin khai phng php lp

    trnh cu trc. Mt chng trnh cu trc gm cc cu trc d liu (nh bin, mng, bn ghi) v cc hm, th

    tc. Nhim v chnh ca vic t chc thit k chng trnh cu trc l t chc chng trnh thnh cc

    hm, th tc: Chng trnh s bao gm cc hm, th tc no. V d xt yu cu sau: Vit chng trnh nhp to (x,y) ca mt dy im, sau tm mt

    cp im cch xa nhau nht. Trn t tng ca lp trnh cu trc c th t chc chng trnh nh sau: + S dng 2 mng thc ton b x v y cha to dy im + Xy dng 2 hm: Hm nhapsl dng nhp to n im, hm ny c mt i l bin nguyn n v c khai bo

    nh sau: void nhapsl(int n);

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 5 [email protected]

    Hm do_dai dng tnh di on thng i qua 2 im c ch s l i v j , n c khai bo nh sau:

    float do_dai(int i, int j); Chng trnh C cho bi ton trn c vit nh sau: #include #include #include float x[100],y[100]; float do_dai(int i, int j)

    { return sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2));

    } void nhapsl(int n)

    { int i; for (i=1;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 6 [email protected]

    getch(); }

    3.2. Phng php lp trnh hng i tng + Khi nim trung tm ca lp trnh hng i tng l lp (class). C th xem lp l s kt hp

    cc thnh phn d liu v cc hm. Cngg c th xem lp l s m rng ca cu trc trong C (struct) bng cch a thm vo cc phng thc (method) hay cng gi l hm thnh vin (member function). Mt lp c nh ngha nh sau:

    Class Tn_Lp

    { // Khai bo cc thnh phn d liu // Khai bo cc phng thc

    }; + Cc phng thc c th c vit (xy dng) bn trong hoc bn ngoi (pha di) phn nh

    ngha lp. Cu trc (cch vit) phng thc tng t nh hm ngoi tr quy tc sau: Khi xy dng mt phng thc bn ngoi nh ngha lp th trong dng u tin cn dng tn lp v 2 du : t trc tn phng thc ch r phng thc thuc lp no (xem v d bn di).

    + S dng cc thnh phn d liu trong phng thc: V phng thc v cc thnh phn d liu thuc cng mt lp v v phng thc c lp ln ct x l cc thnh phn d liu, nn trong thn ca phng thc c quyn truy nhp n cc thnh phn d liu (ca cng lp).

    + Bin lp: Sau khi nh ngha mt lp, c th dng tn lp khai bo cc bin kiu lp hay cng gi l i tng. Mi i tng s c cc thnh phn d liu v cc phng thc. Li gi mt phng thc cn cha tn i tng xc nh phng thc thc hin t i tng no.

    + Mt chng trnh hng i tng s bao gm cc lp c quan h vi nhau. + Vic phn tch, thit k chng trnh theo phng php hng i tng nhm thit k, xy

    dng cc lp. + T khi nim lp ny sinh hng lot khi nim khc nh: Thnh phn d liu, phng thc,

    phm vi, s ng gi, hm to, hm hu, s tha k, lp c s, lp dn xut, tng ng bi, phng thc o, ...

    + u im ca vic thit k hng i tng l tp trung xc nh cc lp m t cc thc th ca bi ton. Mi lp a vo cc thnh phn d liu ca thc th v xy dng lun cc phng thc x l d liu. Nh vy vic thit k chng trnh xut pht t cc ni dng, cc vn ca bi ton.

    + Cc ngn ng thun tu hng i tng (nh Smalltalk) ch h tr cc khi nim v lp, khng c cc khi nim hm.

    + C++ l ngn ng lai , n cho php s dng c cc cng c ca lp v hm. minh ho cc khi nim va nu v lp trnh hng i tng ta tr li xt bi ton tm

    di ln nht i qua 2 im. Trong bi ton ny ta gp mt thc th l dy im. Cc thnh phn d liu ca lp dy im gm:

    - Bin nguyn n l s im ca dy - Con tr x kiu thc tr n vng nh cha dy honh - Con tr y kiu thc tr n vng nh cha dy tung

    Cc phng thc cn a vo theo yu cu bi ton gm: - Nhp to mt im

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 7 [email protected]

    - Tnh di on thng i qua 2 im Di y l chng trnh vit theo thit k hng i tng. thc hin chng trnh ny nh

    t tn tp c ui CPP. Xem chng trnh ta thy thm mt iu mi trong C++ l: Cc khai bo bin, mng c th vit bt k ch no trong chng trnh (tt nhin phi trc khi

    s dng bin, mng). #include #include #include #include class daydiem

    { public:

    int n; float *x,*y; float do_dai(int i, int j)

    { return sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2));

    } void nhapsl(void);

    }; void daydiem::nhapsl(void)

    { int i; printf("\nSo diem N= "); scanf("%d",&n); x=(float*)malloc((n+1)*sizeof(float)); y=(float*)malloc((n+1)*sizeof(float)); for (i=1;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 8 [email protected]

    for (j=i+1;jdmax)

    { dmax=d; imax=i; jmax=j;

    } }

    printf("\nDoan thang lon nhat co do dai bang: %0.2f",dmax); printf("\n Di qua 2 diem co chi so la %d va %d",imax,jmax); getch();

    }

    Bi 4. Mt s m rng n gin ca C++ so vi C Trong mc ny trnh by mt s m rng ca C++ , tuy n gin, ngn gn nhng em li rt

    nhiu tin li.

    4.1. Vit cc dng ghi ch Trong C++ vn c th vit cc dng ghi ch trong cc du /* v */ nh trong C. Cch ny cho

    php vit cc ghi ch trn nhiu dng hoc trn mt dng. Ngoi ra trong C++ cng cho php vit ghi ch trn mt dng sau 2 du gch cho, v d:

    int x,y ; // Khai bo 2 bin thc

    4.2. Khai bo linh hot Trong C tt c cc cu lnh khai bo bin, mng cc b phi t ti u khi. Do vy nhiu khi,

    v tr khai bo v v tr s dng ca bin kh xa nhau, gy kh khn trong vic kim sot chng trnh. C++ khc phc nhc im ny bng cch cho php cc lnh khai bo bin, mng c th t bt k ch no trong chng trnh trc khi cc bin, mng c s dng. V d chng trnh nhp mt dy s thc ri sp xp theo th t tng dn c th vit trong C++ nh sau:

    #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=1;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 9 [email protected]

    scanf("%f",x+i); }

    for (i=1;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 10 [email protected]

    + Hng nguyn: const int maxsize = 1000; int a[maxsize] ;

    + Cu trc hng: typedef struct

    { int x, y ; // To ca im int mau ; // M mu ca im

    } DIEM ; const DIEM d = {320, 240, 15}; Chng trnh di y minh ho cch dng hng c kiu. Chng trnh to mt cu trc hng

    (kiu DIEM) m t im gia mn hnh ho vi mu trng. im ny c hin th trn mn hnh ho.

    #include #include #include #include typedef struct

    { int x,y; int mau;

    } DIEM; void main()

    { int mh=0,mode=0; initgraph(&mh,&mode,""); int loi=graphresult(); if (loi)

    { printf("\nLoi do hoa: %s",grapherrormsg(loi)); getch(); exit(0);

    } const DIEM gmh = {getmaxx()/2,getmaxy()/2,WHITE}; putpixel(gmh.x,gmh.y,gmh.mau); getch(); closegraph();

    }

    Ch : a. C th dng cc hm gn gi tr cho cc hng c kiu (trong chng trnh trn dng cc

    hm getmax v getmaxy). b. Mi cu lnh nhm thay i gi tr hng c kiu u b bo li khi bin dch chng trnh. V

    d nu trong chng trnh a vo cu lnh:

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 11 [email protected]

    gmh.x=200; th khi dch chng trnh s nhn c thng bo li nh sau:

    Cannot modify a const object

    4.5. Cc kiu char v int Trong C mt hng k t c xem l nguyn do n c kch thc 2 byte, v d trong C:

    sizeof(A) = sizeof(int) = 2 Cng trong C++ mt hng k t c xem l gi tr kiu char v c kch thc mt byte. Nh

    vy trong C++ th: sizeof(A) = sizeof(char) = 1

    4.6. Ly a ch cc phn t mng thc 2 chiu Trong Turbo C 2.0 khng cho php dng php & ly a ch cc phn t mng thc 2 chiu.

    V vy khi nhp mt ma trn thc (dng scanf) ta phi nhp qua mt bin trung gian sau mi gn cho cc phn t mng.

    Trong TC ++ 3.0 cho php ly a ch cc phn t mng thc 2 chiu, do c th dng scanf nhp trc tip vo cc phn t mng.

    Chng trnh C++ di y s minh ho iu ny. Chng trnh nhp mt ma trn thc cp mxn v xc nh phn t c gi tr ln nht.

    #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=1;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 12 [email protected]

    puts( "\n\n Ma tran") ; for (i=1;i> bin

    nhp cc gi tr s (nguyn thc) t bn phm v gn cho cc bin. nhp mt dy khng qu n k t v cha vo mng h (kiu char) c th dng phng thc

    cin.get nh sau: cin.get(h,n);

    Ch 1: Ton t nhp cin >> s li k t chuyn dng \n trong b m, k t ny c th lm tri phng thc cin.get. khc phc tnh trng trn cn dng phng thc cin.ignore b qua mt k t chuyn dng nh sau:

    cin.ignore(1); Ch 2: s dng cc ton t v phng thc ni trn cn khai bo tp tiu :

    #include Chng trnh sau minh ho vic s dng cc cng c vo ra mi ca C++ nhp mt danh sch

    n th sinh. D liu mi th sinh gm h tn, cc im ton, l, ho. Sau in danh sch th sinh theo th t gim ca tng im.

    #include #include void main()

    { struct

    { char ht[25];

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 13 [email protected]

    float t,l,h,td; } ts[50],tg;

    int n,i,j; clrscr(); cout > n ; for (i=1;i> ts[i].h ; ts[i].td = ts[i].t + ts[i].l + ts[i].h ;

    } for (i=1;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 14 [email protected]

    + quy nh rng ti thiu l w v tr cho gi tr (nguyn, thc, chui) c in trong cc ton t xut, ta dng hm

    setw(w) Hm ny cn t trong ton t xut v n ch c hiu lc cho mt gi tr c in gn nht. Cc

    gi tr in ra tip theo s c rng ti thiu mc nh l 0. Nh vy cu lnh: cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 15 [email protected]

    { smax = a[i][j]; imax=i ; jmax = j;

    } cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 16 [email protected]

    Trong C++ mt kiu hp (union) cngg c nh ngha nh C theo mu: union Tn_kiu_hp

    { // Khai bo cc thnh phn ca hp

    } ;

    Sau khai bo cc bin, mng kiu hp , trong C dng mu sau: union Tn_kiu_hp danh sch bin, mng kiu hp ;

    Nh vy trong C, tn vit sau t kho union cha phi l tn kiu v cha c th dng khai bo.

    Trong C++ xem tn vit sau t kho union l tn kiu hp v c th dng n khai bo. Nh vy khai bo cc bin, mng kiu hp, trong C++ c th dng mu sau:

    Tn_kiu_hp danh sch bin, mng kiu hp ;

    6.3. Cc union khng tn Trong C++ cho php dng cc union khng tn dng: union

    { // Khai bo cc thnh phn

    } ; Khi cc thnh phn (khai bo trong union) s dng chung mt vng nh. iu ny cho php

    tit kim b nh v cho php d dng tch cc byte ca mt vng nh. V d nu cc bin nguyn i , bin k t ch v bin thc x khng ng thi s dng th c th

    khai bo chng trong mt union khng tn nh sau: union

    { int i ; char ch ; float x ;

    } ; Khi cc bin i , ch v f s dng chung mt vng nh 4 byte. Xt v d khc, tch cc byte ca mt bin unsigned long ta dng union khng tn sau: union

    { unsigned long u ; unsigned char b[4] ;

    }; Kh nu gn

    u = 0xDDCCBBAA; // S h 16 th :

    b[0] = 0xAA b[1] = 0xBB b[2] = 0xCC b[3] = 0xDD

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 17 [email protected]

    6.4. Kiu lit k (enum) + Cngg ging nh cu trc v hp, tn vit sau t kho enum c xem l kiu lit k v c th

    dng khai bo, v d: enum MAU { xanh, do, tim, vang } ; // nh ngha kiu MAU MAU m, dsm[10] ; // Khai bo cc bin, mng kiu MAU

    + Cc gi tr kiu lit k (enum) l cc s nguyn. Do c th thc hin cc php tnh trn cc gi tr enum, c th in cc gi tr enum, c th gn gi tr enum cho bin nguyn, v d:

    MAU m1 , m2 ; int n1, n2 ; m1 = tim ; m2 = vng ; n1 = m1 ; // n1 = 2 n2 = m1 + m2 ; // n2 = 5 printf (\n %d , m2 ); // in ra s 3 + Khng th gn trc tip mt gi tr nguyn cho mt bin enum m phi dng php p kiu, v

    d: m1 = 2 ; // li m1 = MAU(2) ; // ng

    Bi 7. Cp pht b nh 7.1. Trong C++ c th s dng cc hm cp pht b nh ng ca C nh: hm malloc cp pht b nh, hm free gii phng b nh c cp pht.

    7.2. Ngoi ra trong C++ cng a thm ton t new cp pht b nh v ton t delete gii phng b nh c cp pht bi new

    7.3. Cch dng ton t new cp pht b nh nh sau: + Trc ht cn khai bo mt con tr cha a ch vng nh s c cp pht:

    Kiu *p; y Kiu c th l:

    - cc kiu d liu chun ca C++ nh int , long, float , double, char , ... - cc kiu do lp trnh vin nh ngha nh: mng, hp, cu trc, lp, ...

    + Sau dng ton t new theo mu: p = new Kiu ; // Cp pht b nh cho mt bin (mt phn t) p = new Kiu[n] ; //Cp pht b nh cho n phn t

    V d cp pht b nh cho mt bin thc ta dng cu lnh sau: float *px = new float ;

    cp pht b nh cho 100 phn t nguyn ta dng cc cu lnh: int *pn = new int[100] ; for (int i=0 ; i < 100 ; ++i )

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 18 [email protected]

    pn[i] = 20*i ; // Gn cho phn t th i

    7.4. Hai cch kim tra s thnh cng ca new Khi dng cu lnh:

    Kiu *p = new Kiu[n] ; hoc cu lnh:

    Kiu *p = new Kiu ; cp pht b nh s xut hin mt trong 2 trng hp: thnh cng hoc khng thnh cng.

    Nu thnh cng th p s cha a ch u vng nh c cp pht. Nu khng thnh cng th p = NULL. on chng trnh sau minh ho cch kim tra li cp pht b nh: double *pd ; int n ; cout > n ; pd = new double[n] ; if (pd==NULL)

    { cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 19 [email protected]

    Ch : C th dng lnh gn gn tn hm x l li cho con tr _new_handler nh trong on chng trnh trn, hoc dng hm:

    set_new_handler(Tn hm) ; (xem cc chng trnh minh ho bn di)

    7.5. Ton t delete dng gii phng vng nh c cp pht bi new Cch dng nh sau:

    delete p ; // p l con tr dng trong new V d:

    float *px ; px = new float[2000] ; // Cp pht b nh cho 2000 phn t thc // S dng b nh c cp pht delete px ; // gii phng b nh

    7.6. Hai chng trnh minh ho Chng trnh th nht minh ho cch dng new cp pht b nh cha n th sinh. Mi th sinh

    l mt cu trc gm cc trng ht (h tn), sobd (s bo danh) v td (tng im). Chng trnh s nhp n, cp pht b nh cha n th sinh, kim tra li cp pht b nh (dng cch 1), nhp n th sinh, sp xp th sinh theo th t gim ca tng im, in danh sch th sinh sau khi sp xp, v cui cng l gii phng b nh cp pht.

    #include #include #include #include struct TS

    { char ht[20]; long sobd; float td;

    } ;

    void main(void) {

    TS*ts ; int n; cout > n; ts = new TS[n+1]; if(ts==NULL)

    { cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 20 [email protected]

    for (int i=1;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 21 [email protected]

    { double *q[100] ; long n; clrscr(); set_new_handler(loi_bo_nho) ; // _new_handler=loi_bo_nho; n=10000; for ( k=0;k

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 22 [email protected]

    Vic dng cc php ton thay cho mt li gi hm r rng lm cho chng trnh ngn gn, sng sa hn nhiu. V d thc hin php cng 2 ma trn nu dng php cng v vit:

    C = A + B ; th rt gn vi ton hc. Trong C++ cho php dng cc php ton chun t tn cho cc hm (gi l nh ngha chng ton t). Sau c th thay li gi hm bng cc php ton nh ni trn. Nh vy mt php ton mang nhiu ngha, v d php + c th hiu l cng 2 s nguyn, 2 s thc hoc 2 ma trn. C++ s cn c vo kiu ca cc s hng m quyt nh chn php cng c th.

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 23 [email protected]

    chng 2

    Hm trong C++

    Chng ny trnh by nhng kh nng mi ca C++ trong vic xy dng v s dng hm. l: + Kiu tham chiu v vic truyn d liu cho hm bng tham chiu. + i tham chiu hng (const) + i c gi tr mc nh + Hm trc tuyn + Vic nh ngha chng cc hm + Vic nh ngha chng cc ton t

    1. Bin tham chiu (Reference variable) 1.1. Hai loi bin dng trong C

    Trc khi ni n bin tham chiu, chng ta nhc li 2 loi bin gp trong C l: Bin gi tr dng cha d liu (nguyn, thc, k t, ... ) Bin con tr dng cha a ch Cc bin ny u c cung cp b nh v c a ch. V d cu lnh khai bo:

    double x , *px; s to ra bin gi tr kiu double x v bin con tr kiu double px. Bin x c vng nh 8 byte, bin px c vng nh 4 byte (nu dng m hnh Large). Bin x dng cha gi tr kiu double, v d lnh gn:

    x = 3.14; s cha gi tr 3.14 vo bin x. Bin px dng cha a ch ca mt bin thc, v d cu lnh:

    px = &x ; s lu tr a ch ca bin x vo con tr px.

    1.2. Bin tham chiu Trong C++ cho php s dng loi bin th ba l bin tham chiu. So vi 2 loi bin quen bit ni

    trn, th bin ny c nhng c im sau: + Bin tham chiu khng c cp pht b nh, khng c a ch ring. + N dng lm b danh cho mt bin (kiu gi tr) no v n s dng vng nh ca bin ny.

    V d cu lnh: float u, v, &r = u ;

    to ra cc bin thc u, v v bin tham chiu thc r. Bin r khng c cp pht b nh, n l mt tn khc (b danh) ca u v n dng chung vng nh ca bin u.

    Thut ng: Khi r l b danh (alias) ca u th ta ni r tham chiu n bin u. Nh vy 2 thut ng trn c hiu nh nhau.

    ngha: Khi r l b danh ca u th r dng chung vng nh ca u, d : + Trong mi cu lnh, vit u hay vit r u c ngha nh nhau, v u truy nhp n cng mt

    vng nh. + C th dng bin tham chiu truy nhp n mt bin kiu gi tr.

    V d:

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 24 [email protected]

    int u, v, &r = u; r = 10 ; // u=10 cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 25 [email protected]

    { TS ts[10],&h=ts[1]; // h tham chiu n ts[1] cout h.t >> h.l >> h.h ; h.td = h.t + h.l + h.h ; cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 26 [email protected]

    Nh vy chng trnh s to ra cc bn sao (cc i) ca cc tham s v hm s thao tc trn cc bn sao ny, ch khng lm vic trc tip vi cc tham s. Phng php ny c 2 nhc im chnh:

    Tn km v thi gian v b nh v phi to ra cc bn sao. Khng thao tc trc tip trn cc tham s, v vy khng lm thay i c gi tr cc tham s.

    2.2. Truyn gi tr cho hm theo tham chiu Trong C++ cung cp thm cch truyn d liu cho hm theo tham chiu bng cch dng i l

    bin tham chiu hoc i l hng tham chiu. Cch ny c u im: Khng cn to ra cc bn sao ca cc tham s, do tit kim b nh v thi gian chy my. Hm s thao tc trc tip trn vng nh ca cc tham s, do d dng thay i gi tr cc tham

    s khi cn.

    2.3. Mi quan h gia i v tham s trong li gi hm Nu i l bin hoc hng tham chiu kiu K th tham s (trong li gi hm) phi l bin hoc

    phn t mng kiu K. V d: + i l bin hoc hng tham chiu kiu double, th tham s l bin hoc phn t mng kiu

    double + i l bin hoc hng tham chiu kiu cu trc, th tham s l bin hoc phn t mng kiu

    cu trc

    2.4. Cc chng trnh minh ho /* Chng trnh sau c t chc thnh 3 hm: Nhp dy s double Hon v 2 bin double Sp xp dy s double theo th t tng dn Chng trnh s nhp mt dy s v in dy sau khi sp xp */ #include #include #include void nhapds(double *a, int n)

    { for (int i=1; i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 27 [email protected]

    { for (int i=1; i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 28 [email protected]

    void nhapsl(TS *ts,int n) {

    for (int i=1;i> ts[i].h ; ts[i].td = ts[i].t + ts[i].l + ts[i].h ;

    } }

    void hvts(TS &ts1, TS &ts2) {

    TS tg=ts1; ts1=ts2; ts2=tg;

    } void sapxep(TS *ts,int n)

    { for (int i=1;i dc; cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 29 [email protected]

    ints(ts[i]); else

    break; getch();

    }

    /* Chng trnh sau gm cc hm: Nhp mt ma trn thc cp mxn In mt ma trn thc di dng bng Tm phn t ln nht v phn t nh nht ca dy s thc; Chng trnh s nhp mt ma trn, in ma trn va nhp v in cc phn t ln nht v nh nht trn mi hng ca ma trn */ #include #include #include #include void nhapmt(float a[20][20], int m, int n)

    { for (int i=1 ; i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 30 [email protected]

    { if (x[i] > x[vtmax]) vtmax = i; if (x[i] < x[vtmin]) vtmin = i;

    } }

    void main() {

    float a[20][20]; int m, n; cout m >> n; nhapmt(a,m,n); clrscr(); inmt(a,m,n); float *p = (float*)a; int vtmax, vtmin; for (int i=1;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 31 [email protected]

    { f()=50; // z = 50 cout > h.h ; h.td = h.t + h.l + h.h ; cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 32 [email protected]

    { char ht[25]; float t,l,h,td;

    }; TS *ts; void cap_phat_bo_nho_nhapsl(int n)

    { ts = new TS[n+1] ; if (ts==NULL)

    { cout h.h ; h.td = h.t + h.l + h.h ;

    } }

    TS &f(int i, int n) // Cho bi danh ts[i] {

    if (in) {

    cout n; cap_phat_bo_nho_nhapsl(n); while (1)

    { cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 33 [email protected]

    cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 34 [email protected]

    nu hai i mc nh th phi l d4, d5 nu ba i mc nh th phi l d3, d4, d5 ...

    Cc v d sai: d3 v d5 mc nh (khi d4 cng phi mc nh) d3 v d4 mc nh (khi d5 cng phi mc nh)

    + Khi xy dng hm, nu s dng khai bo nguyn mu, th cc i mc nh cn c khi gn trong nguyn mu, v d:

    // Khi gn gi tr cho 3 i mc nh d3, d4 v d5) void f(int d1, float d2, char *d3=HA NOI, int d4 = 100, double d5=3.14) ; void f(int d1, float d2, char *d3, int d4, double d5)

    { // Cc cu lnh trong thn hm

    } Khng c khi gn li cho cc i mc nh trong dng u ca nh ngha hm. Nu vi phm

    iu ny th Chng trnh dch s thng bo li. + Khi xy dng hm, nu khng khai bo nguyn mu, th cc i mc nh c khi gn trong

    dng u ca nh ngha hm, v d: // Khi gn gi tr cho 3 i mc nh d3, d4 v d5) void f(int d1, float d2, char *d3=HA NOI, int d4 = 100, double d5=3.14)

    {

    // Cc cu lnh trong thn hm

    }

    + Gi tr dng khi gn cho i mc inh

    C th dng cc hng, cc bin ton b, cc hm khi gn cho i mc nh, v d:

    int MAX = 10000;

    void f(int n, int m = MAX, int xmax = getmaxx(),

    int ymax = getmaxy() ) ;

    4.3. Cch s dng hm c i mc nh Li gi hm cn vit theo quy nh sau:

    Cc tham s thiu vng trong li gi hm phi tng ng vi cc i mc nh cui cng (tnh t tri sang phi).

    Ni cch khc: dng gi tr mc nh cho mt i (tt nhin phi l i mc nh) th cng phi s dng gi tr mc nh cho cc i cn li.

    V d vi hm c 3 i mc nh:

    void f(int d1, float d2, char *d3=HA NOI, int d4 = 100, double d5=3.14) ;

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 35 [email protected]

    Th cc li gi sau l ng:

    f(3,3.4,ABC,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 sau l sai:

    f(3) ; // Thiu tham s cho i khng mc nh d2

    f(3,3.4, ,10) ; // dng gi tr mc nh cho d3, th cng

    // phi dng gi tr mc nh cho d4 v d5

    4.4. Cc v d Hm ht (bn di) dng hin th chui k t dc trn n dng mn hnh. Cc i dc v n u c

    gi tr mc nh. #include #include void ht(char *dc="HA NOI",int n=10) ; void ht(char *dc , int n )

    { for (int i=0;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 36 [email protected]

    } void main()

    { int mh=0, mode=0; initgraph(&mh,&mode,""); setbkcolor(BLUE); hiendc("HELLO"); // HELLO mu gia mn hnh hiendc("CHUC MUNG",1,1); // CHUC MUNG mu ti v

    // tr (1,1) hiendc("CHAO",1,400,YELLOW); // CHAO mu vng ti v

    // tr (1,400) getch();

    }

    V d di y trnh by hm tnh tch phn xc nh gm 3 i: f l hm cn tnh tch phn, a v b l cc cn di v trn (a

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 37 [email protected]

    cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 38 [email protected]

    cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 39 [email protected]

    } void main()

    { int a[20],b[20],cv[20],dt[20],n; cout > n; for (int i=1;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 40 [email protected]

    for (i=1;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 41 [email protected]

    void f(int a); int f(int a)

    { return a*a;

    } void f(int a)

    { cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 42 [email protected]

    int tinh_max(int *a, int n) ; // Max ca mt dy s nguyn double tinh_max(double *a, int n) ; //Max ca mt dy s thc

    Vn t ra l lm th no ly c a ch ca mi hm. Cu tr li nh sau: ly a ch ca mt hm, ta khai bo mt con tr hm c kiu v b i nh hm cn ly a

    ch. Sau gn tn hm cho con tr hm. V d: int (*f1)(int , int, int ); f1 = tinh_max ; // Ly a ch ca hm th nht double (*f2)(double , double, double); f2 = tinh_max ; // Ly a ch ca hm th hai int (*f3)(int *, int ); f3 = tinh_max ; // Ly a ch ca hm th ba double (*f4)(double *, int ); f4 = tinh_max ; // Ly a ch ca hm th t

    6.6. Cc v d V d 1: Chng trnh gii bi ton tm max ca mt dy s nguyn v max ca mt dy s

    thc. Trong chmg trnh c 6 hm. Hai hm dng nhp dy s nguyn v dy s thc c tn chung l nhapds. Bn hm: tnh max 2 s nguyn, tnh max 2 s thc, tnh max ca dy s nguyn, tnh max ca dy s thc c t chung mt tn l max.

    #include #include #include void nhapds(int *x, int n); void nhapds(double *x, int n); int max(int x, int y); double max(double x, double y); int max(int *x, int n); double max(double *x, int n); void nhapds(int *x, int n)

    { for (int i=1;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 43 [email protected]

    int max(int x, int y) {

    return x>y?x:y ; }

    double max(double x, double y) {

    return x>y?x:y ; }

    int max(int *x, int n) {

    int s=x[1]; for (int i=2;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 44 [email protected]

    }

    V d 2: Chng trnh sau thc hin php nhn ma trn:

    D = A*B*C trong A, B l cc ma trn vung, C l ma trn ch nht. Trong chng trnh c 3 cp hm trng tn thc hin 3 nhim v (nhng trn 2 i tng khc nhau l ma trn vung v ch nht): Nhp ma trn, nhn 2 ma trn v in ma trn.

    #include #include #include typedef int MT[20][20]; void nhapmt(MT a,char *ten, int m, int n); void inmt(MT a,char *ten, int m, int n); void nhanmt(MT a,MT b, MT c, int m, int n, int p); void nhapmt(MT a,char *ten, int n); void inmt(MT a,char *ten, int n); void nhanmt(MT a,MT b, MT c, int n); void nhapmt(MT a, char *ten, int m, int n)

    { for (int i=1;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 45 [email protected]

    { inmt(a,ten,n,n) ;

    } void nhanmt(MT a,MT b, MT c, int m, int n, int p)

    { for (int i=1;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 46 [email protected]

    thc, trn vc t, trn ma trn. p ng yu cu ny, ta s dng cc hm trong C. V d sau y l mt chng trnh C gm cc hm nhp phn s, in phn s v thc hin cc php cng tr nhn chia phn s. Chng trnh s nhp 5 phn s: p, q, z, u, v v tnh phn s s theo cng thc:

    s = (p q*z)/(u + v) #include #include #include typedef struct

    { int a,b;

    } PS; void nhap(PS *p); void in(PS p); int uscln(int x, int y); PS rutgon(PS p); PS cong(PS p1, PS p2); PS tru(PS p1, PS p2); PS nhan(PS p1, PS p2); PS chia(PS p1, PS p2); void nhap(PS *p)

    { int t, m; printf("\nTu va mau: "); scanf("%d%d", &t, &m); p->a = t; p->b = m;

    } void in(PS p)

    { printf(" %d/%d",p.a,p.b);

    } int uscln(int x, int y)

    { x=abs(x); y=abs(y); if (x*y==0) return 1; while (x!=y)

    if (x>y) x-=y; else y-=x;

    return x; }

    PS rutgon(PS p) {

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 47 [email protected]

    PS q; int x; x=uscln(p.a,p.b); q.a = p.a / x ; q.b = p.b / x ; return q;

    } PS cong(PS p1, PS p2)

    { PS q; q.a = p1.a*p2.b + p2.a*p1.b; q.b = p1.b * p2.b ; return rutgon(q);

    } PS tru(PS p1, PS p2)

    { PS q; q.a = p1.a*p2.b - p2.a*p1.b; q.b = p1.b * p2.b ; return rutgon(q);

    } PS nhan(PS p1, PS p2)

    { PS q; q.a = p1.a * p2.a ; q.b = p1.b * p2.b ; return rutgon(q);

    } PS chia(PS p1, PS p2)

    { PS q; q.a = p1.a * p2.b ; q.b = p1.b * p2.a ; return rutgon(q);

    }

    void main()

    {

    PS p, q, z, u, v ;

    PS tu,mau, s;

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 48 [email protected]

    printf("\n Nhap phan so p: "); nhap(&p); printf("\n Nhap phan so q: ");nhap(&q); printf("\n Nhap phan so z: ");nhap(&z); printf("\n Nhap phan so u: ");nhap(&u); printf("\n Nhap phan so v: ");nhap(&v); tu = nhan(q,z); tu = tru(p,tu) ; mau = cong(u,v) ; s = chia(tu,mau); printf(\n Phan so s = ); in(s); getch();

    }

    Nhn xt: Vic s dng cc hm thc hin cc php tnh khng c t nhin v t ra di dng. V d thc hin mt cng thc

    s = (p - q*z)/(u + v) phi dng 2 bin trung gian v 4 li gi hm. Cu hi t ra l c cch no ch cn vit ng cng thc ton hc, m vn nhn c kt qu mong mun hay khng?

    Trong C++ c th p ng c mong mun ny bng cch s dng cc php ton chun ca n cho cc kiu d liu t nh ngha (mng, cu trc, ...). Ni cch khc C++ cho php dng cc php ton nh ngha cc hm, m ta thng gi l nh ngha chng cc ton t (hay cn gi: S ti bi cc ton t).

    7.3. Cch nh ngha chng cc ton t

    7.3.1.Tn hm ton t: Gm t kho operator v tn php ton, v d: operator+ (nh ngha chng php +) operator- (nh ngha chng php -)

    7.3.2. Cc i ca hm ton t: a. Vi cc php ton c 2 ton hng, th hm ton t cn c 2 i. i th nht ng vi ton

    hng th nht, i th hai ng vi ton hng th hai. Do vy, vi cc php ton khng giao hon (nh php-) th th t i l rt quan trng.

    V d cc hm ton t cng , tr phn s c khai bo nh sau: struct PS

    { int a; // T s int b; // Mu s

    } ; PS operator+(PS p1, PS p2); // p1 + p2 PS operator-(PS p1, PS p2); // p1 - p2 PS operator*(PS p1, PS p2); // p1 * p2 PS operator/(PS p1, PS p2); // p1 / p2

    b. Vi cc php ton c mt ton hng, th hm ton t c mt i. V d hm ton t i du ma trn (i du tt c cc phn t ca ma trn) c khai bo nh sau:

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 49 [email protected]

    struct MT {

    double a[20][20] ; // Mng cha cc phn t ma trn int m ; // S hng ma trn int n ; // S ct ma trn

    } ; MT operator-(MT x) ;

    7.3.3. Thn ca hm ton t: Vit nh thn ca hm thng thng. V d hm i du ma trn c th c nh ngha nh sau:

    struct MT {

    double a[20][20] ; // Mng cha cc phn t ma trn int m ; // S hng ma trn int n ; // S ct ma trn

    } ;

    MT operator-(MT x) {

    MT y; for (int i=1; i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 50 [email protected]

    PS p, q, u, v, s1, s2 ;

    s1 = p*q - u/v ; // s1 = (p*q)

    s2 = (p - q)/(u + v) ; // s2 = (p - q)/(u + v)

    8. Cc v d v nh ngha chng ton t V d 1: Trong v d ny ngoi vic s dng cc hm ton t thc hin 4 php tnh trn phn

    s, cn nh ngha chng cc php ton > xut v nhp phn s (xem chi tit trong chng 7).

    Hm operator c khai bo nh sau:

    istream& operator>> (istream& is,PS &p); Di y s ch ra cch xy dng v s dng cc hm ton t. Chng ta cng s thy vic s

    dng cc hm ton t rt t nhin, ngn gn v tin li. Chng trnh di y c ni dung nh chng trnh trong 6.2, nhng thay cc hm bng cc

    hm ton t. #include

    #include

    #include

    typedef struct

    { int a,b;

    } PS; ostream& operator> (istream& is,PS &p); int uscln(int x, int y); PS rutgon(PS p); PS operator+(PS p1, PS p2); PS operator-(PS p1, PS p2); PS operator*(PS p1, PS p2); PS operator/(PS p1, PS p2); ostream& operator> p.b ; return is;

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 51 [email protected]

    }

    int uscln(int x, int y) {

    x=abs(x); y=abs(y); if (x*y==0) return 1; while (x!=y)

    if (x>y) x-=y; else y-=x;

    return x; }

    PS rutgon(PS p) {

    PS q; int x; x=uscln(p.a,p.b); q.a = p.a / x ; q.b = p.b / x ; return q;

    } PS operator+(PS p1, PS p2)

    { PS q; q.a = p1.a*p2.b + p2.a*p1.b; q.b = p1.b * p2.b ; return rutgon(q);

    } PS operator-(PS p1, PS p2)

    { PS q; q.a = p1.a*p2.b - p2.a*p1.b; q.b = p1.b * p2.b ; return rutgon(q);

    } PS operator*(PS p1, PS p2)

    { PS q; q.a = p1.a * p2.a ; q.b = p1.b * p2.b ; return rutgon(q);

    } PS operator/(PS p1, PS p2)

    { PS q;

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 52 [email protected]

    q.a = p1.a * p2.b ; q.b = p1.b * p2.a ; return rutgon(q);

    }

    void main() {

    PS p, q, z, u, v ; PS s; cout p >> q >> z >> u >> v ; s = (p - q*z) / (u + v) ; cout (istream& is,DT &d); DT operator-(const DT& d); DT operator+(DT d1, DT d2); DT operator-(DT d1, DT d2); DT operator*(DT d1, DT d2); double operator^(DT d, double x); // Tinh gia tri da thuc

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 53 [email protected]

    ostream& operator

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 54 [email protected]

    } DT operator-(DT d1, DT d2)

    { return (d1 + (-d2));

    }

    DT operator*(DT d1, DT d2) {

    DT d; int k, i, j; k = d.n = d1.n + d2.n ; for (i=0; i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 55 [email protected]

    cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 56 [email protected]

    Ni dung chng trnh l nhp 4 ma trn X, Y, R, S v vc t u. Sau tnh vc t v theo cng thc:

    v = ((X + Y)*(R - S))-1u Nh s thy trong hm main() di y, nh cc hm ton t m cu lnh tnh v c vit gn

    ging nh cng thc ton hc nu trn. /* Chng trnh */ #include #include #include #include struct MT

    { double a[20][20]; // Mang chua cac phan tu ma tran int n ; // Cap ma tran

    } ; struct VT

    { double b[20]; // Mang chua cac phan tu cua vec to int n ; // Cap vec to

    } ; ostream& operator (istream& is,MT& x); istream& operator>> (istream& is, VT &v); MT operator+(const MT& x1, const MT& x2); MT operator-(const MT& x1, const MT& x2); MT operator*(const MT& x1, const MT& x2); VT operator*(const MT& x, const VT& v); MT operator!(MT x); // Tinh ma tran nghich dao ostream& operator

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 57 [email protected]

    }

    ostream& operator

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 58 [email protected]

    { MT x; int i, j, n; n = x.n = x1.n ; for (i=1; i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 59 [email protected]

    n = x.n = x1.n; for (i=1; i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 60 [email protected]

    for (j=1 ; j

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 61 [email protected]

    y.a[i][j] -= tg*y.a[k][j] ; }

    } }

    return y; }

    void main() {

    MT x,y,r,s; VT u,v; clrscr(); cout x; cout y; cout r; cout s; cout u; v = !((x+y)*(r-s))*u ; cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 62 [email protected]

    Chng 3

    Khi nim v lp Nh ni trn, 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 v bn ghi (record) ca PASCAL. Ngoi cc thnh phn d liu (nh cu trc), lp cn cha cc thnh phn hm , cn gi l phng thc (method) hay hm thnh vin (member function). Cng ging nh cu trc, lp c th xem nh mt kiu d liu. V vy lp cn gi l kiu i tng v lp c dng khai bo cc bin, mng i tng (nh th dng kiu int khai bo cc bin mng nguyn). Nh vy t mt lp c th to ra (bng cch khai bo) nhiu i tng (bin, mng) khc nhau. Mi i tng c vng nh ring ca mnh. V vy cng c th quan nim lp l tp hp cc i tng cng kiu.

    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.

    Bi 1. nh ngha lp 1. Lp c nh ngha theo mu: class tn_lp

    { // Khai bo cc thnh phn d liu (thuc tnh) // Khai bo cc phng thc

    } ; // nh ngha (xy dng) cc phng thc

    Ch : Thuc tnh ca lp c th l cc bin, mng, con tr c kiu chun (int, float, char, char*,

    long,...) hoc kiu ngoi chun nh ngha trc (cu trc, hp, lp, ...) . Thuc tnh ca lp khng th c kiu ca chnh lp , nhng c th l kiu con tr 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 ...

    } ; 2. Khi bo cc thnh phn ca lp (thuc tnh v phng thc) c th dng cc t kho private

    v public quy nh phm vi s dng ca cc thnh phn. Nu khng quy nh c th (khng dng cc t kho private v public) th C++ hiu l private.

    Cc thnh phn private (ring) ch c s dng bn trong lp (trong thn ca cc phng thc ca lp). Cc hm khng phi l phng thc ca lp khng c php s dng cc thnh phn ny.

    Cc thnh phn public (cng cng) c php s dng c bn trong v bn ngoi lp. 3. Cc thnh phn d liu thng (nhng khng bt buc) khai bo l private bo m tnh

    giu kn, bo v an ton d liu ca lp, khng cho php cc hm bn ngoi xm nhp vo d liu ca lp.

    4. Cc phng thc thng khai bo l public chng c th c gi ti (s dng) t cc hm khc trong chng trnh.

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 63 [email protected]

    5. Cc phng thc c th c xy dng bn ngoi hoc bn trong nh ngha lp. Thng thng, cc phng thc ngn c vit bn trong nh ngha lp, cn cc phng thc di th vit bn ngoi nh ngha lp.

    6. Trong thn phng thc ca mt lp (gi s lp A) c th s dng: + Cc thuc tnh ca lp A + Cc phng thc ca lp A + Cc hm t lp trong chng trnh. V phm vi s dng ca hm l ton chng trnh. 7. Gi tr tr v ca phng thc c th c kiu bt k (chun v ngoi chun) V d sau s minh ho cc iu ni trn. Chng ta s nh ngha lp m t v x l cc im

    trn mn hnh ho. Lp c t tn l DIEM. + Cc thuc tnh ca lp gm:

    int x ; // honh (ct) int y ; // tung (hng) int m ; // mu

    + Cc phng thc: Nhp d liu mt im Hin th mt im n mt im

    Lp im c xy dng nh sau: class DIEM

    { private:

    int x, y, m ; public:

    void nhapsl() ; void hien() ; void an()

    { putpixel(x, y, getbkcolor());

    } } ;

    void DIEM::nhap() {

    cout > x >> y ; cout > m ;

    }

    void DIEM::hien() {

    int mau_ht ;

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 64 [email protected]

    mau_ht = getcolor(); putpixel(x, y, m); setcolor(mau_ht);

    }

    Qua v d trn c th rt ra mt s iu cn nh sau: + Trong c 3 phng thc (d vit trong hay vit ngoi nh ngha lp) u c php truy nhp

    n cc thuc tnh x, y v m ca lp. + Cc phng thc vit bn trong nh ngha lp (nh phng thc an() ) c vit nh mt

    hm thng thng. + Khi xy dng cc phng thc bn ngoi lp, cn dng thm tn lp v ton t phm vi :: t

    ngay trc tn phng phc quy nh r y l phng thc ca lp no.

    Bi 2. Bin, mng i tng Nh ni trn, mt lp (sau khi nh ngha) c th xem nh mt kiu i tng v c th

    dng khai bo cc bin, mng i tng. Cch khai bo bin, mng i tng cng ging nh khai bo bin, mng cc kiu khc (nh int, float, cu trc, hp, ...), theo mu sau:

    Tn_lp danh sch i ; Tn_lp danh sch mng ;

    V d s dng lp DIEM 1, c th khai bo cc bin, mng DIEM nh sau: DIEM d1, d2, d3 ; // Khai bo 3 bin i tng d1, d2, d3 DIEM d[20] ; // Khai bo mng i tng d gm 20 phn t

    Mi i tng sau khi khai bo s c cp pht mt vng nh ring cha cc thuc tnh ca chng. Ch rng s khng c vng nh ring cha cc phng thc cho mi i tng. Cc phng thc s c s dng chung cho tt c cc i tng cng lp. Nh vy v b nh c cp pht th i tng ging cu trc. Trong trng hp ny:

    sizeof(d1) = sizeof(d2) = sizeof(d3) = 3*sizeof(int) = 6 sizeof(d) = 20*6 = 120

    Thuc tnh ca i tng: Trong v d trn, mi i tng d1, d2, d3 v mi phn t d[i] u c 3 thuc tnh l x, y, m.

    Ch l mi thuc u thuc v mt i tng, v vy khng th vit tn thuc mt cch ring r m bao gi cng phi c tn i tng i km, ging nh cch vit trong cu trc ca C hay bn ghi ca PASCAL. Ni cch khc, cch vit thuc tnh ca i tng nh sau:

    tn_i_tng.Tn_thuc_tnh Vi cc i tng d1, d2, d3 v mng d, c th vit nh sau:

    d1.x // Thuc tnh x ca i tng d1 d2.x // Thuc tnh x ca i tng d2 d3.y // Thuc tnh y ca i tng d3 d[2].m // Thuc tnh m ca phn t d[2] d1.x = 100 ; // Gn 100 cho d1.x d2.y = d1.x; // Gn d1.x cho d2.y

    S dng cc phng thc

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 65 [email protected]

    Cng ging nh hm, mt phng thc c s dng thng qua li gi. Tuy nhin trong li gi phng thc bao gi cng phi c tn i tng ch r phng thc thc hin trn cc thuc tnh ca i tng no. V d li gi:

    d1.nhapsl(); s thc hin nhp s liu vo cc thnh phn d1.x, d1.y v d1.m

    Cu lnh d[3].nhapsl() ;

    s thc hin nhp s liu vo cc thnh phn d[3].x, d[3].y v d[3].m Chng ta s minh ho cc iu ni trn bng mt chng trnh n gin s dng lp DIEM

    nhp 3 im, hin ri n cc im va nhp. Trong chng trnh a vo hm kd_do_hoa() dng khi ng h ho.

    #include #include #include class DIEM

    { private:

    int x, y, m ; public:

    void nhapsl(); void an()

    { putpixel(x,y,getbkcolor());

    } void hien();

    }; void DIEM::nhapsl()

    { cout > x >> y ; cout > m ;

    }

    void DIEM::hien() {

    int mau_ht; mau_ht = getcolor() ; putpixel(x,y,m); setcolor(mau_ht);

    }

    void kd_do_hoa()

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 66 [email protected]

    { int mh, mode ; mh=mode=0; initgraph(&mh, &mode, "");

    }

    void main() {

    DIEM d1, d2, d3 ; d1.nhapsl(); d2.nhapsl(); d3.nhapsl(); kd_do_hoa(); setbkcolor(BLACK); d1.hien(); d2.hien(); d3.hien(); getch(); d1.an(); d2.an(); d3.an(); getch(); closegraph();

    }

    Bi 3. Con tr i tng Con tr i tng dng cha a ch ca bin, mng i tng. N c khai bo nh sau:

    Tn_lp *con tr ; V d dng lp DIEM c th khai bo:

    DIEM *p1 , *p2, *p3 ; // khai bo 3 con tr p1, p2, p3 DIEM d1, d2 ; // Khai bo 2 i tng d1, d2 DIEM d[20] ; // Khai bo mng i tng

    v c th thc hin cc cu lnh: p1 = &d2 ; // p1 cha a ch ca d2 , hay p1 tr ti d2 p2 = d ; // p2 tr ti u mng d p3 = new DIEM // To mt i tng v cha a ch ca n

    // vo p3 s dng thuc tnh ca i tng thng qua con tr, ta vit nh sau:

    Tn_con_tr->Tn_thuc_tnh Ch : Nu con tr cha a ch u ca mng, c th dng con tr nh tn mng.

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 67 [email protected]

    Nh vy sau khi thc hin cc cu lnh trn th: p1->x v d2.x l nh nhau p2[i].y v d[i].y l nh nhau

    Tm li ta c quy tc sau Quy tc s dng thuc tnh: s dng mt thuc tnh ca i tng ta phi dng php . hoc

    php -> . Trong chng trnh, khng cho php vit tn thuc tnh mt cch n c m phi i km tn i tng hoc tn con tr theo cc mu sau:

    Tn_i_tng.Tn_thuc_tnh Tn_con_tr->Tn_thuc_tnh Tn_mng_i_tng[ch_s].Tn_thuc_tnh Tn_con_tr[ch_s].Tn_thuc_tnh

    Chng trnh di y cng s dng lp DIEM (trong 1) nhp mt dy im, hin th v n cc im va nhp. Chng trnh dng mt con tr kiu DIEM v dng ton t new to ra mt dy i tng.

    #include #include #include class DIEM

    { private:

    int x, y, m ; public:

    void nhapsl(); void an()

    { putpixel(x,y,getbkcolor());

    } void hien();

    }; void DIEM::nhapsl()

    { cout x >> y ; cout > m ;

    }

    void DIEM::hien() {

    int mau_ht; mau_ht = getcolor() ; putpixel(x,y,m);

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 68 [email protected]

    setcolor(mau_ht); }

    void kd_do_hoa() {

    int mh, mode ; mh=mode=0; initgraph(&mh, &mode, "");

    }

    void main() {

    DIEM *p; int i, n; cout > n; p = new DIEM[n+1]; for (i=1; i m ;

    }

    R rng trong phng thc ny chng ta s dng tn cc thuc tnh x, y v m mt cch n c. iu ny c v nh mu thun vi quy tc s dng thuc tnh nu trong mc trc. Song s th nh sau:

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 69 [email protected]

    C++ s dng con tr c bit this trong cc phng thc. Cc thuc tnh vit trong phng thc c hiu l thuc mt i tng do con tr this tr ti. Nh vy phng thc nhapsl() c th vit mt cch tng minh nh sau:

    void DIEM::nhapsl() {

    cout > this->x >> this->y ; cout > this->m ;

    }

    T gc hm s c th kt lun rng: Phng thc bao gi cng c t nht mt i l con tr this v n lun lun l i u tin ca phng thc.

    4.2. Tham s ng vi i con tr this Xt mt li gi ti phng thc nhapsl() :

    DIEM d1; d1.nhapsl() ;

    Trong trng hp ny tham s truyn cho con tr this chnh l a ch ca d1: this = &d1

    Do : this->x chnh l d1.x this->y chnh l d1.y this->m chnh l d1.m

    Nh vy cu lnh d1.nhapsl() ;

    s nhp d liu cho cc thuc tnh ca i tng d1. T c th rt ra kt lun sau: Tham s truyn cho i con tr this chnh l a ch ca i tng i km vi phng thc trong

    li gi phng thc.

    4.3. Cc i khc ca phng thc Ngoi i c bit this (i ny khng xut hin mt cch tng minh), phng thc cn c cc

    i khc c khai bo nh trong cc hm. i ca phng thc c th c kiu bt k (chun v ngoi chun).

    V d xy dng phng thc v ng thng qua 2 im ta cn a vo 3 i: Hai i l 2 bin kiu DIEM, i th ba kiu nguyn xc nh m mu. V c i ngm nh this l i th nht, nn ch cn khai bo thm 2 i. Phng thc c th vit nh sau:

    void DIEM::doan_thang(DIEM d2, int mau) {

    int mau_ht; mau_ht = getcolor(); setcolor(mau); line(this->x,this->y,d2.x,d2.y);

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 70 [email protected]

    setcolor(mau_ht); }

    Chng trnh sau minh ho cc phng thc c nhiu i. Ta vn dng lp DIEM nhng c mt s thay i:

    + B thuc tnh m (mu) + B cc phng thc hien v an +a vo 4 phng thc mi: ve_ doan_thang (V on thng qua 2 im) ve_tam_giac (V tam gic qua 3 im) do_dai (Tnh di ca on thng qua 2 im) chu_vi (Tnh chu vi tam gic qua 3 im)

    Chng trnh cn minh ho: + Vic phng thc ny s dng phng thc khc (phng thc ve_tam_giac s dng phng

    thc ve_doan_thang, phng thc chu_vi s dng phng thc do_dai) + S dng con tr this trong thn cc phng thc ve_tam_giac v chu_vi Ni dung chng trnh l nhp 3 im, v tam gic c nh l 3 im va nhp sau tnh chu vi

    tam gic. #include #include #include #include #include class DIEM

    { private:

    int x, y ; public:

    void nhapsl(); void ve_doan_thang(DIEM d2, int mau) ; void ve_tam_giac(DIEM d2, DIEM d3,int mau) ; double do_dai(DIEM d2)

    { DIEM d1 = *this ; return sqrt( pow(d1.x - d2.x,2) + pow(d1.y - d2.y,2) ) ;

    } double chu_vi(DIEM d2, DIEM d3);

    }; void DIEM::nhapsl()

    { cout x >> y ;

    } void kd_do_hoa()

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 71 [email protected]

    { int mh, mode ; mh=mode=0; initgraph(&mh, &mode, "");

    } void DIEM::ve_doan_thang(DIEM d2, int mau)

    { setcolor(mau); line(this->x,this->y,d2.x,d2.y);

    }

    void DIEM::ve_tam_giac(DIEM d2, DIEM d3,int mau) {

    (*this).ve_doan_thang(d2,mau); d2.ve_doan_thang(d3,mau); d3.ve_doan_thang(*this,mau);

    }

    double DIEM::chu_vi(DIEM d2, DIEM d3) {

    double s; s= (*this).do_dai(d2) + d2.do_dai(d3) + d3.do_dai(*this) ; return s;

    }

    void main() {

    DIEM d1, d2, d3; char tb_cv[20] ; d1.nhapsl(); d2.nhapsl(); d3.nhapsl(); kd_do_hoa(); d1.ve_tam_giac(d2,d3,15); double s = d1.chu_vi(d2,d3); sprintf(tb_cv,"Chu vi = %0.2f", s); outtextxy(10,10,tb_cv); getch(); closegraph();

    }

    Mt s nhn xt v i ca phng thc v li gi phng thc + Quan st nguyn mu phng thc:

    void ve_doan_thang(DIEM d2, int mau) ; s thy phng thc c 3 i:

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 72 [email protected]

    i th nht l mt i tng DIEM do this tr ti i th hai l i tng DIEM d2 i th ba l bin nguyn mau

    Ni dung phng thc l v mt on thng i qua cc im *this v d2 theo m mu mau. Xem thn ca phng s thy c ni dung ny:

    void DIEM::ve_doan_thang(DIEM d2, int mau) {

    setcolor(mau); line(this->x,this->y,d2.x,d2.y);

    }

    Tuy nhin trong trng hp ny, vai tr ca this khng cao lm, v n c a vo ch ct lm r i th nht. Trong thn phng thc c th b t kho this vn c.

    + Vai tr ca this tr nn quan trng trong phng thc ve_tam_giac: void ve_tam_giac(DIEM d2, DIEM d3,int mau) ;

    Phng thc ny c 4 i l: this tr ti mt i tng kiu DIEM d2 mt i tng kiu DIEM d3 mt i tng kiu DIEM mau mt bin nguyn

    Ni dung phng thc l v 3 cnh: cnh 1 i qua *this v d2 cnh 2 i qua d2 v d3 cnh 3 i qua d3 v *this

    Cc cnh trn c v nh s dng phng thc ve_doan_thang: V cnh 1 dng lnh: (*this).ve_doan_thang(d2,mau) ; V cnh 2 dng lnh: d2.ve_doan_thang(d3,mau); V cnh 3 dng lnh: d3.ve_doan_thang(*this,mau);

    Trong trng ny r rng vai tr ca this rt quan trng. Nu khng dng n th cng vic tr nn kh khn, di dng v kh hiu hn. Chng ta hy so snh 2 phng n:

    Phng n dng this trong phng thc ve_tam_giac: void DIEM::ve_tam_giac(DIEM d2, DIEM d3,int mau)

    { (*this).ve_doan_thang(d2,mau); d2.ve_doan_thang(d3,mau); d3.ve_doan_thang(*this,mau);

    } Phng n khng dng this trong phng thc ve_tam_giac: void DIEM::ve_tam_giac(DIEM d2, DIEM d3,int mau)

    { DIEM d1;

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 73 [email protected]

    d1.x = x; d1.y = y; d1.ve_doan_thang(d2,mau); d2.ve_doan_thang(d3,mau); d3.ve_doan_thang(d1,mau);

    }

    Bi 5. Ni thm v kiu phng thc v kiu i ca phng thc 5.1. Kiu phng thc

    Phng thc c th khng c gi tr tr v (kiu void) hoc c th tr v mt gi tr c kiu bt k, k c gi tr kiu i tng, con tr i tng, tham chiu i tng.

    5.2. i ca phng thc i ca phng thc (cng ging nh i ca hm) c th c kiu bt k: + Kiu d liu chun nh int, float, char,... . Con tr hoc tham chiu n kiu d liu chun

    nh int*, float*, char*, int&, float&, char&,... + Cc kiu ngoi chun nh ngha trc nh i tng, cu trc, hp, enum,... . Con tr

    hoc tham chiu n cc kiu ngoi chun ny. + Kiu i tng ca chnh phng thc, con tr hoc tham chiu n kiu i tng ny.

    5.3. Cc v d V d 1 minh ho: + Thuc tnh (thnh phn d liu) ca lp c th l i tng ca lp khc nh ngha bn

    trn. + Phng thc c gi tr tr v kiu i tng v con tr i tng. Ni dung chng trnh l nhp mt dy hnh ch nht, sau tm hnh ch nht c max din tch

    v hnh ch nht c max chu vi. Chng trnh c t chc thnh 2 lp: + Lp HINH_CN gm:

    - Cc thuc tnh: d v r (chiu di v chiu rng) - Cc phng thc

    void nhapsl() ; // Nhp chiu di, rng int dien_tich(); // Tnh din tch int chu_vi() ; // Tnh chu vi

    + Lp DAY_HINH_CN gm - Cc thuc tnh:

    int n ; //s hnh ch nht ca dy HINH_CN *h; //Con tr ti dy i tng ca lp HINH_CN

    - Cc phng thc void nhapsl(); // Nhp mt dy hnh ch nht HINH_CN hinh_dt_max() ; //Tr v hnh ch nht c

    // din tch max

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 74 [email protected]

    HINH_CN *hinh_cv_max() ; // Tr v con tr ti HCN c // chu vi max

    #include #include class HINH_CN

    { private:

    int d, r; // chieu dai va chieu rong public:

    void nhapsl() {

    cout > d >> r ;

    } void in()

    { cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 75 [email protected]

    cin >> n; h = new HINH_CN[n+1]; for (int i=1;iin() ; getch();

    }

    V d 2 minh ho: + Thuc tnh (thnh phn d liu) ca lp c th l i tng ca lp khc nh ngha bn

    trn. + Phng thc c gi tr tr v kiu i tng + Vai tr ca con tr this (xem phng thc maxdt ca lp TAM_GIAC) + Phng thc tnh (xem phng thc tao_tg ca lp TAM_GIAC)

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 76 [email protected]

    Ni dung chng trnh l nhp mt dy cc im, sau tm tam gic ln nht (v din tch) c nh l cc im va nhp.

    Chng trnh c t chc thnh 2 lp: + Lp DIEM gm:

    - Cc thuc tnh: x v y (to ca im) - Cc phng thc

    void nhapsl() ; // Nhp x, y void in() ; // In to double do_dai(DIEM d2) ; // Tnh di on thng qua

    // 2 im (im n xc nh bi this v im d2) + Lp TAM_GIAC gm:

    - Cc thuc tnh: DIEM d1,d2,d3; // 3 nh ca tam gic - Cc phng thc:

    void nhapsl(); // Nhp to 3 nh void in(); // In to 3 nh

    // To mt i tng TAM_GIAC t 3 i tng DIEM static TAM_GIAC tao_tg(DIEM e1, DIEM e2, DIEM e3) double dien_tich() ; // Tnh din tch // Tm tam gic c din tch max trong 2 tam gic *this v t2 TAM_GIAC maxdt(TAM_GIAC t2);

    + Cc vn ng ch trong chng trnh l: - Phng thc tnh tao_tg (s gii thch bn di) - Phng thc maxdt

    + Thut ton l: - Duyt qua cc t hp 3 im. - Dng phng thc tao_tg lp tam gic t 3 im

    - Dng phng thc maxdt chn tam gic c din tch ln hn trong 2 tam gic: tam gic va to v tam gic c din tch max (trong s cc tam gic to)

    #include #include #include class DIEM

    { private:

    double x,y; // Toa do cua diem public:

    void nhapsl() {

    cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 77 [email protected]

    cin >> x >> y ; }

    void in() {

    cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 78 [email protected]

    cout t2.dien_tich()) return *this ;

    else return t2;

    }

    void main() {

    DIEM d[50]; int n, i ; clrscr(); cout > n; for (i=1; i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 79 [email protected]

    cout y ;

    } void in()

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 80 [email protected]

    { cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 81 [email protected]

    double TAM_GIAC::dien_tich() {

    double a,b,c,p,s; a=d1.do_dai(d2); b=d2.do_dai(d3); c=d3.do_dai(d1); p=(a+b+c)/2; return sqrt(p*(p-a)*(p-b)*(p-c));

    }

    TAM_GIAC TAM_GIAC::maxdt(TAM_GIAC t2) {

    if (this->dien_tich() > t2.dien_tich()) return *this ;

    else return t2;

    } void main()

    { DIEM d[50]; int n, i ; clrscr(); cout > n; for (i=1; i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 82 [email protected]

    cout > y ;

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 83 [email protected]

    } void in()

    { cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 84 [email protected]

    a=d1.do_dai(d2); b=d2.do_dai(d3); c=d3.do_dai(d1); p=(a+b+c)/2; return sqrt(p*(p-a)*(p-b)*(p-c));

    } Bng cch dng hm dt_tg, c th t chc li chng trnh tm tam gic c din tch ln nht (

    mc trn) mt cch n gin hn( b i lp TAM_GIAC) nh v d sau. V d 1: #include #include #include class DIEM

    { private:

    double x,y; // Toa do cua diem public:

    void nhapsl() {

    cout > x >> y ;

    }

    void in() {

    cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 85 [email protected]

    { DIEM d[50]; int n, i,j,k,imax,jmax,kmax ; clrscr(); cout > n; for (i=1; i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 86 [email protected]

    double x,y; // Toa do cua diem public:

    void nhapsl(); void in();

    double do_dai(DIEM d2); } ;

    // Ch : Khai bo mng kiu DIEM phi t sau nh ngha // lp DIEM DIEM d[50]; void DIEM::nhapsl()

    { cout > x >> y ;

    }

    void DIEM::in() {

    cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 87 [email protected]

    } imax=1; jmax=2; kmax=3; for (i=1;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 88 [email protected]

    double f2(...) {

    ... }

    A f3(...) {

    ... }

    Cch 2: Dng t kho friend xy dng hm trong nh ngha lp. Mu vit nh sau: class A

    { private:

    // Khai bo cc thuc tnh public:

    ... // Xy dng cc hm bn ca lp A void f1(...)

    { ...

    } double f2(...)

    { ...

    } A f3(...)

    { ...

    } ...

    } ;

    6.2.2. Tnh cht ca hm bn Trong thn hm bn ca mt lp c th truy nhp ti cc thuc tnh ca cc i tng thuc lp

    ny. y l s khc nhau duy nht gia hm bn v hm thng thng. Ch rng hm bn khng phi l phng thc ca lp. Phng thc c mt i n (ng vi con tr this) v li gi ca phng thc phi gn vi mt i tng no (a ch i tng ny c truyn cho con tr this). Li gi ca hm bn ging nh li gi ca hm thng thng.

    V d sau s so snh phng thc, hm bn v hm t do (hm thng thng). Xt lp SP (s phc). Hy so snh 3 phng n thc hin vic cng 2 s phc:

    Phng n 1: Dng phng thc class SP

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 89 [email protected]

    { private:

    double a; // Phn thc double b; // Phn o

    public: SP cong(SP u2)

    { SP u: u.a = this->a + u2.a ; u.b = this->b + u2.b ; return u;

    } } ;

    Cch dng SP u, u1, u2; u = u1.cong(u2);

    Phng n 2: Dng hm bn class SP

    { private:

    double a; // Phn thc double b; // Phn o

    public: friend SP cong(SP u1, SP u2)

    { SP u: u.a = u1.a + u2.a ; u.b = u1.b + u2.b ; return u;

    } };

    Cch dng SP u, u1, u2; u = cong(u1, u2);

    Phng n 3: Dng hm t do class SP

    { private:

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 90 [email protected]

    double a; // Phn thc double b; // Phn o

    public: ...

    } ;

    SP cong(SP u1, SP u2) {

    SP u: u.a = u1.a + u2.a ; u.b = u1.b + u2.b ; return u;

    } Phng n ny khng c chp nhn, Trnh bin dch s bo li v trong thn hm khng c

    quyn truy xut n cc thuc tnh ring (private) a, b ca cc i tng u, u1 v u2 thuc lp SP.

    6.2.3. Mt hm c th l bn ca nhiu lp c khng? Cu tr li l c. Khi mt hm l bn ca nhiu lp, th n c quyn truy nhp ti tt c cc thuc tnh ca cc i tng trong cc lp ny. lm cho hm f tr thnh bn ca cc lp A, B v C ta s dng mu vit sau:

    class B; // Khai bo trc lp A class B; // Khai bo trc lp B class C; // Khai bo trc lp C // nh ngha lp A class 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

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 91 [email protected]

    void f(...) {

    ... }

    Chng trnh sau y minh ho cch dng hm bn (bn ca mt lp v bn ca nhiu lp). Chng trnh a vo 2 lp VT (vc t), MT (ma trn) v 3 hm bn thc hin cc thao tc trn 2 lp ny:

    // Hm bn vi lp VT dng in mt vc t friend void in(const VT &x); // Hm bn vi lp MT dng in mt ma trn friend void in(const MT &a); // Hm bn vi c 2 lp MT v VT dng nhn ma trn vi vc t friend VT tich(const MT &a,const VT &x); Ni dung chng trnh l nhp mt ma trn vung cp n v mt vc t cp n, sau thc hin

    php nhn ma trn vi vc t va nhp. // Chng trnh CT3_09.CPP #include #include #include class VT; class MT ; class VT

    { private:

    int n; double x[20]; // Toa do cua diem

    public: void nhapsl(); friend void in(const VT &x); friend VT tich(const MT &a,const VT &x) ;

    } ; class MT

    { private:

    int n; double a[20][20];

    public: friend VT tich(const MT &a,const VT &x); friend void in(const MT &a); void nhapsl();

    } ;

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 92 [email protected]

    void VT::nhapsl() {

    cout > n ; for (int i=1; i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 93 [email protected]

    for (int i=1; i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 94 [email protected]

    // Khai bo cc thnh phn chung (cng cng) Ch : Cc thnh phn khai bo mc nh (khng dng cc t kho private v public) c xem

    l cc thnh phn private.

    7.2. Cc thnh phn ring ca lp ch c s dng trong phm vi ca lp (trong thn cc phng thc ca lp). Chng khng th em ra s dng bn ngoi lp.

    + Mt thuc tnh private: Thuc tnh ny (ca mt i tng no ) ch c th c s dng trong thn ca cc phng thc cng lp.

    + Mt phng thc private: Ch c s dng trong thn ca cc phng thc cng lp. V d sau minh ho cch dng phng thc private. Xt lp PS (phn s) vi 2 thuc tnh

    nguyn l t (t) v m (mu). Gi s cn xy dng cc phng thc thc hin cc php ton cng tr, nhn, chia phn s. Do cc php ton ny cn dng trong ton b chng trnh, nn cc phng thc thc hin cc php ton cn khai bo l public. thc hin cc php tnh trn phn s cn dng n php rt gn phn s. Ta c th dng mt phng thc private lm iu ny v vic rt gn ch dng trong ni b lp.

    7.3. Cc thnh phn cng cng ca lp c phm vi s dng trong ton chng trnh. Nh vy nu mt thuc tnh c khai bo l public, th n c th c truy nhp trong thn ca bt k hm no trong chng trnh.

    V d trong 6 ch ra phng n dng mt hm (t do) thc hin php cng 2 s phc nh sau l sai:

    Phng n 3: Dng hm t do class SP

    { private:

    double a; // Phn thc double b; // Phn o

    public: ...

    } ;

    SP cong(SP u1, SP u2) {

    SP u: u.a = u1.a + u2.a ; u.b = u1.b + u2.b ; return u;

    }

    Tuy nhin nu sa cha bng cch khai bo cc thuc tnh a v b l public th li c. Nhn xt: Cc thuc tnh thng khai bo l private m bo tnh du kn, an ton d liu

    ca lp.

    Bi 8. Cc phng thc ton t 8.1. Cch t tn

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 95 [email protected]

    Cc phng thc ton t c xy dng nh cc phng thc thng thng, ch c khc cch t tn. Tn cc phng thc ton t (cng ging nh hm ton t) c to bng cch ghp t kho operator vi mt php ton, v d:

    operator+ operator>

    8.2. Con tr this Cng ging nh phng thc thng thng, phng thc ton t c i u tin (i khng

    tng minh) l con tr this.

    8.3. Ton t mt ton hng Cc phng thc ton t mt ton hng: Dng ngay con tr this biu th ton hng duy nht

    ny, nn trong phng thc s khng c i tng minh. V d phng thc ton t - (i du) mt i tng kiu SP (s phc) c th vit nh sau:

    class SP {

    private: double a; // Phn thc double b; // Phn o

    public: SP operator-();

    } ;

    SP SP:: operator-() {

    SP u ; u.a = - this->a ; u.b = - this->b ; return u;

    }

    Cch dng: SP u, v; u = -v;

    8.4. Ton t hai ton hng Cc phng thc ton t hai ton hng: Con tr this ng vi ton hng th nht, nn trong

    phng thc ch cn dng mt i tng minh biu th ton hng th hai. V d phng thc ton t + (cng) hai i tng kiu SP (s phc) c th vit nh sau:

    class SP {

    private: double a; // Phn thc double b; // Phn o

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 96 [email protected]

    public: SP operator+(SP u2);

    } ;

    SP SP:: operator+(SP u2) {

    SP u ; u.a = this->a + u2.a ; u.b = this->b + u2.b ; return u;

    } Cch dng:

    SP p, p, r; r = p + q ;

    8.5. Lp DT (a thc) Chng trnh sau s nh ngha lp DT v a vo cc phng thc, hm: + Cc thuc tnh:

    int n ; // bc a thc double *a ; // tr ti vng nh cha cc h s a thc

    + Cc phng thc operator+, operator- dng i du cc h s a thc operator+ dng cng 2 a thc operator- dng tr 2 a thc operator* dng nhn 2 a thc operator^ dng tnh gi tr a thc operator[] dng cho bit bc v h s ca a thc

    + Cc hm bn: operator> dng nhp cc h s a thc

    + Hm (t do) double F(DT p, double x) dng tnh p(x)-gi tr a thc ti x

    + Ni thm v phng thc ch s v hm t do F - Nu p l i tng ca lp DT, th hm ch s cho bit:

    p[-1] = double(n) p[i] = a[i] , i=0, 1, ..., n

    - Hm t do F s dng phng thc ch s xc nh n , cc h s a thc v dng chng tnh gi tr a thc. + Trong chng trnh s dng hm new cp pht vng nh cha h s a thc. + Ni dung chng trnh gm:

    - Nhp, in cc a thc p, q, r, s - Tnh a thc: f = -(p + q)*(r - s)

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 97 [email protected]

    - Nhp cc s thc x1 v x2 - Tnh f(x1) (bng cch dng phng thc operator^) - Tnh f(x2) (bng cch dng hm F)

    // Chng trnh CT3_10.CPP #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:

    friend ostream& operator> (istream& is,DT &d); DT operator-(); DT operator+(const DT &d2); DT operator-(DT d2); DT operator*(const DT &d2); double operator^(const double &x); // Tinh gia tri da thuc double operator[](int i)

    { if(i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 98 [email protected]

    { os

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 99 [email protected]

    i=k; while(i>0 && d.a[i]==0.0) --i; d.n = i; return d ;

    }

    DT DT::operator-(DT d2) {

    return (*this + (-d2)); }

    DT DT::operator*(const DT &d2) {

    DT d; int k, i, j; k = d.n = n + d2.n ; d.a = new double[k+1]; for (i=0; i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 100 [email protected]

    cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 101 [email protected]

    Chng 4

    Hm to, hm hu v cc vn lin quan

    Chng ny trnh by mt s vn c tnh chuyn su hn v lp nh: + Hm to (constructor) + Hm hu (destructor) + Ton t gn v hm to sao chp + Mi lin quan gia hm to v i tng thnh phn + Cc thnh phn tnh + Lp bn, hm bn + i tng hng + Phng thc inline

    Bi 1. Hm to (constructor) 1.1. Cng dng

    Hm to cng l mt phng thc ca lp (nhng kh c bit) dng to dng mt i tng mi. Chng trnh dch s cp pht b nh cho i tng sau s gi n hm to. Hm to s khi gn gi tr cho cc thuc tnh ca i tng v c th thc hin mt s cng vic khc nhm chun b cho i tng mi.

    1.2. Cch vit hm to

    1.2.1. im khc ca hm to v cc phng thc thng thng Khi vit hm to cn 3 s khc bit ca hm to so vi cc phng thc khc nh sau: + Tn ca hm to: Tn ca hm to bt buc phi trng vi tn ca lp. + Khng khai bo kiu cho hm to. + Hm to khng c kt qu tr v.

    1.2.2. S ging nhau ca hm to v cc phng thc thng thng Ngoi 3 im khc bit trn, hm to c vit nh cc phng thc khc: + Hm to c th c xy dng bn trong hoc bn ngoi nh ngha lp. + Hm to c th c i hoc khng c i. + Trong mt lp c th c nhiu hm to (cng tn nhng khc b i). V d sau nh ngha lp DIEM_DH (im ho) c 3 thuc tnh:

    int x; // honh (ct) ca im int y; // tung (hng) ca im int m; // mu ca im

    v a vo 2 hm to khi gn cho cc thuc tnh ca lp: // Hm to khng i: Dng cc gi tr c nh khi gn cho // x, y, m DIEM_DH() ; // Hm to c i: Dng cc i x1, y1, m1 khi gn cho // x, y, m

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 102 [email protected]

    // i m1 c gi tr mc nh 15 (mu trng) DIEM_DH(int x1, int y1, int m1=15) ; class DIEM_DH

    { private:

    int x, y, m ; public:

    //Hm to khng i: khi gn cho x=0, y=0, m=1 // Hm ny vit bn trong nh ngha lp DIEM_DH()

    { x=y=0; m=1;

    } // Hm to ny xy dng bn ngoi nh ngha lp DIEM_DH(int x1, int y1, int m1=15) ; // Cc phng thc khc

    } ; // Xy dng hm to bn ngoi nh ngha lp DIEM_DH:: DIEM_DH(int x1, int y1, int m1)

    { x=x1; y=y1; m=m1;

    }

    1.3. Dng hm to trong khai bo + Khi xy dng cc hm to, ta c th dng chng trong khai bo to ra mt i tng

    ng thi khi gn cho cc thuc tnh ca i tng c to. Da vo cc tham s trong khai bo m Trnh bin dch s bit cn gi n hm to no.

    + Khi khai bo mt bin i tng c th s dng cc tham s khi gn cho cc thuc tnh ca bin i tng.

    + Khi khai bo mng i tng khng cho php dng cc tham s khi gn. + Cu lnh khai bo mt bin i tng s gi ti hm to 1 ln + Cu lnh khai bo mt mng n i tng s gi ti hm to n ln.

    V d: DIEM_DH d; // Gi ti hm to khng i. // Kt qu d.x=0, d.y=0, d.m=1 DIEM_DH u(200,100,4); // Gi ti hm to c i. // Kt qu u.x=200, u.y=100, d.m=4 DIEM_DH v(300,250); // Gi ti hm to c i. // Kt qu v.x=300, v.y=250, d.m=15 DIEM_DH p[10] ; // Gi ti hm to khng i 10 ln

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 103 [email protected]

    Ch : Vi cc hm c i kiu lp, th i ch xem l cc tham s hnh thc, v vy khai bo i (trong dng u ca hm) s khng to ra i tng mi v do khng gi ti cc hm to.

    1.4. Dng hm to trong cp pht b nh + Khi cp pht b nh cho mt i tng c th dng cc tham s khi gn cho cc thuc tnh

    ca i tng, v d: DIEM_DH *q =new DIEM_DH(50,40,6);//Gi ti hm to c i // Kt qu q->x=50, q->y=40, q->m=6 DIEM_DH *r = new DIEM_DH ; // Gi ti hm to khng i // Kt qu r->x=0, r->y= 0, r->m=1 + Khi cp pht b nh cho mt dy i tng khng cho php dng tham s khi gn, v d:

    int n=20; DIEM_DH *s = new DIEM_DH[n] ; // Gi ti hm to khng

    // i 20 ln.

    1.5. Dng hm to biu din cc i tng hng + Nh bit, sau khi nh ngha lp DIEM_DH th c th xem lp ny nh mt kiu d liu

    nh int, double, char, ... Vi kiu int chng ta c cc hng int, nh 356. Vi kiu double chng ta c cc hng double, nh 98.75 Khi nim hng kiu int, hng kiu double c th m rng cho hng kiu DIEM_DH + biu din mt hng i tng (hay cn gi: i tng hng) chng ta phi dng ti hm

    to. Mu vit nh sau: Tn_lp(danh sch tham s) ; V d i vi lp DIEM_DH ni trn, c th vit nh sau: DIEM_DH(345,123,8) // Biu th mt i tng kiu DIEM_DH // c cc thuc tnh x=345, y=123, m=8 Ch : C th s dng mt hng i tng nh mt i tng. Ni cch khc, c th dng hng

    i tng thc hin mt phng thc, v d nu vit: DIEM_DH(345,123,8).in();

    th c ngha l thc hin phng thc in() i vi hng i tng.

    1.6. V d minh ho Chng trnh sau y minh ho cch xy dng hm to v cch s dng hm to trong khai bo,

    trong cp pht b nh v trong vic biu din cc hng i tng. //CT4_02.CPP #include #include #include class DIEM_DH

    { private:

    int x,y,m;

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 104 [email protected]

    public: // Hm bn dng in i tng DIEM_DH friend void in(DIEM_DH d)

    { cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 105 [email protected]

    q=new DIEM_DH[n+1]; // (n+1) ln gi hm to khng i for (int i=0;i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 106 [email protected]

    (p+i)->in(); getch(); }

    2.2. Nu trong lp c t nht mt hm to, th hm to mc nh s khng c pht sinh na. Khi mi cu lnh xy dng i tng mi u s gi n mt hm to ca lp. Nu khng tm thy hm to cn gi th Chng trnh dch s bo li. iu ny thng xy ra khi chng ta khng xy dng hm to khng i, nhng li s dng cc khai bo khng tham s nh v d sau:

    #include #include class DIEM_DH

    { private:

    int x,y,m; public:

    // Phng thc dng in i tng DIEM_DH void in()

    { cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 107 [email protected]

    #include class DIEM_DH

    { private:

    int x,y,m; public:

    // Phng thc dng in i tng DIEM_DH void in()

    { cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 108 [email protected]

    Hm to c i s to mt i tng mi (kiu DT) gm 2 thuc tnh l bin nguyn n v con tr a. Ngoi ra cn cp pht b vng nh (cho a) cha cc h s ca a thc.

    Nu khng xy dng hm to, m s dng hm to mc nh th cc i tng (kiu DT) to ra bi cc lnh khai bo s cha c b nh cha a thc. Nh vy i tng to ra cha hon chnh v cha dng c. c mt i tng hon chnh phi qua 2 bc:

    + Dng khai bo to cc i tng, v d: DT d;

    + Cp pht vng nh (cho i tng) cha a thc, v d: d.n = m; d.a = new double[m+1] ;

    Quy trnh ny c p dng trong cc phng thc ton t ca chng trnh trong mc 8.5 chng 3. R rng quy trnh ny va di va khng tin li, li hay mc li, v ngi lp trnh hay qun khng cp pht b nh.

    Vic dng cc hm to sn sinh ra cc i tng hon chnh t ra tin li hn, v trnh c cc thao tc ph (nh cp pht b nh) nm bn ngoi khai bo. Phng n dng hm to s c s dng trong cc phng thc ton t ca chng trnh di y:

    + Ni dung chng trnh gm: - Nhp, in cc a thc p, q, r, s - Tnh a thc: f = -(p + q)*(r - s) - Nhp cc s thc x1 v x2 - Tnh f(x1) (bng cch dng phng thc operator^) - Tnh f(x2) (bng cch dng hm F)

    // CT4_05.CPP #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() {

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

    DT(int n1) {

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

    } friend ostream& operator

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 109 [email protected]

    friend istream& operator>> (istream& is,DT &d); DT operator-(); DT operator+(const DT &d2); DT operator-(DT d2); DT operator*(const DT &d2); double operator^(const double &x); // Tinh gia tri da thuc double operator[](int i)

    { if (i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 110 [email protected]

    cout

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 111 [email protected]

    k = n + d2.n ; DT d(k); for (i=0; i

  • Lp Trnh Hng i Tng Vi C++

    GS: Phm Vn t 112 [email protected]

    }

    Bi 4. Hm to sao chp (copy constructor) 4.1. Hm to sao chp mc nh

    Gi s nh ngha mt lp no , v d lp PS (phn s). Khi : + Ta c th dng cu lnh khai bo hoc cp pht b nh to cc i tng mi, v d:

    PS p1, p2 ; PS *p = new PS ;

    + Ta cng c th dng lnh khai bo