Professional Documents
Culture Documents
i tng v lp
I TNG (object)
thc.
liu: M t i tng.
thc: Cc hm x l ca i tng.
Phng Trong
ring.
I TNG (object)
V d 3.1. Mt m t v 1 i tng im nh sau:
Mt i tng c xc nh bi cp to (x,y).
y+dy y x x+dx
I TNG (object)
Hm t to ca im to (ox, oy);
i tng im c th c m t nh sau:
D liu:
Cp to (x,y).
Phng thc:
Hm hin th to ca im
I TNG (object)
Khai
float Phng Hm
x = dx;
y = dy; }
I TNG (object)
Hm
Hm
LP (Class)
gi l lp.
LP (Class)
Khai bo lp:
private:
<Khai bo v nh ngha cc thnh phn ring>
public:
<Khai bo v nh ngha cc thnh phn cng cng>
}; // Kt thc khai bo lp
LP (Class)
Trong :
Tn lp: c t theo quy tc t tn bin. Thnh phn: c hiu l d liu v cc hm. Khai bo:
Khi t ngoi lp, cch nh ngha nh sau: <Kiu d liu> <tn lp>::<tn hm>(tham s) { }
Mi thnh phn lit k trong phn public ca lp truy nhp c Mi thnh phn lit k trong phn private ca lp ch truy nhp
c trong lp.
10
Cc hm thnh phn
Hm c khai bo trong khai bo ca lp gi l hm
phn.
12
class A{ private:
class B{ private:
...
public: .... }; };
...
public: ....
13
Khai bo lp
To i tng:
Vd : Diem p,q;
p
-x
q
-x -y
-y
- init - move - display
- init
- move - display
Khai bo lp
i tng l 1 kiu d liu do c th khai bo con tr
v tham chiu.
Khai bo con tr Diem q; q.init(2,3); Diem *p; p=&q; p->move(3,4) (q.x =5, q.y =7)
Khai bo tham chiu Diem q; q.init(2,3); Diem &r =q; r.move(3,4) (q.x =5, q.y =7)
16
Khai bo lp
Chng trnh chnh void main() { Diem p; // Khai bo i tng p.x=12 // lnh li v k th truy cp x la private p.init(2,3);// Gi hm thnh phn ca i tng. p.display(); p.move(3,4); p.display(); getch(); }
Kiu d liu chun:(int, float, char, char *...) Kiu cu trc. Kiu lp.
Cc thuc tnh x,y m t to ca im Hm t to ca im ti (ox, oy). Hm tnh tin to ca im (x,y) n im (x+dx,y+dy). Hm hin th to ca im. Thuc tnh r l 1 s thc m t bn knh ng trn. Thuc tnh O l 1 im (Diem) m t tm ng trn. Hm to ng trn c bn knh l k v tm ti im A. Hm hin th to tm v bn knh ca ng trn.
public:
float x, y; void init(float ox, float oy) { x=ox; y=oy; } void move(float dx, float dy) { x=x+dx; y=y+dy; } void display() { cout<<\n x= <<x<< y=<<y; }
};
public:
float r; Diem O;
};
void init(float k, Diem A) { r=k; O.init(A.x,A.y); } void display() { cout<<\n r =<< r; O.display(); }
Hm thit lp (constructor)
Khi 1 i tng c to ra, n lun gi n 1 hm thit
lp ca n.
Khi to cc thnh phn d liu. Xin cp pht b nh cho cc thnh phn d liu ng.
22
Hm thit lp
Hm khng c gi tr tr v v khng cn t kho void. Mt lp c th nh ngha nhiu hm thit lp. Khi nh ngha nhiu hm thit lp c th khai bo i tng theo nhiu dng khc nhau. Hm thit lp c th khai bo vi cc tham s c gi tr ngm nh.
Khi khng c hm thit lp c nh ngha, lp s dng hm thit lp ngm nh (hm khng c tham s v khng lm g c).
23
Hm thit lp
V d . Xy dng lp Diem s dng hm thit lp.
Hm
x=0; y=0;
} Hm thit lp 2 tham s Diem(float ox, float oy) {
x=ox; y=oy;
}
24
float x, y;
public:
};
Diem() { x=0; y=0; } Diem(float ox, float oy) { x=ox; y=oy; } void move(float dx, float dy); void display();
Hm thit lp
void display() {
cout<<\n x =<< x << y = <<y; }
Diem
A;
Hm thit lp
V d : Cho khai bo lp: class abc{
...
public: abc(int x);
abc(char *s=null):
abc(float x, float y, float z=0); abc(int x, char *s = null);
};
Hy tm ra cc khai bo i tng c th c.
27
Hm thit lp
V d 3.5. Cho 2 khai bo lp:
Hm hu b (Destructor)
Hm hu b c gi khi i tng b hu khi b nh. Chc nng:
Cc quy nh xy dng hm hu b:
Hm hu b c quyn public
Hm hu b khng cn tham s
Hm hu b
Mi lp ch cn hm hu b Khi khng nh ngha hm hu b, lp s dng hm hu b ngm nh. Hm hu b khng c gi tr tr v. i vi cc lp khng c thnh phn d liu ng, ch cn s dng hm hu b nhm nh.
To ra i tng mi
Sao chp cc thnh phn d liu t i tng c sang i tng mi.
dng hm thit lp sao chp ngm nh, ngc li phi nh ngha hm thit lp sao chp.
Php gn i tng
Php gn i tng s sao chp d liu t i tng c sang
i tng c gn.
Diem a(2,3);
33
khai bo mt hm nh vy chng ta cung s dng t kha const: V d: class Point{ int x,y; public: Point(int, int); bool move(int, int); void print() const; }; Khi chng ta c th khai bo cc i tng hng ca lp Point v gi ti hm print ca n.
Php gn i tng
Bi tp: Xy dng lp vc t
36
n x
n x
display() display()
37
V d vi khai bo lp:
n
x x display() display()
38
i vi d liu, thnh phn tnh phi c khi to ngoi lp, ngoi cc hm. i vi hm thnh phn, c th gi thng qua cc i tng hoc gi theo cch:
hoc public.
39
Hm bn & lp bn
Mt lp cho php 1 hm hoc 1 lp khc truy nhp n
Hm bn ca nhiu lp.
Lp bn ca 1 lp.
41
Hm bn & lp bn
Khai bo hm t do l bn ca lp A:
class A{ private: .... public: .... friend void f(); // Khai bo hm void f() bn. }; // Hm t do f() void f() { ... }
Hm bn & lp bn
Hm thnh phn ca lp l bn ca lp khc:
Gi s c hai lp A v B, trong lp B c 1 hm f.
class A; //Khai bo A l 1 lp class B{ ... void f(); }; class A{ ... friend void B::f(); //Khai bo hm f ca B l bn ca A };
Hm bn & lp bn
Hm bn ca nhiu lp:
Khai bo 1 hm t do f() l bn ca 2 lp A, B:
class A; class B{ ... friend void f(); // Khai bo hm f l bn ca lp B }; class B{ ... friend void f(); // Khai bo hm f l bn ca lp A };
Hm bn & lp bn
Lp bn:
Gi s c 2 lp A v B. Khai bo lp B l bn ca lp A nh sau:
45
Hm bn & lp bn
Bi tp 3.4. Hm t do l bn ca lp
Hai im xc nh on thng.
46
Hm bn & lp bn
Vit hm t do tnh khong cch gia 2 im. Vit chng trnh nhp vo 2 cp to (x1,y1) v (x2,y2) ca 2 im A, B. To on thng xc nh bi 2 im . Hin th to v khong cch ca 2 im xc nh on thng. M rng bi ton trn cho trng hp tam gic.
47
Hm bn & lp bn
Hy ch ra li sai ca chng trnh :
class integer { private: int value; public: integer(int i=0){ value = i;} integer operator + (integer i){ return value + i.value; } void display(){ cout<<value<<\n; } }; //Ht lp void main(){ integer i1 = 10; integer i2 = i1+ 5; integer i3 = 5+i1; integer i4 = i1+i2; }
Hm bn & lp bn
Chuyn ton t cng thnh hm t do l bn ca lp.
Bi tp v hm bn v lp bn
friend integer operator + (integer i1, integer i2); void display() { cout<<value<<\n; } }; //Ht lp integer operator + (integer i1, integer i2){ return i1.value + i2.value; } void main() { integer i1 = 10; integer i2 = i1+ 5; integer i3 = 5+i1; integer i4 = i1+i2; }
Hm bn v lp bn
Nhn xt:
Nu 1 ton t c n ton hng, khi nh ngha n l hm thnh phn ca lp th hm c n-1 tham s, khi nh ngha n l hm t do th hm c n tham s.
51
Chng 4: K tha
Mc ch
Gii thiu c bn v n k tha, a k tha. Tnh a Hnh.
Bi tp.
Kim tra.
Ni dung
Khi nim k tha K tha n gin
K tha nhiu lp
Lp c s o Tng ng bi
Khi nim
Tnh k tha cho php nh ngha mt lp mi da trn cc lp
c.
Mt lp k tha t 1 lp khc c gi l lp dn xut Mt lp c lp khc k tha gi l lp c s (A class). Lp dn xut s k tha cc thnh phn d liu v hm thnh
Khi nim
S k tha cung cho php nhiu lp c th dn xut t
class A ( Lp c s ca B v C. )
K tha K tha
class B
( Lp dn xut ca A. )
class C ( Lp dn xut ca A.
Lp c s ca D.) K tha
class D ( Lp dn xut ca C. )
nh ngha 1 lp k tha :
Lp B k tha t lp A
Class B :public A
{ // nh ngha nhng thnh phn mi ca lp B.
tha t lp A
Hm khng tham s :
B() : A() {
Tn hm trong B( DS tham s ca B) { A::Tn hm trong A(truyn cc tham s) nh ngha thm cc thnh phn mi }
Truy cp cc hm ca A t lp B
K tha n gin
V d 4.1. n k tha
K tha n gin
Hm hin th to ca im.
class Diem { private: int x, y; public: Diem () { x=0; y=0; } Diem (int x1, int y1) { x=x1; y=y1; } void Move (int x1, int y1) { x=+x1; y=+y1; } void display() { cout <<"\n toa do x" <<x; cout <<"\n to do y"<<y; } };
Nhn xt
class Diem3D:public Diem { private: int z; public: Diem3D():Diem() { z=0; } Diem3D(int x1,int y1,int z1):Diem(x1,y1) { z=z1; } void Move(int x1,int y1,int z1) { Diem::Move(x1,y1); z=z+z1; } void display() { Diem::display(); cout <<"\n toa do z="<<z; } };
int main() { Diem3D b,c(1,2,3); cout<<"\n In diem b"; b.display(); b.Move(1,2,3); b.display(); cout<<"\n In diem c"; c.display(); getch(); } Ch : Khi hm khi to ca 1 lp dn xut c gi, hm khi to ca lp c s s c gi trc.
K tha n gin
Truy nhp cc thnh phn lp c s:
Mt Mt
lp dn xut khng th truy nhp cc thnh phn private ca lp c s. lp dn xut truy nhp c cc thnh phn public ca lp c s.
Vic
truy nhp cc thnh phn ca lp c s t bn ngoi phm vi lp dn xut c quy nh bi t kho xc nh quyn truy nhp t truc tn lp c s trong nh ngha k tha lp dn xut.
class Lp_Dn_Xut() : T_kha Lp_C_S () { };
K tha n gin
Nu
mt lp dn xut k tha lp c s l public th mi thnh phn public ca lp c s s tr thnh thnh phn public ca lp dn xut. mt lp dn xut k tha lp c s l private th mi thnh phn public ca lp c s s tr thnh thnh phn private ca lp dn xut.
Nu
Nu
K tha n gin
class A{ private:
....
public:
......
};
class B: public A { private: .... public: ...... }; class C: private A { private: .... public: ......
};
K tha n gin
class A{
public:
private:
int x;
};
K tha n gin
class C: public A{
public:
};
class D : private A{
public:
};
K tha n gin
Khai bo chng trnh chnh: C p; D q; p.set(1); p.display(); q.set(2); q.display(); Tm ra cc lnh sai ca cc on chng trnh
trn ?.
K tha n gin
cn 1 lp dn xut truy nhp cc thnh phn private ca lp c s nhng khng mun cc thnh phn ca lp c s l public th s dng t kho protected. phn protected ca lp c s truy nhp c trong lp dn xut nhng khng th truy nhp c cc hm khc, lp khc.
Thnh
K tha n gin
class A{ private:
....
protected:
.... public:
......
Truy nhp c
};
class B: private A{ ...... };
K tha n gin
Hm thit lp trong lp dn xut
Lp dn xut khng k tha hm thit lp lp c s. Hm thit lp lp dn xut phi cha thng tin lm tham s cho hm thit lp lp c s. Trong nh ngha hm thit lp lp dn xut phi gi lun 1 hm thit lp lp c s.
K tha nhiu lp
Mt lp c nhiu lp c s gi l k tha nhiu lp. class A1{ ... }; class A2{ ... };
K tha
class C : public A1, private A2{
K tha
...
}; // K tha nhiu lp
K tha nhiu lp
Khi k tha nhiu lp, c th c cc thnh phn ca lp c s
ging nhau, ch nh truy nhp n thnh phn ca lp no, phi s dng: <Tn lp>::<Tn thnh phn>;
V d:
K tha nhiu lp
Nu mt lp c nhiu lp c s, cc tham s ca hm thit
tham s hoc nh ngha 1 hm thit lp m mi tham s c gi tr ngm nh th hm thit lp lp dn xut khng nht thit gi n hm thit lp ca lp c s.
K tha nhiu lp
class A1{ private: public:
} ... class A2{ private: float x; public: A2(float s=0){ x=s; } ... };
float x,y;
x=ox; y=oy;
};
Lp c s o - virtual class
Khng th khai bo hai ln cng 1 lp trong danh sch ca
Lp c s o
class A { public:
class C : public A{ public: float v3; }; class D : public B, public C{ public: float v4; }; void main(){ D x; x.v1=2; // Xy ra li };
float v1;
Lp c s o
Gii php cho vn ny l khai bo A l 1 lp c s kiu
Lp c s o
Cho s k tha sau, tm cc lp c s o:
Tnh a Hnh
Tnh a Hnh (polymorphism) l kh nng x l cc lp
Xt v d sau:
class Diem
K tha
class coloredDiem
Tnh a Hnh
class Diem{ private: public:
float x, y; Diem(float ox =0, float oy=0){ } virtual void display(){ }
x=ox; y=oy;
};
Tnh a Hnh
class coloredDiem : public Diem{ private: public:
int color; coloredDiem(float ox=0, float oy=0, int c=0):Diem(ox,oy){
color = c;
};
Tnh a Hnh
void main(){ coloredDiem m(1,2,3); m.display(); Diem p(4,5); p.display(); Diem *ptr; ptr = &p; ptr->display(); ptr = &m; ptr->display(); getch(); } // Khai bo i tng coloredDiem. // Gi hm display ca coloredDiem. // Khai bo i tng Diem. // Gi hm display ca lp Diem. // Khai bo con tro v tr Diem. // Cho ptr tr n p. // Gi hm display ca lp Diem. // Cho ptr tr n m. // Gi hm display ca coloredDiem.
Tnh a Hnh
Trong nh ngha lp Diem, hm display() c t kho
virtual ch rng n l hm o.
T kho virtual c th t trc hoc sau tn kiu d liu. Hm display() c nh ngha li trong lp dn xut. T
Tnh a Hnh
Tnh a Hnh xy ra:
Tu thuc vo kiu i tng c a ch cha trong con tr ptr m li gi hm ptr->display() s gi n hm display() ca lp Diem hay lp coloredDiem. Tnh a hnh cn th hin khi mt hm thnh phn trong lp c s c gi t 1 i tng ca lp dn xut, cn bn thn hm th gi ti hm thnh phn c nh ngha ng thi trong lp c s v lp dn xut.
Tnh a Hnh
x=ox; y=oy;
};
color = c;
};
Tnh a Hnh
void main(){ coloredDiem m(1,2,3); m.display(); Diem p(4,5); p.display(); Diem *ptr; ptr = &p; ptr->display(); ptr = &m; ptr->display(); getch(); }
Tu thuc vo i tng c a ch con tr ptr m hm display() s gi n displaycolor() ca lp Diem hay displaycolor() ca lp coloredDiem. l tnh a hnh !!!
Tnh a Hnh
Nhng c trng ca hm virtual
Tt c cc hm virtual lp c s v lp dn xut phi c nh ngha c cng tn, cng danh sch tham s, cng kiu tr v. Nu cc kiu ca hm khc nhau, t kho virtual s b b qua v chng trnh dch s hiu rng lp dn xut gt hm ny. Khng bt buc phi ghi r t kho virtual khi nh ngha hm virtual trong lp dn xut.
Tnh a Hnh
V cc hm virtual da trn lp nguyn thu ca i tng m qua chng c gi, nn chng phi c 1 i tng n v do chng phi l nhng hm tht s ca lp. iu ny ngha l cc hm friend khng th l hm virtual c. Tuy nhin 1 hm virtual ca lp c th c khai bo l friend trong mt lp khc. Nu lp dn xut khng nh ngha hm tng ng bi th hm nh ngha cho lp c s s c s dng.
Cc lp c s tru tng
Mt lp c s tru tng (Abstract A Class) l mt lp ch
c dng lm c s cho lp khc. Khng h c i tng no ca 1 lp tru tng c to ra v n ch c dng nh ngha 1 khi nim tng qut cho cc lp khc. thun ty.
Cc lp c s tru tng
Mt hm virtual thun ty l 1 hm m trong nh ngha
lp n c nh ngha khng c g c.
V d: class Abstract{
Cc lp c s tru tng
Hm Print() v Process() c khai bo l cc hm virtual
thun ty bng cch gn bng 0 thay cho vic nh ngha hm ny. nh ngha u .
Cc lp c s tru tng
Bt k lp no dn xut t 1 lp c s tru tng phi
khai bo li tt c cc hm virtual thun ty m n tha hng. thun ty m n tha hng, hoc bng cc hm virtual hoc bng nh ngha hm thc s.