Xem mẫu
- Chương 6
HÀM BẠN – LỚP BẠN
1
- Nội dung
• Giới thiệu
• Hàm độc lập là hàm bạn
• Hàm thành viên là hàm bạn
• Hàm bạn của nhiều lớp
• Lớp bạn
2
- Giới thiệu
• Tại sao cần hàm bạn?
class Diem { Muốn truy cập các thành phần
int x, y; private hay protected của 1 lớp
public: từ bên ngoài của lớp
….
int GiaTriX() phải thiết kế các hàm
{ return x; } lấy giá trị dữ liệu thành
}; viên
class DuongTron { Nếu số lượng các thành phần
dữ liệu trong lớp quá nhiều
Diem tam;
int bankinh;
public: thiết kế hàm bạn (friend)
….
Khai báo trong lớp Diem hàm sau:
void InHoanhDoTam(){
friend void
cout
- Giới thiệu
• Khái niệm hàm bạn
– Hàm bạn của 1 lớp là hàm có khả năng truy cập đến
các thành phần dùng riêng (dữ liệu và hàm) của lớp
đó.
– Cú pháp: khai báo prototype của hàm trong lớp
muốn cho phép truy cập đó với từ khóa friend.
class A { class B {
int a1; …
public : int HamThanhVien();
… };
Friend void HamDocLap(A);
Friend int B::HamThanhVien(); int B::HamThanhVien()
}; {
void HamDocLap(A x) A y; …
{ cout
- Hàm độc lập là hàm bạn
• Hàm độc lập (không thuộc lớp nào) có thể được khai
báo là bạn của 1 lớp.
• Chỉ cần khai báo tên hàm độc lập bên trong lớp.
• Trong nội dung hàm độc lập, có thể truy cập bất kỳ
thành phần nào thuộc lớp đó.
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;
} 5
- Hàm độc lập là hàm bạn
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;
}
6
- Hàm thành viên là hàm bạn
• Hàm thành 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 ::
bên trong lớp cần truy cập.
• Trong nội dung hàm thành viên, có thể truy cập bất kỳ
thành phần nào thuộc lớp đã khai báo.
class DoanThang {
Diem d1, d2;
public:
class DoanThang; …
class Diem { float ChieuDai() {
int x,y; sqrt(
public: pow((d1.x - d2.x),2)
… +
friend float pow((d1.y - d2.y),2));
DoanThang::ChieuDai(); }
}; }; 7
- Hàm bạn của nhiều lớp
• Một lớp có thể có nhiều hàm bạn (độc lập hay hàm thành
viên của lớp khác).
• Một hàm (độc lập hay hàm thành viên) có thể là bạn của
nhiều lớp.
Hàm bạn đã phá vỡ tính bao gói của OOP => không lạm dụng.
class B; class B {
class A { …
… void F();
friend void B::F(); friend int F1(A , B);
friend int F1(A, B); …
… };
}; void B::F(){ … }
Lớp có 2 hàm bạn int F1(A x, B y) { … }
Hàm F1(…) là bạn
của 2 lớp A và B
8
- Lớp bạn (friend class)
Khi muốn khai báo tất cả Khai báo A là
các hàm thành viên của lớp bạn của
lớp A là bạn của lớp B lớp B
class DuongTron; class DuongTron {
class Diem { Diem tam;
int x,y; int bankinh;
public: public: ...
... DuongTron(int x1, int y1, int bk)
friend class {tam.x = a; tam.y = y1; bankinh = bk;
DuongTron; }
}: void Ve() {
cout
nguon tai.lieu . vn