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? 3 class Diem { int x, y; p[.]
Trang 1HÀM BẠN – LỚP BẠN
Chương 6
1
Trang 2Nộ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
Trang 3Giới thiệu
• Tại sao cần hàm bạn?
3
public :
….
int GiaTriX()
{ return x; } };
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();
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
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)
Trang 4• 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
int a1;
public :
…
};
void HamDocLap(A x)
{ cout<<x.a1; }
…
int HamThanhVien(); };
int B::HamThanhVien() {
A y; … return y.a1;
Giới thiệu
Trang 5Hà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 đó
5
int x,y;
public :
…
};
int Trung(Diem a, Diem b){
if (a.x==b.x && a.y==b.y) return 1;
else
return 0;
}
Trang 6Hàm độc lập là hàm bạn
public :
…
};
int SoSanhBang( PhanSo a, PhanSo b){
if (a.tu*b.mau== b.tu*a.mau) return 1;
else
return 0;
}
Trang 7Hà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 <Tên lớp>::<Tên hàm thành viên>
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
7
int x,y;
public :
…
DoanThang ::ChieuDai();
};
public :
…
float ChieuDai() { sqrt(
pow((d1.x - d2.x),2) +
pow((d1.y - d2.y),2)); }
};