際際滷

際際滷Share a Scribd company logo
L畉p tr狸nh h動畛ng 畛i
t動畛ng C++
Gi畉ng vi棚n gi畉ng d畉y: Nguy畛n H畛u V但n Long
BM MTT&TT 2
Ch動董ng 6
Hm b畉n v l畛p b畉n
BM MTT&TT 3
 Gi畛i thi畛u
 Hm b畉n
 Hm b畉n l hm 畛c l畉p
 Hm b畉n l hm thnh vi棚n
 L畛p b畉n
N畛i dung bi gi畉ng
BM MTT&TT 4
T畉i sao c畉n hm b畉n?
class Diem {
int x, y;
public:
.
int GiaTriX()
{ return x; }
};
class DuongTron {
Diem tam;
int bankinh;
public:
.
void InHoanhDoTam()
{ cout<<tam.GiaTriX(); }
};
Khai b叩o trong l畛p Diem hm sau:
friend void DuongTron::InHoanhDoTam();
Mu畛n truy c畉p c叩c thnh ph畉n
private hay protected c畛a 1 l畛p
t畛 b棚n ngoi c畛a l畛p
ph畉i thi畉t k畉 c叩c hm
l畉y gi叩 tr畛 d畛 li畛u thnh vi棚n
N畉u s畛 l動畛ng c叩c thnh ph畉n
d畛 li畛u trong l畛p qu叩 nhi畛u
thi畉t k畉 hm b畉n (friend)
Gi畛i thi畛u
BM MTT&TT 5
 Kh叩i ni畛m hm b畉n
 Hm b畉n c畛a 1 l畛p l hm c坦 kh畉 nng truy c畉p 畉n c叩c
thnh ph畉n d湛ng ri棚ng (d畛 li畛u v hm) c畛a l畛p 坦.
 C炭 ph叩p: khai b叩o prototype c畛a hm trong l畛p mu畛n
cho ph辿p truy c畉p 坦 v畛i t畛 kh坦a friend.
Gi畛i thi畛u
class A {
int a1;
public :

friend void HamDocLap(A );
friend int B::HamThanhVien();
};
void HamDocLap(A x)
{ cout<<x.a1; }
class B {

int HamThanhVien();
};
int B :: HamThanhVien() {
A y; 
return y.a1;
}
BM MTT&TT 6
 Hm 畛c l畉p (kh担ng thu畛c l畛p no) c坦 th畛 動畛c khai b叩o l
b畉n c畛a 1 l畛p.
 Ch畛 c畉n khai b叩o t棚n hm 畛c l畉p b棚n trong l畛p.
 Trong n畛i dung hm 畛c l畉p, c坦 th畛 truy c畉p b畉t k畛 thnh
ph畉n no thu畛c l畛p 坦.
Hm 畛c l畉p l hm b畉n
class Diem {
int x,y;
public:

friend int Trung(Diem, Diem);
};
int Trung (Diem a, Diem b) {
if (a.x==b.x && a.y==b.y)
return 1;
else
return 0; }
class PhanSo {
int tu, mau;
public:

friend int SoSanhBang (PhanSo,PhanSo);
};
int SoSanhBang (PhanSo a, PhanSo b) {
if(a.tu*b.mau== b.tu*a.mau)
return 1;
else
return 0;
}
BM MTT&TT 7
 Hm thnh vi棚n c畛a 1 l畛p c坦 th畛 動畛c khai b叩o l b畉n c畛a 1
l畛p kh叩c.
 Ch畛 c畉n khai b叩o <T棚n l畛p>::<T棚n hm thnh vi棚n>
b棚n trong l畛p c畉n truy c畉p.
 Trong n畛i dung hm thnh vi棚n, c坦 th畛 truy c畉p b畉t k畛
thnh ph畉n no thu畛c l畛p 達 khai b叩o.
Hm thnh vi棚n l hm b畉n
class DoanThang;
class Diem {
int x,y;
public:

friend float
DoanThang::ChieuDai();
};
class DoanThang {
Diem d1, d2;
public:

float ChieuDai() {
sqrt( pow( (d1.x - d2.x) , 2 ) +
pow( (d1.y - d2.y) , 2 ) );
}
};
BM MTT&TT 8
Hm b畉n c畛a nhi畛u l畛p
Hm b畉n 達 ph叩 v畛 t鱈nh bao g坦i c畛a OOP => kh担ng l畉m d畛ng.
class B;
class A {

friend void B :: F();
friend int F1(A , B);

};
class B {

void F();
friend int F1(A , B);

};
void B::F() {  }
int F1(A x, B y) {  }
L畛p
c坦 2
hm
b畉n
Hm
F1()
l b畉n
c畛a 2
l畛p A
v B

M畛t l畛p c坦 th畛 c坦 nhi畛u hm b畉n (畛c l畉p hay hm thnh vi棚n c畛a
l畛p kh叩c).

M畛t hm (畛c l畉p hay hm thnh vi棚n) c坦 th畛 l b畉n c畛a nhi畛u l畛p.
BM MTT&TT 9
L畛p b畉n (friend class)
Khi mu畛n khai b叩o t畉t c畉 c叩c
hm thnh vi棚n c畛a l畛p A l
b畉n c畛a l畛p B
Khai b叩o A
l l畛p b畉n
c畛a l畛p B
class DuongTron;
class Diem {
int x,y;
public:
...
friend class
DuongTron;
}:
class DuongTron {
Diem tam;
int bankinh;
public:
...
DuongTron(int x1, int y1, int bk) {
tam.x = a; tam.y=y1; bankinh=bk;
}
void Ve() {
cout << ( << tam.x << ,
<< tam.y <<,
<< bankinh << );
}
};

More Related Content

Chuong6 (2)

  • 1. L畉p tr狸nh h動畛ng 畛i t動畛ng C++ Gi畉ng vi棚n gi畉ng d畉y: Nguy畛n H畛u V但n Long
  • 2. BM MTT&TT 2 Ch動董ng 6 Hm b畉n v l畛p b畉n
  • 3. BM MTT&TT 3 Gi畛i thi畛u Hm b畉n Hm b畉n l hm 畛c l畉p Hm b畉n l hm thnh vi棚n L畛p b畉n N畛i dung bi gi畉ng
  • 4. BM MTT&TT 4 T畉i sao c畉n hm b畉n? class Diem { int x, y; public: . int GiaTriX() { return x; } }; class DuongTron { Diem tam; int bankinh; public: . void InHoanhDoTam() { cout<<tam.GiaTriX(); } }; Khai b叩o trong l畛p Diem hm sau: friend void DuongTron::InHoanhDoTam(); Mu畛n truy c畉p c叩c thnh ph畉n private hay protected c畛a 1 l畛p t畛 b棚n ngoi c畛a l畛p ph畉i thi畉t k畉 c叩c hm l畉y gi叩 tr畛 d畛 li畛u thnh vi棚n N畉u s畛 l動畛ng c叩c thnh ph畉n d畛 li畛u trong l畛p qu叩 nhi畛u thi畉t k畉 hm b畉n (friend) Gi畛i thi畛u
  • 5. BM MTT&TT 5 Kh叩i ni畛m hm b畉n Hm b畉n c畛a 1 l畛p l hm c坦 kh畉 nng truy c畉p 畉n c叩c thnh ph畉n d湛ng ri棚ng (d畛 li畛u v hm) c畛a l畛p 坦. C炭 ph叩p: khai b叩o prototype c畛a hm trong l畛p mu畛n cho ph辿p truy c畉p 坦 v畛i t畛 kh坦a friend. Gi畛i thi畛u class A { int a1; public : friend void HamDocLap(A ); friend int B::HamThanhVien(); }; void HamDocLap(A x) { cout<<x.a1; } class B { int HamThanhVien(); }; int B :: HamThanhVien() { A y; return y.a1; }
  • 6. BM MTT&TT 6 Hm 畛c l畉p (kh担ng thu畛c l畛p no) c坦 th畛 動畛c khai b叩o l b畉n c畛a 1 l畛p. Ch畛 c畉n khai b叩o t棚n hm 畛c l畉p b棚n trong l畛p. Trong n畛i dung hm 畛c l畉p, c坦 th畛 truy c畉p b畉t k畛 thnh ph畉n no thu畛c l畛p 坦. Hm 畛c l畉p l hm b畉n class Diem { int x,y; public: friend int Trung(Diem, Diem); }; int Trung (Diem a, Diem b) { if (a.x==b.x && a.y==b.y) return 1; else return 0; } class PhanSo { int tu, mau; public: friend int SoSanhBang (PhanSo,PhanSo); }; int SoSanhBang (PhanSo a, PhanSo b) { if(a.tu*b.mau== b.tu*a.mau) return 1; else return 0; }
  • 7. BM MTT&TT 7 Hm thnh vi棚n c畛a 1 l畛p c坦 th畛 動畛c khai b叩o l b畉n c畛a 1 l畛p kh叩c. Ch畛 c畉n khai b叩o <T棚n l畛p>::<T棚n hm thnh vi棚n> b棚n trong l畛p c畉n truy c畉p. Trong n畛i dung hm thnh vi棚n, c坦 th畛 truy c畉p b畉t k畛 thnh ph畉n no thu畛c l畛p 達 khai b叩o. Hm thnh vi棚n l hm b畉n class DoanThang; class Diem { int x,y; public: friend float DoanThang::ChieuDai(); }; class DoanThang { Diem d1, d2; public: float ChieuDai() { sqrt( pow( (d1.x - d2.x) , 2 ) + pow( (d1.y - d2.y) , 2 ) ); } };
  • 8. BM MTT&TT 8 Hm b畉n c畛a nhi畛u l畛p Hm b畉n 達 ph叩 v畛 t鱈nh bao g坦i c畛a OOP => kh担ng l畉m d畛ng. class B; class A { friend void B :: F(); friend int F1(A , B); }; class B { void F(); friend int F1(A , B); }; void B::F() { } int F1(A x, B y) { } L畛p c坦 2 hm b畉n Hm F1() l b畉n c畛a 2 l畛p A v B M畛t l畛p c坦 th畛 c坦 nhi畛u hm b畉n (畛c l畉p hay hm thnh vi棚n c畛a l畛p kh叩c). M畛t hm (畛c l畉p hay hm thnh vi棚n) c坦 th畛 l b畉n c畛a nhi畛u l畛p.
  • 9. BM MTT&TT 9 L畛p b畉n (friend class) Khi mu畛n khai b叩o t畉t c畉 c叩c hm thnh vi棚n c畛a l畛p A l b畉n c畛a l畛p B Khai b叩o A l l畛p b畉n c畛a l畛p B class DuongTron; class Diem { int x,y; public: ... friend class DuongTron; }: class DuongTron { Diem tam; int bankinh; public: ... DuongTron(int x1, int y1, int bk) { tam.x = a; tam.y=y1; bankinh=bk; } void Ve() { cout << ( << tam.x << , << tam.y <<, << bankinh << ); } };