Bài giảng môn Lập trình hướng đối tượng - Chương 6: Hàm bạn – lớp bạn
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.
3 trang |
Chia sẻ: nguyenlam99 | Lượt xem: 1092 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Bài giảng môn Lập trình hướng đối tượng - Chương 6: Hàm bạn – lớp bạn, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
HÀM BẠN – LỚP BẠN
Chương 6
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 {
int x, y;
public:
.
int GiaTriX()
{ return x; }
Muốn truy cập các thành phần
private hay protected của 1 lớp
từ bên ngoài của lớp
phải thiết kế các hàm
lấy giá trị dữ liệu thành viên
3
};
class DuongTron {
Diem tam;
int bankinh;
public:
.
void InHoanhDoTam(){
cout<<tam.GiaTriX();}
};
Khai báo trong lớp Diem hàm sau:
friend void DuongTron::InHoanhDoTam();
Nếu số lượng các thành phần
dữ liệu trong lớp quá nhiều
thiết kế hàm bạn (friend)
• 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 ca hàm trong lớp
muốn cho phép truy cập ñó với từ khóa friend.
Giới thiệu
4
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;
}
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;
5
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;
}
Hàm ñộc lập là hàm bạn
class PhanSo {
int tu, mau;
public:
friend int SoSanhBang (PhanSo,PhanSo);
};
6
int SoSanhBang(PhanSo a, PhanSo b){
if(a.tu*b.mau== b.tu*a.mau)
return 1;
else
return 0;
}
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 {
7
class DoanThang;
class Diem {
int x,y;
public:
friend float
DoanThang::ChieuDai();
};
Diem d1, d2;
public:
float ChieuDai() {
sqrt(
pow((d1.x - d2.x),2)
+
pow((d1.y - d2.y),2));
}
};
Hàm 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 {
• 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.
8
class A {
friend void B::F();
friend int F1(A, B);
};
void F();
friend int F1(A , B);
};
void B::F(){ }
int F1(A x, B y) { }Lớp có 2 hàm bạn
Hàm F1() là bạn
của 2 lớp A và B
Lớp bạn (friend class)
Khi muốn khai báo tất cả
các hàm thành 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;
class DuongTron {
Diem tam;
int bankinh;
9
public:
...
friend class
DuongTron;
}:
public: ...
DuongTron(int x1, int y1, int bk)
{tam.x = a; tam.y = y1; bankinh = bk;
}
void Ve() {
cout << “(“ << tam.x << “,”
<< tam.y <<“,”
<< bankinh << “)”;
}
};
Các file đính kèm theo tài liệu này:
- tran_quang_hai_bangchapter6_3177.pdf