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.

pdf3 trang | Chia sẻ: nguyenlam99 | Lượt xem: 997 | Lượt tải: 0download
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:

  • pdftran_quang_hai_bangchapter6_3177.pdf
Tài liệu liên quan