You are on page 1of 73

CHNG II:

I TNG V LP
12 tit

6 December 2012

NI DUNG:

i tng Lp Php gn cc i tng Hm to v hm hy Hm static Hm friend


6 December 2012 2

2.1. Khi nim i tng v lp

i tng l g?

Chng trnh l c my phc tp. Cu thnh t nhiu loi vt liu. Vt liu c bn: hm, cu trc. to ra chng trnh tt?

Vt liu mi: i tng!!

Phng php lp trnh hng i tng GV. Nguyn Minh Huy

2.1. Khi nim i tng v lp

c trng ca i tng:

ng gi c d liu v x l. Thuc tnh (attribute): d liu ca i tng. Phng thc (method): x l ca i tng. Hp en: thuc tnh trong, phng thc ngoi. Bn nhm phng thc:

Cu trc i tng:

Nhm to hy. Nhm truy xut thng tin. Nhm x l nghip v. Nhm ton t.

Thuc tnh Phng thc


4

Phng php lp trnh hng i tng GV. Nguyn Minh Huy

2.1. Khi nim i tng v lp

V sao l hng i tng?

Hng th tc (procedural oriented).


Cc bc nu n

Ly hnh ng lm trung tm. Hm l xng sng.


- Lt (Rau) - Luc (Rau) - Nu (Cm) - p (C) - Kho (C)

Verb
Lt p Nu Kho

Object
Rau C Cm C

Hng i tng (object oriented).


Ly d liu lm trung tm. i tng l xng sng.


- Rau.Lt - Rau.Luc - Cm.Nu - C.p - C.Kho

Luc

Rau

Thay i t duy lp trnh!!


5

Phng php lp trnh hng i tng GV. Nguyn Minh Huy

2.1. Khi nim i tng v lp

Khi nim lp:

Person1: Name: Peter. Age: 25. Hair Color: Brown. Eye Color: Brown. Job: Worker. Person2: Name: Thomas. Age: 50. Hair Color: White. Eye Color: Blue. Job: Teacher.

Tp hp i tng c cng thuc tnh v phng thc

Human:

Name. Age. Hair Color. Eye Color. Job.

Bn m t i tng Kiu ca i tng


6

Phng php lp trnh hng i tng GV. Nguyn Minh Huy

2.2 LP
nh

ngha lp l to ra mt kiu d liu tru tng mi m t cc c trng ca i tng trong thc t. nh ngha lp gm hai bc: Khai bo lp: khai bo cc d liu v hm thnh phn to nn lp nh ngha lp: nh ngha c th cc hm thnh phn ca lp

6 December 2012

2.2.1 Khai bo lp:


Tin

hnh m t lit k cc thnh phn to nn kiu d liu lp. Dng t kha class nh ngha lp

6 December 2012

*C php khai bo lp:


class tn-lp-c-nh-ngha { private: //khai bo vng che giu ring ca lp
khai bo cc d liu khai bo cc hm

protected: //khai bo vng bo v ca lp


khai bo cc d liu khai bo cc hm

public:

//khai bo vng dng chung ca lp


khai bo cc d liu khai bo cc hm

};
6 December 2012 9

Trong :
liu: xc nh cc thnh phn d liu m t lp gi l trng, thuc tnh xc nh i tng d liu c m t thng qua tn v kiu xc nh khai bo bin d liu kiu: chp nhn c khai bo cc kiu gm cc kiu c bn(int, float,) hay con tr n i tng lp v d:
D

class date{ private: int ngay; int thang; int nam; . };


6 December 2012 10

xc nh cc phng thc hay tc v thc hin x l trn d liu ca lp, c khai bo nh khai bo hm <kiu-tr-li> Tn-hm( ds i s ); V d:
Hm:

class date{ . public: int get_ngay( ); int get_thang( ); int get_nam( ); int sosanh( date &d ); };
6 December 2012 11

Phm vi

Khi nim phm vi:


Tm nh hng, phm vi hot ng ca thuc tnh v phng thc. Tm nh hng cng hp, truy xut cng hn ch.

Phn loi phm vi:


Phm vi private public protected Tm nh hng Hp Rng Va Phm vi hot ng Bn trong lp. Bn trong ln bn ngoi lp. Bn trong lp v lp k tha.

Phng php lp trnh hng i tng GV. Nguyn Minh Huy

12

Phm vi

Quy tc hp en:

Thuc tnh c phm vi private hn ch truy xut. Phng thc c phm public cung cp tnh nng.

class PhanSo { private: int m_iTuSo; int m_iMauSo; public: void khoiTao(int iTuSo, int iMauSo); PhanSo cong(PhanSo p); };

Phng php lp trnh hng i tng GV. Nguyn Minh Huy

13

Cc

d liu v hm thnh phn ca lp c m t vi 3 mc khc nhau:


s hu ring, dng khai bo cc thnh vin l ring ca ch lp v khng th truy cp t cc lp khc c dng vi mc ch che giu thng tin ca lp protected: ch bo v, khai bo cc thnh phn ca ring lp v cc lp k tha n c th truy cp c cn cc lp khc khng truy cp c public: dng chung, dng khai bo cc thnh phn c th truy cp t mi ni truy cp c t bn ngoi lp
private:

Ch

: Nu khng c t kha private th mc nh hiu l thuc


14

vng private
6 December 2012

* V d:
class date { private: int ngay; int thang; int nam; public: int get_ngay(); int get_thang(); int get_nam(); void in( ); void nhap( ); };
6 December 2012 15

V d:
class PhanSo { private: int m_iTuSo; int m_iMauSo; public: PhanSo cong(PhanSo p); };
PhanSo PhanSo::cong(PhanSo p) { // Ci t cng phn s } void main() { PhanSo p1; PhanSo *p2 = new PhanSo; PhanSo *p3 = new PhanSo[10]; p3[1] = p1.cong(p3[5]); p3[1] = p2->cong(p3[5]);

Phng php lp trnh hng i tng GV. Nguyn Minh Huy

16

2.2.2. nh ngha hm thnh phn


nh

ngha hm thnh phn l thao tc nh ngha c th cc hm thao tc ca lp c thc hin nh th no? Cc hm thnh phn ca lp c nh ngha theo hai cch:
nh

ngha t bn ngoi khai bo lp nh ngha bn trong khai bo lp

6 December 2012

17

a. nh ngha bn ngoi khai bo lp


L

thc hin inh ngha bn ngoi vng khai bo class nh ngha sau du ; ca khai bo class

nh ngha bn ngoi phi c thm tip u ng ch ra tn lp cha hm cn nh ngha. Dng tng qut:

Kiu-tr-li tn-lp :: tn-hm (ds i s) { nh ngha ni dung hm }


6 December 2012 18

V d:
#include iostream.h class date { int ngay,thang,nam; public: void nhap(); void in(); };

void date :: nhap( ) { cout<<Nhap ngay thang nam:; cin>>ngay>>thang>>nam; }

void date :: in( ) { cout<<Ngay:<<ngay<</<<thang<</<<nam; }


6 December 2012 19

b. nh ngha bn trong vng nh ngha lp


nh

ngha ngay ti v tr cc hm thnh phn trong phn m t v khai bo lp Thng dng vi cc hm n gin v t dng lnh

6 December 2012

20

V d
#include iostream.h class date { int ngay,thang,nam; public: void nhap() { cout<<Nhap ngay thang nam:; cin>>ngay>>thang>>nam; } void in() { cout<<Ngay:<<ngay<</<<thang<</<<nam; } };
6 December 2012 21

2.2. 3. To lp i tng

s dng lp i tng phi to ra cc i tng khai bo bin kiu class c nh ngha <tn lp> < tn i tng>;

d: date ngaysinh; i tng l mt th hin ca lp Mi i tng s hu mt tp cc bin tng ng vi thnh phn d liu ca lp v tt c cc i tng cng chung nh ngha cc hm thnh phn
V
D liu

Lp
i tng 2
D liu c th 2

i tng 1
D liu c th 1

6 December 2012

22

2.2.3. To lp i tng

truy cp n tng thnh phn i tng thng qua tn bin kiu class c khai bo v ton t du chm (.) theo dng sau: Tn-bin-i-tng.d-liu-thnh-phn; Tn-bin-i-tng.hm-thnh-phn(ds i s); V d: ngaysinh.ngay ngaysinh.thang ngaysinh.nhap( ); ts = ngaysinh.get_thang( );

6 December 2012

23

2.2.4. Con tr This:


Mi

mt lp trong n lun c mt con tr mc nh l con tr this, con tr m t chnh i tng lp ang nh ngha. Cc hm thnh phn ca lp lun c tham s u tin l con tr this. Con tr this dng xc nh a ch ca i tng dng lm tham s ngm nh cho hm thanh phn. Con tr this tham chiu n i tng ang gi hm thnh phn.
6 December 2012 24

2.2.4. Con tr This

Con tr this:

S dng bn trong lp. i din cho i tng ang gi phng thc. Hu dng trong mt s trng hp.

class PhanSo { private: int m_iTuSo; int m_iMauSo; public: void ganTuSo(int iTuSo) { this->m_iTuSo = iTuSo; } };

void main() { PhanSo p1; p1.ganTuSo(3); PhanSo p2; p2.ganTuSo(5); }

25

2.2.4. Con tr This


d: class PS { public: int ts, ms; void nhap(); // void nhap( PS *this ); PS cong( PS b ); //PS cong( PS *this , PS b ); };
V
6 December 2012 26

cp n thnh phn con tr this this->tn_thnh_phn tn_thnh_phn this.*tn_thnh_phn tn_thnh_phn V d:


Truy

void PS::nhap() { cout<<Tu:; cin>>ts; cout<<Mau:; cin>>ms; }

void PS::nhap() { cout<<Tu:; cin>>this->ts; cout<<Mau:; cin>>this->ms; }

6 December 2012

27

2.3. Php gn cc i tng


x y 5 6 5 6 x y

x y

5 6

5 6

x y

z
a
6 December 2012

z
b
28

* Bi tp p dng:
Xy dng Lp Phn s, Trong : Phn s gm: t s v mu s Xy dng cc hm thc hin sau:
Hm nhp mt phn s Hm in mt phn Hm ton t +, - hai s phn s Hm ton t == so snh hai phn s vi nhau

p dng: nhp vo hai phn s t bn phm. In ra mn hnh cc kt qu tnh ton tng ng


6 December 2012

29

2.4 Hm to (Cu t)

Khi i tng va c to:


Gi tr cc thuc tnh bng bao nhiu? i tng cn c thng tin ban u. Gii php:

Xy dng phng thc cung cp thng tin cho i tng.

PhanSo
T s?? Mu s??

SinhVien
H tn?? im ton?? im tin??

Hm to ra i!!

30

2.4 Hm to

Tnh cht hm to (constructor):


c gi khi to i tng. C chc nng khi to thnh phn d liu cho i tng Xin cp pht b nh cho thnh phn d liu c con tr C th np chng nhiu hm to. Hm to c tn trng tn lp. V d:

class sophuc { private: double x; //phan thuc double y; //phan ao public: //dinh nghia ham toan tu cho phep tao doi tuong so phuc sophuc(); sophuc( double a, double b ); void nhap(); void in(); 31 };

2.4 Hm to

Hm to mc nh (default constructor):

Khng c tham s. Dng to i tng vi thng tin mc nh. Lp khng c hm to. Trnh bin dch cung cp.
void main() { PhanSo p;

class PhanSo { private: int TuSo; int MauSo; public: PhanSo(); };


32

2.4 Hm to

Cn c hm to mc nh khi khai bo mng cc i tng.


Class point { private: int x; int y; Public: point(int ox,int oy) { x=ox; y=oy;} void display(); } Void main() { point a(5,2); a. display(); point b[10];// li. }

33

2.4 Hm to
Hm

to c tham s: l hm to c cc tham bin cho php khi to mt b gi tr no cho cc d liu thnh phn ca i tng, kiu tham bin cho hm to c th l kiu bt k ngoi tr kiu lp ang nh ngha.
V d: sophuc tg(10,-2);; sophuc tong(2,-3), hieu(0,0);

6 December 2012

34

2.4 Hm to

Hm to sao chp (copy constructor):

C tham s l i tng cng lp. Dng to i tng mi t i tng cng lp c. Lp khng c hm to sao chp. Trnh bin dch cung cp. Khi lp c cc thuc tnh con tr th phi nh ngha hm to sao chp mi.
void main() { PhanSo p1(1, 2); PhanSo p2(p1); PhanSo p3 = p2; }

class PhanSo { private: int tuso; int mauso; public: PhanSo(const PhanSo &p); }; 35

* C php nh ngha hm to sao chp:

Tn_lp ( const Tn_lp &i_tng ) {


// Cc lnh dng cc thuc tnh ca i tng //khi gn cho cc thuc tnh ca i tng mi

6 December 2012

36

* v d:
class PS { Private: int ts,ms; public: PS( const PS &x); //Hm to sao chp void nhap(); void in(); }; //nh ngha hm to sao chp PS :: PS( const PS &x) { ts = x.ts; ms = x.ms; }
6 December 2012 37

* v d:
Class x { Private: int * x; public: x( int i=0) { x=new int; *x=i; } void setx(int i) { *x=i; } void main() { x a(2); a.printf(); x b(a); b.printf(); b.setx(100); b.printf(); a.printf(); }

void printf() { cout<< *x<<endl; }


6 December 2012 38

2.4 Hm to
Mt lp thng c ti thiu 3 hm to:

Hm to mc nh. Hm to c tham s. Hm to sao chp.

class PhanSo { private: int m_tuSo; int m_mauSo; public: PhanSo(); PhanSo(int tuSo, int mauSo); PhanSo(const PhanSo &p); };
39

2.4 Kt lun tnh cht ca hm to


Phi

khai bo trong vng public Tn ca cu t phi trng vi tn ca lp T ng c thc hin khi khai bo i tng Mt lp c th c nhiu hm cu t Khi mt lp c nhiu cu t, vic to i tng phi km theo cc tham s ph hp vi cc hm khai bo Hm cu t khng c kiu tr v Khng th k tha, nhng lp dn xut vn c th gi hm cu t ca lp c s

6 December 2012

40

2.5 Hm hy

Vn r r b nh (memory leak):

Khi hot ng, i tng c cp pht b nh. Khi hy i tng, b nh khng c thu hi!! Gii php:

Xy dng phng thc thu hi.

SinhVien
H tn im ton im tin Thu hi

R r b nh!!

Hm hy!!

41

2.5 Hm hy

Tnh cht hm hy (destructor):


T ng gi khi i tng b hy. Mi lp c duy nht mt hm hy. Hm hy c tn ~<Tn lp>


void main() { Sinhvien h; Sinhvien *p = new Sinhvien; delete p; }

class Sinhvien { private: char *hoten; float diemtoan; float diemtin; public: ~HocSinh() { delete hoTen; } };
42

2.5 Kt lun v tnh cht hm hy


L hm thc hin gii phng b nh cp cho i tng khi khng cn s dng i tng. Hy t c gi khi i tng b xa khi b nh. Mi lp ch c duy nht mt hm hy t Hm hy t l hm rng khng c tham s v l hm thnh phn ca lp c cng tn lp v thm tip u ng ~ V d: ~date( ); Hy t c thuc tnh public Khi khng khai bo hy t trong nh ngha lp th chng trnh dch t ng sinh ra hy t mc nh.

6 December 2012 43

2.5 Hm Hy
#include <iostream.h> #include <conio.h> class test{ private: int num; public: test(int n); ~test(); }; test::test(int n) { num=n; cout<<" goi cau tu voi num="<<num<<"\n"; } test::~test() { cout<<" goi huy tu voi num="<<num<<endl; getch(); } void f(int p) { test x(2*p); }
6 December 2012 44

void main() { test a(1); for(int i=1;i<=2;i++) f(i); getch(); }

void main() { test a(1); for(int i=1;i<=2;i++) f(i); getch(); }


6 December 2012 45

2.5. S cn thit ca hm to v hm hy
i

vi cc lp khng c thnh phn d liu ng ch cn s dng hm to v hm hy mc nh l . Hm to v hm hy do ngi dng nh ngha l rt cn thit i vi cc lp cha thnh phn d liu ng. Hm to cp pht b nh ng cn hm hy th gii phng vng nh c cp pht.
6 December 2012 46

2.6 Ba vn con tr (Big Three)

V d 1:
class Array { private: int n; int * v; public: Array(int size); }; Array::Array(int size) { n= size; v = new int[n]; } void main() { Array a1(5); }

47

2.6 Ba vn con tr (Big Three)

Vn r r b nh:

Lp c thuc tnh con tr. i tng ca lp b hy, b nh khng thu hi. a1: Array
n v 5 010 1 2 3 4 5

R r b nh!!

Phi dng hm hy dn dp!!

48

2.6 Ba vn con tr (Big Three)

V d 1:
class Array { private: int n; int *v; public: Array(int size); ~Array(); }; Array::~Array() { delete v; } void main() { Array a1(5); }

49

2.6 Ba vn con tr (Big Three)

V d 2:
class Array { private: int n; int *v; public: Array(int size); ~Array(); }; void main() { Array a1(5); Array a2(a1); }

50

2.6 Ba vn khi d liu cha con tr

Vn sao chp b nh

Hm to sao chp mc nh sao chp gi tr tng thuc Dng chung b tnh. Mt b nh!! nh!! a2: Array
5 101 1 2 3 4 5 n v

a1: Array
n v

Phi ci t li hm to sao chp!!

51

2.6 Ba vn khi d liu cha con tr

V d 2:
class Array { private: int n; int *v; public: Array(int size); Array(const Array &a); ~Array(); }; Array::Array(const Array &a) { n = a.n; v = new int[n]; for (int i = 0; i < n; i++)
v[ i ] = a.v[ i ];

} void main() { Array a1(5); Array a2(a1); }

52

2.6 Ba vn con tr (Big Three)

V d 3:
class Array { private: int n; int *v; public: Array(int size); Array(const Array &a); ~Array(); }; void main() { Array a1(5); Array a2(6); a2 = a1; }

53

2.6 Ba vn con tr (Big Three)

Vn sao chp b nh
Ton t gn mc nh sao chp gi tr tng thuc tnh. Dng chung b R r b nh!! Mt b nh!! nh!!

a1: Array
m_size 5 m_data 101

a2: Array
1 2 3 4 5 6
1 2 3 4 5 m_size 6 m_data 405

Phi ci t li ton t gn!!

54

2.6 Ba vn con tr (Big Three)

V d 2:
Array & Array::operator =(const Array &a) class Array { { delete v; private: n = a.n; int n; v = new int[n]; for (int i = 0; i < n; i++) int *v; v[ i ] = a.v[ i ]; public: return *this; Array(int size); } void main() Array(const Array &a); { ~Array(); Array a1(5); Array & operator =(const Array &a); Array a2(6); }; a2 = a1; }

55

2.6 Ba vn con tr (Big Three)

Lp c thuc tnh con tr, phi lun km theo:

Hm hy: thu hi b nh. Hm to sao chp: sao chp b nh. Ton t gn: sao chp b nh.

class Sinhvien { private: char *hoTen; char *maSV; char diemtb; public: Sinhvien(const Sinhvien &h); ~Sinhvien(); Sinhvien & operator =(const Sinhvien &h); };
56

2.6 Tm tt

Hm To:

Khi to thng tin ban u cho i tng. c gi khi to i tng. Mi lp c th c nhiu hm to. Dn dp b nh cho i tng. T ng gi khi i tng b hy. Mi lp c duy nht mt hm hy.

Hm Hy:

Ba vn khi d liu con tr:

Khi lp c thuc tnh con tr:


Phi c hm hy. Phi c hm to sao chp. Phi c ton t gn.

57

2.7. T kha const


c

dng khi khng mun thay i d liu ca i tng trong mt s phng thc (hm) no . S dng: thm t kha const vo trc khai bo ca tham s hm v d:
friend sophuc cong(const sophuc &c1, const sophuc &c2); friend sophuc tru(const sophuc &c1, const sophuc &c2);
6 December 2012 58

2.8. Cc thnh phn tnh


Bin

tnh static:. S khc bit gia bin thnh vin v bin static:
Bin

thnh vin: mi i tng u s hu cc thnh phn d liu ring Bin static: dng chung cho mi i tng, mt i tng thay i th mi i tng s thay i theo.
6 December 2012 59

2.8. Cc thnh phn tnh


Class x { private: int x; static int n; }

a.n a.x a.n a.x


6 December 2012

b.n b.x b.n b.x


60

2.8. Cc thnh phn tnh


S

dng static trong cc trng hp:

lm b m Tng tc x l ( ch c mt bn cho mi i tng). Bin static phi c khi to trc khi cc i tng c khi to. V d int count :: count=0;
Dng

6 December 2012

61

2.8. Cc thnh phn tnh


Hm

static:

c lp vi bt k i tng no ca lp . Hm static khng s dng i tng lm tham s ngm nh nn khng th s dng con tr this. C th gi hm static cho d c khai bo cc i tng ca lp hay khng. Hm khai bo static ch c th truy nhp ti nhng thnh phn tnh trong lp Hm thnh phn tnh c th c gi vi tn ca lp thay cho tn ca i tng

6 December 2012

62

2.8. Cc thnh phn tnh


Hm

static:

C 2 cch gi hm: Cch 1: < tn lp> :: < tn hm> ( cc tham s) Cch 2: Gi thng qua i tng.

6 December 2012

63

V d v bin static
class employee { private: char * firstname; char * lastname; static int count; public: employee(char * fname,char *lname); ~employee(); static int getcount(); };
6 December 2012 64

BI TP XY DNG LP
XAY DUNG LOP VECTO VOI CAC HAM TAO SAU:

class vector { private: int n; int * v; public: vector(); vector(int size); vector(int size,int * a); vector(vector &b); ~vector(); void display(); };
6 December 2012 65

2.9 Hm bn
bn l hm c nh ngha cho php nhiu lp cng s dng chung Khai bo: thm t kha friend vo trc kiu ca hm thnh phn C php khai bo: friend type tn-hm( parameter ) { .. }
Hm
6 December 2012 66

2.9 Hm bn
Hm

friend c th nh ngha mi ni v khng cn dng t kha friend hay tan t :: Hm friend l mt hm c nh ngha thng thng

6 December 2012

67

* c im hm bn:
Khng

nm trong min xc nh ca lp ni c

khai bo Khi truy cp n hm khng cn gn vi i tng ca lp truy nhp n cc hm friend thc hin nh cc hm khai bo thng thng Thng thng i s ca cc hm thn thin l cc i tng ang nh ngha

6 December 2012

68

* c im hm friend:
C

3 dng hm bn:

thnh phn ca mt lp l hm bn ca mt lp khc Hm t do l hm bn ca mt lp Cc hm thnh phn ca lp ny l bn ca lp khc


Hm

6 December 2012

69

V d hm bn l hm t do
class matran; class mang { private: float v[3]; public: mang(float a1=0,float a2=0,float a3=0); void display(); friend mang nhan(matran , mang); }; class matran { private: float m[3][3]; public: matran( float t[3][3]); friend mang nhan(matran, mang); };
6 December 2012 70

V d hm bn l hm thnh phn ca mt lp
class mang; class matran { private: float m[3][3]; public: matran( float t[3][3]); mang nhan(mang); }; class mang { private: float v[3]; public: mang(float a1=0,float a2=0,float a3=0); void display(); friend mang matran::nhan( mang); };
6 December 2012 71

Bi tng qut
#include <iostream.h> #include <conio.h> class matrix; class vector { private: static int n; int * v; public: vector(); vector(int * a); vector(vector &b); ~vector(); void display(); static int &size(); friend vector nhan(matrix &, vector & ); friend class matrix; };

6 December 2012 72

class matrix { private: vector * m; static int n; public: matrix(); ~matrix(); void display(); static int &size(); friend vector nhan(matrix &, vector &); };

6 December 2012

73

You might also like