Xem mẫu

  1. Chương 6 HÀM BẠN – LỚP BẠN 1
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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