You are on page 1of 98

BI GING LP TRNH HNG I TNG

i tng v lp

I TNG (object)

i tng l s ng gi ca d liu v phng

thc.

i tng = D liu + Phng thc


(object = data + method)
D

liu: M t i tng.
thc: Cc hm x l ca i tng.

Phng Trong

C++, phng thc l cc hm.

Mi i tng c d liu ring v phng thc

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)

Cc thao tc tc ng ln i tng im gm:

Hm t to ca im to (ox, oy);

Hm tnh tin im c to (x,y) n im c to (x+dx, y+dy).


Hm hin th to im.

i tng im c th c m t nh sau:

D liu:

Cp to (x,y).

Phng thc:

Hm t to im. Hm tnh tin.

Hm hin th to ca im

I TNG (object)
Khai

bo v d liu: x,y; thc x l d liu: t to ca im ti (ox,oy)

float Phng Hm

void init(float ox, float oy)


{

x = dx;
y = dy; }

I TNG (object)
Hm

Hm

void move(float dx, float dy) { x =x+ dx; y =y+ dy; }


void display(float ox, float oy) { cout<<\n x = <<x; cout<<\n y= <<y; }
hin th to im:

tnh tin to im:

LP (Class)

Mt m t chung cho cc i tng cng loi

gi l lp.

Lp l m t tng qut ca i tng, i

tng l 1 th hin c th (instance) ca lp. trc nhng c thm cc hm thnh phn.

Trong C++, lp c nh ngha nh 1 cu

LP (Class)
Khai bo lp:

class <tn 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:

i vi bin: Khai bo nh khai bo bin.

i vi hm: Khai bo nguyn mu ca hm.

nh ngha:Vit ni dung hm. Th t khai bo d liu v cc hm l khng quan trng.

Hm nh ngha trong khai bo lp l hm inline.

Khi t ngoi lp, cch nh ngha nh sau: <Kiu d liu> <tn lp>::<tn hm>(tham s) { }

<Ni dung hm>

Xc nh quyn truy nhp


Quyn truy nhp l kh nng truy nhp ca mt hm, mt lp

no n cc thnh phn ca lp.


bt k cc hm, cc lp khc.

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

thnh phn ca lp.

Cc hm thnh phn c php truy nhp n cc thnh

phn d liu v hm thnh phn khc trong lp. khai bo lp.

nh ngha hm thnh phn c th t trong hay ngoi

Khi t trong lp, n l hm inline.


Phm vi lp l khi nim kim sot truy nhp n cc

thnh phn d liu v cc hm thnh phn ca lp.

Tt c cc thnh phn ca lp l thuc phm vi lp, tc l

n c th truy nhp n cc thnh phn khc ca cng lp.

Kh nng ca hm thnh phn


Cho php nh ngha chng hm thnh phn. Cho php s dng tham s ngm nh.

Cho php s dng i tng lm tham s hm thnh

phn.

Cho php i tng lm gi tr tr v. Con tr this: L a ch ca i tng ang xt.

12

Xc nh quyn truy nhp


Trong lp c th c nhiu nhn private v public.

class A{ private:

class B{ private:

...
public: .... }; };

...
public: ....

13

Khai bo lp V d 3.2. Lp cc im trn mt phng


class Diem { private: float x, y; public: // Khai bo v nh ngha hm thnh phn void init(float ox, float oy){ x=ox; y=oy; } void display(); // Khai bo nguyn mu h }; // Kt thc khai bo lp //nh ngha cc hm cha nh ngha trong lp. void Diem::display() { cout<<\n x= <<x<< y =<<y; }

Khai bo lp
To i tng:

<Tn lp> <Tn i tng>; Mi i tng c 1 tp cc thnh phn ring.

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(); }

Cc thnh phn d liu


Khai bo: <Kiu d liu> <tn thnh phn>; Kiu d liu:

Kiu d liu chun:(int, float, char, char *...) Kiu cu trc. Kiu lp.

Cc thnh phn d liu


V d: Kiu d liu l lp

Xy dng 1 lp Diem gm:


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.

Xy dng 1 lp ng trn gm:


Cc thnh phn d liu class Diem{


private:

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

};

Cc thnh phn d liu class circle {


private:

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.

Chc nng hm thit lp:


Khi to cc thnh phn d liu. Xin cp pht b nh cho cc thnh phn d liu ng.

Cc quy nh xy dng hm thit lp:


Hm thit lp c tn trng vi tn lp. Hm thit lp phi c quyn public.

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

thit lp khng tham s Diem() {

x=0; y=0;
} Hm thit lp 2 tham s Diem(float ox, float oy) {

x=ox; y=oy;
}

24

Hm thit lp class Diem{


private:

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

nh ngha cc hm cha c nh ngha

void Diem::move(float dx, float dy) {


x=x+dx; y=y+dy; }

void display() {
cout<<\n x =<< x << y = <<y; }

Da trn cc hm thit lp, xc nh cc khai bo ca i tng:


Diem

A;

// Hm thit lp no c gi ?, x=?, y=?

Diem B(1,2); // Hm thit lp no c gi ?, x =?, y =?

Diem C(2,3); // Hm thit lp no c gi ?

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:

class A{ ... public: A() ; A(int x); };

class B{ ... public: //Khng c hm thit lp. };

Lp A s dng hm thit lp no ?, lp B s dng hm thit lp no?

Hm hu b (Destructor)
Hm hu b c gi khi i tng b hu khi b nh. Chc nng:

Gii phng b nh cho do i tng chim d.

Cc quy nh xy dng hm hu b:

Tn hm: ~<tn lp>

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.

Hm thit lp sao chp


L hm thit lp to ra mt i tng mi t i tng c. Chc nng:

To ra i tng mi
Sao chp cc thnh phn d liu t i tng c sang i tng mi.

Khai bo hm thit lp sao chp:

Hm ch c 1 tham s l 1 tham chiu n 1 i tng cng lp.

Hm thit lp sao chp


Nu trong lp khng nh ngha hm thit lp sao chp th

lp s dng hm thit lp sao chp ngm nh.

Nu lp khng c thnh phn d liu ng th ch cn s

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.

Nu trong lp c thnh phn d liu ng th phi nh ngha V d:

ton t gn, ngc li ch cn s dng ton t gn ngm nh

Diem a(2,3);

Diem b=a; // S dng ton t gn ngm nh

33

i tng hng v cc hm thnh vin hng


c th s dng t kha const ch ra rng mt i tng l khng th thay i (not modifiable) hay l i tng hng. Tt c cc c gng nhm thay i ni dung ca cc i tng hng u gy ra cc li. V d: const ComplexT cz(0,1);
C++ hon ton ngn cm vic gi ti cc hm thnh vin ca cc i tng hng tr khi cc hm thnh vin l cc hm hng, c ngha l cc hm khng thay i cc thnh phn bn trong ca i tng.

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

nh ngha cc hm thit lp 1 tham s.

nh ngha hm thit lp sao chp.


nh ngha hm hu b. nh ngha php gn i tng.

Vit hm nhp 1 vector.


Vit hm in 1 vc t. Vit chng trnh chnh. S dng debug kim tra cch gi php gn, hm thit lp sao, hm hu b.

36

Cc thnh phn tnh


Trong 1 chng trnh, cc i tng thuc cng 1 lp s V d khai bo lp:

hu cc thnh phn d liu ring v cc hm ring ca n.

class abc{ private: int n; float x; public: void display(); };

Khai bo: abc A, B; A

n x

n x

display() display()
37

Thnh phn tnh


chia s cc thnh phn chung ca cc i tng, t

kho static truc thnh phn khai bo.

V d vi khai bo lp:

Khai bo: abc A, B;

class abc{ private: static int n; float x; public: void display(); };

n
x x display() display()
38

Thnh phn tnh


Khi to cc thnh phn tnh

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:

<Tn lp>::<tn hm>(cc tham s);

Ch rng thnh phn d liu tnh c th khai bo private

hoc public.

39

Thnh phn tnh


class Diem { private: int x; int y; static int z; public: Diem() { cout<<"\nHam khoi tao mac dinh"; x=0;y=0; } friend void Intoado(Diem Z, Diem3D K); // Khai bao nguyen mau };
int DIEM :: z=15;

Hm bn & lp bn
Mt lp cho php 1 hm hoc 1 lp khc truy nhp n

thnh phn private ca n bng cch khai bo hm hoc lp l friend ca lp.

Cc trng hp hm bn, lp bn:


Hm t do l bn ca lp. Hm thnh phn ca lp l bn ca lp khc.

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:

class B; class A{ ... friend clas B; // Khai bo lp B l bn ca lp A }; class B{ ... };

45

Hm bn & lp bn
Bi tp 3.4. Hm t do l bn ca lp

Xy dng 1 lp Diem gm:

Thuc tnh x, y m t to ca im.


Hm thit lp vi 2 tham s c gi tr ngm nh bng 0. Hm hin th to ca im.

Khai bo hm t do tnh khong cch gia 2 Diem l bn vi lp.

Xy dng 1 lp line gm:

Hai im xc nh on thng.

Hm thit lp vi 2 tham s l 2 im.


Hm hin th to , khong cch 2 im.

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.

class integer { private: int value; public: integer(int i=0) { value = i; }

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

Truy nhp cc thnh phn lp c s


nh ngha li hm thnh phn Tnh k tha trong lp dn xut

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

phn ca lp c s ng thi b sung thm cc thnh phn mi.

Khi nim
S k tha cung cho php nhiu lp c th dn xut t

cng 1 lp c s, mt lp dn xut cung c th l lp c s cho lp khc.

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.

// nh ngha thm nhng hm B k tha t A.


}

nh ngha cc hm khi to, hy, sao chp ca lp B k

tha t lp A

Hm khng tham s :

B() : A() {

nh ngha thm cc thnh phn mi


}
Hm c tham s :

B(DS tham s ca B) : A(Ds tham s ca A)


{ nh ngha thm cc thnh phn mi

nh ngha cc hm khc ca lp B k tha t lp A Hm khng tham s :

Tn hm trong B() { A::Tn hm trong A() nh ngha thm cc thnh phn mi }


Hm c tham s :

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

Void main() { B b; b.A::Tenham(Ds tham so); }

K tha n gin
V d 4.1. n k tha

Xy dng 1 lp Diem m t cc im trn mt phng 2D gm

Hai thuc tnh (x,y) m t to ca im.


Hm thit lp khng tham s t x=0, y=0. Hm thit lp 2 tham s (x1, y1).

Hm tnh tin to ca im theo dx, dy.


Hm hin th to ca im.

K tha n gin

Xy dng 1 lp Diem 3D m t cc im trn mt phng 3D gm

Ba thuc tnh (x,y,z) m t to ca im.

Hm thit lp khng tham s t x=0, y=0,z=0


Hm thit lp 2 tham s (x1, y1,z1). Hm tnh tin to ca im theo x1, y1,z1.

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

Lp Diem3D c cc thnh phn 2D ging nh lp im.

Lp Diem3D pht trin thm thuc tnh z.


Cc hm thit lp lp Diem3D thm thuc tnh z1 Hm tnh tin to ca Diem3D thm thnh phn z1.

Hm hin th to ca Diem3D thm thnh phn z1.

Ta s k tha, s dng li t lp Diem

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

khng c t kho ch nh k tha t lp c s th lp dn xut ngm nh l k tha private.

K tha n gin
class A{ private:
....

public:
......

};
class B: public A { private: .... public: ...... }; class C: private A { private: .... public: ......

};

K tha n gin

V d Truy nhp thnh phn lp c s.

class A{
public:

private:

int x;

};

void set(int i) { x = i; } void display() { cout<<\n x =<<x; }

K tha n gin

class C: public A{
public:

};

void display() { cout<<\n x =<<x; }

class D : private A{
public:

};

void display() { A::display(); }

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

T kho xc nh quyn truy nhp protected


Khi

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{ ...... };

Khng truy nhp c

K tha n gin
Hm thit lp trong lp dn xut

Lp dn xut = Lp c s + thnh phn b sung.

Gi hm thit lp lp dn xut gm:


Gi 1 hm thit lp lp c s to d liu phn c s. Gi 1 hm thit lp lp dn xut to d liu b sung.

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:

Trong lp A1 c hm thnh phn Set()

Trong lp A2 c hm thnh phn Set()


Khi trong lp C c 2 hm Set(). truy nhp hm Set ca lp A1, vit C.A1::Set().

K tha nhiu lp
Nu mt lp c nhiu lp c s, cc tham s ca hm thit

lp cho tt c cc lp c s ny c th nu ra trong hm thit lp lp dn xut.

Nu mt lp c s nh ngha mt hm thit lp khng

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;

A1(float ox, float ox){

x=ox; y=oy;

};

Hm thit lp ca lp dn xut t lp A1 v A2 bt buc gi hm thit lp lp A1 nhng khng cn gi hm thit lp lp A2.

Lp c s o - virtual class
Khng th khai bo hai ln cng 1 lp trong danh sch ca

cc lp c s cho 1 lp dn xut. iu ny s sinh ra li v khng phn bit c lp c s gc.


class A -v1 class B - v2 class D - v4 class C - v3

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

}; class B : public A { public: };


float v2;

float v1;

Lp c s o
Gii php cho vn ny l khai bo A l 1 lp c s kiu

virtual cho c lp B v lp C. nh ngha ca lp B v C nh sau:


class B : virtual public A { public: float v2; }; class C : virtual public A { public: float v3; };

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

lin h vi nhau 1 cch tng qut.

Xt v d sau:

class Diem
K tha

Tnh a Hnh xy ra nh th no ???

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;

cout<<\n x =<<x<< y =<<y;

};

Tnh a Hnh
class coloredDiem : public Diem{ private: public:
int color; coloredDiem(float ox=0, float oy=0, int c=0):Diem(ox,oy){

} virtual void display(){


}

color = c;

Diem::display(); cout<< color =<<color;

};

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

kho virtual trc hm display() ca lp coloredDiem khng cn thit phi c.

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

class Diem{ private:


public:

float x, y; Diem(float ox =0, float oy=0){ } void display(){

x=ox; y=oy;

};

} virtual void displaycolor() {} // Hm rng

cout<<\n x =<<x<< y =<<y; displaycolor();

Tnh a Hnh class coloredDiem : public Diem{ private: public:


int color;

coloredDiem(float ox=0, float oy=0, int c=0):Diem(ox,oy){


} virtual void displaycolor (){ }

color = c;

cout<< color =<<color;

};

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.

Lp tru tng thng c p dng cho cc hm virtual

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{

public: void Print() =0; void Process()=0; int Status();


};

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 .

Hm Status() l 1 hm thnh phn bnh thng v s c 1


Khng c 1 i tng no ca 1 lp tru tng c to

ra, tuy nhin cc con tr v tham chiu n cc i tng ca lp tru tng th vn hp l.

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.

Mt lp dn xut phi nh ngha li tt c cc hm virtual

You might also like