You are on page 1of 13

BI 1

TNG QUAN V LP TRNH HNG I TNG


I. Gi i thi u v l p trnh ht 1. Cc ph ng php l p trnh truy n th ng a) L p trnh tuy n tnh Ton b chng trnh ch l mt n th duy nht, cc lnh c thc hin tun t theo th t xut hin trong chng trnh. Trong ngn ng C, lp trnh theo kiu tuyn tnh s ch c mt hm main. V d : vit ct nhp h tn sv, lt, th v tnh tb ca sv. #include <stdio.h> void main() { char hoten[30]; float dlt,dth,dtb; printf("Nhap ho ten:"); gets(hoten); printf("Nhap dlt:"); scanf("%f",&dlt); printf("Nhap dth:"); scanf("%f",&dth); dtb=(dlt+dth)/2; printf("\nHo ten: %s",hoten); printf("\nDlt:%.2f",dlt); printf("\nDth:%.2f",dth); printf("\nDtb:%.2f",dtb); } * Nh n xt: - u im: n gin - Khuyt im: kh sa li, kh m rng b) L p trnh h ng th t c L lp trnh da vo cc th tc (hm). Mi hm s thc hin mt chc nng ca chng trnh. Khi chng trnh thc thi th hm main s c thc hin u tin, hm main s gi cc hm khc khi cn v cc hm khc c th gi ln nhau. V d : int x; //x la du lieu co the truy xuat boi bat cu ham nao void A() { B(); } void B() { } void main() { A(); 1

} V d : vit li ct tnh tb bng cch tch ct thnh 3 hm: hm nhp, hm tnh dtb, hm xut. #include <stdio.h> void nhap(char* hoten, float* dlt, float* dth) { printf("Nhap ho ten:"); gets(hoten); printf("Nhap dlt:"); scanf("%f",dlt); printf("Nhap dth:"); scanf("%f",dth); } float tinhdtb(float dlt, float dth) { return (dlt+dth)/2; } void xuat(char* hoten, float dlt, float dth, float dtb) { printf("\nHo ten: %s",hoten); printf("\nDlt:%.2f",dlt); printf("\nDth:%.2f",dth); printf("\nDtb:%.2f",dtb); } void main() { char hoten[30]; float dlt, dth, dtb; nhap(hoten,&dlt,&dth); dtb=tinhdtb(dlt,dth); xuat(hoten,dlt,dth,dtb); } * Nh n xt: - u im: d sa li, d m rng, ph hp khi vit chng trnh nh - Khuyt im: v d liu v hm tch bit nn c cc khuyt im sau: + Kh bo v d liu v hm khng b truy xut bi cc hm khng mong i, khi sa i d liu cc hm truy xut phi thay i theo (do khng c tnh ng gi). + Kh s dng li cc hm vit sn (do khng c tnh tha k) + Khng ph hp vi suy ngh ca con ngi (do khng c tnh tru tng) khc phc cc khuyt im ca lp trnh tuyn tnh cng nh lp trnh hng th tc, ngi ta a ra mt phng php lp trnh mi l lp trnh hng i tng. 2. L p trnh h ng i t ng (Object Oriented Programming) L lp trnh da vo cc i tng (object), i tng c to ra t lp, lp gm c d liu v phng thc (hm) x l d liu ca lp.

Object A DATAS

Object B DATAS

METHODS

METHODS

M HNH CA LTHT V d: vit li ct tnh tb bng cch thit k lp sinh vin c cc thuc tnh l hoten, dlt, dth v cc phng thc l nhp, tnh dtb, xut. #include <iostream.h> class sinhvien { private: char hoten[30]; float dlt,dth; //cac thuoc tinh public: void nhap() //phuong thuc nhap { cout<<"Nhap ho ten:"; cin.getline(hoten,30); cout<<"Nhap dlt:"; cin>>dlt; cout<<"Nhap dth:"; cin>>dth; } float tinhdtb() { return (dlt+dth)/2; } void xuat(float dtb) { cout<<endl<<"Ho ten: "<<hoten; cout<<endl<<"Dlt: "<<dlt; cout<<endl<<"Dth: "<<dth; cout<<endl<<"Dtb: "<<dtb; } }; void main() { sinhvien sv; sv.nhap(); float dtb=sv.tinhdtb(); 3

sv.xuat(dtb); } * Nh n xt : LTHT c 4 c tnh sau: - Tnh tr u t ng (Abstraction): i tng trong LTHT l s tru tng ca cc i tng trong t nhin. Tnh tru tng gip vic lp trnh tr nn t nhin hn, gn vi suy ngh ca con ngi hn. Tnh ng gi (Encapsulation): Vic t chc d liu v hm trong mt lp gi l tnh ng gi, tnh ng gi cho php che du d liu v phng thc trong lp, bo v d liu khng b truy xut bi nhng hm khng hp l. Tnh th a k (Inheritance): S dng lp c trc (lp cha) xy dng lp mi (lp con) gI l tnh tha k. Lp con c tha hng nhng thuc tnh, phng thc ca lp cha v c th c thm nhng thuc tnh, phng thc ring. Tnh tha k gip chng trnh d m rng. Tnh a hnh (Polymorphism): Mt phng thc c th thc hin theo nhiu cch khc nhau trn cc lp khc nhau gi l tnh a hnh. Tnh a hnh gip cho vic vit chng trnh tr nn n gin hn.

Ngoi ra, khi LTHT khng cn phi tm cch chia chng trnh thnh cc hm m ch cn xem xt chng trnh cn s dng nhng i tng no, mi i tng cn c nhng thuc tnh (d liu, bin) v phng thc (hm, th tc) no, t xy dng cc lp tng ng. V d : Vit chng trnh qun l sinh vin gm c cc chc nng sau: qun l h s sinh vin, qun l lp m sinh vin ang hc. Phn tch: Cn hai i tng sau - i tng sinh vin: Thuc tnh: m sv, h tn sv, nm sinh, m lp m sv ang hc Phng thc: Nhp sv, tm sv, xem, xo, sa sv, xem ds sv - i tng lp: Thuc tnh: m lp, tn lp, gvcn, s s, Phng thc: To lp mi, xem thng tin v lp, xem ds lop II. Nh ng khi ni m c b n 1. i t ng (object): i tng dng biu din mt thc th ca th gii thc. Mi i tng c xc nh bi thuc tnh (d liu, bin) v hnh vi (phng thc). Thuc tnh xc nh tnh cht ring ca i tng, hnh vi l hnh ng tc ng ln i tng. v d : i tng sinh vin * i tng sinh vin th 1 - Thuc tnh: h tn: Vng Ngc Yn lt= 1 4 * i tng sinh vin th 2 - Thuc tnh: h tn: on D lt= 2

th= 2 - Hnh vi: tnh tb ca sv: dtb=(dlt+dth)/2=1.5 V d: i tng hcn i tng hcn th 1 - Thuc tnh: chiu di=3 chiu rng=4 - Hnh vi: Tnh dt: dt=cd*cr=12

th= 1 - Hnh vi: tnh tb ca sv: dtb=(dlt+dth)/2=1.5

i tng hcn th 2 - Thuc tnh: chiu di=5 chiu rng=6 - Hnh vi: Tnh dt: dt=cd*cr=30

2. L p (class) L khi nim dng m t cc i tng c cng thuc tnh v hnh vi. Mi lp s khai bo cc thuc tnh, hnh vi ca cc i tng thuc lp. Cc i tng thuc cng mt lp s c cng tn cc thuc tnh nhng c cc gi tr thuc tnh khc nhau. Thuc tnh cn gi l d liu hay l bin, hnh vi cn gi l hm hay phng thc. v d : i tng hcn th 1 v i tng hcn th 2 c cng tn cc thuc tnh l chiu di v chiu rng. Nhng gi tr chiu di v chiu rng ca i tng hcn th 1 l 3 v 4, trong khi gi tr chiu di v chiu rng ca i tng hcn th 2 l 5 v 6. Lp hcn dng m t tt c cc i tng hcn, v lp hcn c th khai bo nh sau: #include <iostream.h> class hcn { //cc thuc tnh ca i tng hcn (cn gi l bin, d liu) private: float cd,cr; //cc phng thc ca i tng hcn (cn gi l hm, th tc) public: void nhap(); float tinhdt(); void xuat(float dt); }; void hcn::nhap() //phuong thuc nhap { cout<<"Nhap cd, cr:"; cin>>cd>>cr; } float hcn::tinhdt() { return (cd*cr); 5

} void hcn::xuat(float dt) { cout<<"\nCD:"<<cd<<"\nCR:"<<cr<<"\nDT:"<<dt; } //hm main th s dng lp hcn void main() { hcn h; //khai bo v tao dt hcn h.nhap(); float dt=h.tinhdt(); h.xuat(dt); } Ghi ch: - Tt c cc i tng hcn s dng chung cc phng thc nhap(), xuat(), tinhdt(). Nhng mi i tng hcn s c bin cd,cr ring c th cha cc gi tr khc nhau.

cd,cr

nhap();xuat() ; tinhdt(); h1

cd,cr

h2

M hnh lp hcn 3. So snh struct v class Trong struct ch c d liu, trong class c d liu v phng thc x l d liu v trong struct tt c d liu mc nh l public (do tt c cc hm u c th truy xut), trong lp mc nh l private (ch c hm trong lp c truy xut) V d : struct hcn { float cd,cr; }; void nhap(hcn h) //hm nhap { cout<<"Nhap cd, cr:"; cin>>h.cd>>h.cr; } float tinhdt(hcn h) { return (h.cd*h.cr); } void xuat(float dt) 6

{ cout<<"\nCD:"<<cd<<"\nCR:"<<cr<<"\nDT:"<<dt; } void main() { hcn h; float dt; nhap(h); dt=h.tinhdt(); xuat(dt); } 4. Php ton phn gi i ph m vi :: (scope resolution operator): Khi lp c nhiu phng thc ta ch nn khai bo tn phng thc trong lp, nh ngha phng thc ghi ngoi lp v dng php ton phn gii phm vi xc nh phng thc thuc lp no. v d: khai bo void hcn::nhap() //ngha l phng thc nhp thuc lp hcn 5. T kho public, private: c t trc cc thnh phn ca lp (d liu hoc phng thc), nu khng c th mc nh l private. + private: thnh phn ch s dng trong lp, bn ngoi lp khng th truy xut. + public: c th truy xut bn ngoi lp. v d : lp A c mt thnh phn private v mt thnh phn l public. i vi thnh phn private th ch c nhng thnh phn trong cng lp A mi c truy xut. i vi thnh phn public th c th c truy xut bi cc phng thc ca lp B hoc hm main, hoc bt k pt trong lp no khc. private

class B

public class A

main

v d : #include <iostream.h> class A { //mac dinh la private int x; void g() { /*g() trong cng lp A vi x nn g() truy xut c x*/ x++; } public: int f() { x=1; //truy xuat tp private g(); return x; } };

class B { void h() { A a; a.x++;//sai v x l private ca A } }; void main() { A a; a.g(); //sai v g l private ca A cout<<a.f(); //ng v f() l public ca A }

3. Con tr this (con tr i t ng): L con tr cha a ch ca i tng hin hnh (i tng ang truy xut phng thc). Thng thng cc phng thc trong lp khi truy xut cc thnh phn ca i tng hin ti th c th b this nu khng gy ra nhm ln. v d : class C void main() { { int x; C c1(1), c2(2); public: c1.xuat(); C(int k) //phng thc constructor c2.xuat(); { } this->x=k; // hoc ghi gn l: x=k; } Nhn xt: void xuat() c1.xuat(); th this l a ch ca i tng { c1, do kt qu xut l 1. cout<<this->x; // cout<<x; c2.xuat(); th this l a ch ca i tng } c2, do kt qu xut l 2. }; v d class C { int x; public: C(int k) {x=k;} void xuat() 8

void main() { C c1(1); c1.xuat(); //xuat ra 6 5 {

int x=5;// x cc b ca pt xuat this->x+=x;// th ny this khng b c cout<<this->x<<x;

} }; 4. Hm, ph ng th c c tham s m c nh C th gi hm, pt m khng cn gi tham s. Khi khai bo hm phi cung cp nhng gi tr mc nh cho nhng tham s c th khng c gi ny. Nhng tham s bt buc phi c th phi khai bo u danh sch tham s. Khi mt tham s no c gn tr mc nh th tt c cc tham s theo sau tham s ny cng phi gn ga tr mc nh. Nhng gi tr mc nh c th ghi trong phn khai bo phng thc hoc ghi phn nh ngha nhng khng c ghi c hai (nn ghi phn khai bo phng thc) . v d #include <iostream.h> class calculate { public: int sum(int m=1, int n=10); }; int calculate::sum(int m, int n) { int s=0; for (int i=m;i<=n;i++) s+=i; return s; } void main() { calculate c; cout<<c.sum(9); //m=9, khng c n nn sum dng gi tr n mc nh l n=10 } 5. nh ngha ch ng ph ng th c (method overloading) Trong cng lp c th nh ngha nhiu phng thc cng tn nhng khc s lng tham s hoc khc kiu ca cc tham s, v gi l nh ngha chng phng thc. nh ngha chng phng thc khng phn bit kiu tr v, do khng th nh ngha hai phng thc cng tn v ch khc nhau kiu tr v. Ta s nh ngha cc phng thc cng tn khi cch thc hin ca cc phng thc l ging nhau, ch khc nhau s tham s hoc kiu ca cc tham s. Vic nh ngha cc phng thc cng tn gip vic lp trnh n gin hn, d hiu hn. V d : tnh bnh phng ca mt s, i vi C phi nh ngha hai phng thc c tn khc nhau sau: 9

int SqrInt(int x) //tnh bnh phng s nguyn int { return x*x; } float SqrFloat(float x) //tnh bnh phng s thc float { return x*x; } C++ cho php ta nh ngha hai phng thc c cng tn nh sau: int Sqr(int x) //tnh bnh phng s nguyn int { return x*x; } float Sqr(float x) //tnh bnh phng s thc float { return x*x; } void main() { int a=2; float b=3; cout<<\na*a=<<Sqr(a); //C++ s gi hm int Sqr(int x) cout<< \nb*b= <<Sqr(b);//C++ s gi hm float Sqr(float x) } V d : int f(int x) { //cc lnh } float f(int y) { //cc lnh } s bo li v C++ khng cho php nh ngha hai phng thc ch khc nhau kiu tr v 6. T kho const Dng khai bo d liu hng. Hng phi c gn tr ban u v khng th thay i gi tr. Mc ch ca vic s dng hng l trnh vic v thay i gi tr hng. v d : const int n=10; //hng n phi c gn tr ban u void main() { n++; //sai v hng khng c thay i gi tr } 10

v d : int m=1, n=2; const int * p=&n;//p l con tr tr ti mt hng nguyn, p khng phi l hng *p=3; //sai v p tr ti hng nguyn p=&m; //ng v p khng phi l hng int * const q=&n; //q l con tr hng *q=3; //ng, n=3 q=&m; //sai, v q la hng 7. C p pht b nh ng M hnh b nh CODE DATA

STACK

HEAP Cp pht ng - Cp pht trong vng Heap ca ct HEAP=KTCT-CODE-DATA-STACK - Cp pht lc thc thi - C th t cp pht thm hoc thu hi.

Cp pht tnh - Cp pht trong vng Data ca ct DATA<64K - Cp pht lc bin dch - Khng th t cp pht thm hoc thu hi.

V d : - Cp pht b nh ng cho bin kiu float Trong C thng Cp pht float *a= (float *) malloc(sizeof(float)); //a kiu con tr float, cha c ca nh kiu float Thu hi free(a); S dng *a=5; //ct 5 vo bin a 100 Gi s 5 nh float c cp nh 4 bytes cha s 100 pht a thc kiu float a (2 bytes) ch bt u l 100 - Cp pht mng mt chiu ng 4 phn t kiu int. Trong C thng Cp pht int *a= (int *) malloc(4*sizeof(int)); Thu hi free(a); S dng a[0]=5; //ct 5 vo nh u tin

Trong C++ float *a=new float; delete a;

Trong C++ int *a=new int [4]; delete []a;

11

Gi s nh c pht ch bt l 100

dy int cp a u

100 5 100 a (2 bytes) dy 4 nh, mi nh 2 bytes cha s nguyn kiu int.

8. Tham chi u (reference) Nhng tham s hnh thc trong hm c th c khai bo l s nhn tham s thc theo gi tr hoc theo tham chiu. - Nhn tham s thc theo gi tr: hm gi s gi gi tr ca tham s thc cho tham s hnh thc tng ng ca hm c gi (tham s hnh thc s cha gi tr ca tham s thc) - Nhn tham s thc theo tham chiu: hm gi s gi a ch ca tham s thc cho tham s hnh thc tng ng ca hm c gi (tham s hnh thc s cha a ch ca tham s thc v C++ xem tham s thc v tham s hnh thc nh l mt) A, b gi l tham s hnh thc. Hm F c khai bo l s nhn tham s a theo gi tr, tham s b theo tham chiu. void F(int a, int &b) { a++; b++; cout<<a<<,<<b; } Kt qu in ra l: 6, 9 a cha gi tr ca c, a v c l khc 5 nhau nn khi tng a, khng lm thay a i c b 100 c, d gi l tham s thc. void main() { int c=5; d=8; F(c,d); cout<<c<<,<<d; } Kt qu in ra l: 5, 9 5 c d c khng i, d thay i Cc tham s thc c,d ca hm main() s c truyn cho hm F(a,b) 100 (/c ca d) 8 9

b cha /c ca d (C++ xem b v d l mt), nn khi tng b chnh l tng d. Cc tham s hnh thc ca hm F(a,b)

Nh n xt: Khi tham s thc c gi theo gi tr, th nhng thay i i vi tham s hnh thc tng ng s khng nh hng ti tham s thc. Khi tham s thc c gi theo dia chi th nu tham s hnh thc thay i th tham s thc tng ng s thay i theo (v khi hai tham s xem nh l mt) .Tham chiu cung cp mt b danh hay mt tn thay th cho 1 i tng. Gi F(a,8) s bo li v F ang ch nhn tham s th 2 nh l mt a ch ca mt bin ch khng phi l mt hng s. 12

vi d : vit ct hon chuyn gi tr hai bin nguyn Dng con tr (C thng) Dng tham chiu (C++) void hoanvi(int* a, int* b)//a,b giu dc cua x,y void hoanvi(int& a, int& b) //a,b la ten khac cua x,y { { int c=*a; *a=*b; *b=c; int c=a; a=b; b=c; } } void main() void main() { { int x=1,y=2; int x=1,y=2; hoanvi(&x,&y); hoanvi(x,y); printf("%d,%d",x,y);//xuat 2,1 cout<<x<<','<<y; //xuat 2,1 } } v d : #include <iostream.h> int &f(int &n) { n++; return n; } int &g(int &n) { n+=2; return n; //(*) } void main() { int n=1; g(f(n))++; //(**) cout<<n; //xuat 5 } - Nu sa g: int g(int& n){} lnh (**) s bo li khng phi l bin - Nu sa g: int& g(int n){} lnh (*) s bo li tr v tham chiu bin cc b n V d : #include <iostream.h> int & f(int& a, int b) { b+=a++; return (a); } void main() { int i=2, j=4; int k=f(i,j); k++; cout<<i<<" "<<j<<" "<<k<<endl; //xuat 3 4 4 int &l=f(i,j); l++; //l chinh l i cout<<i<<" "<<j<<" "<<l<<endl; //xuat 5 4 5 }

13

You might also like