Bài giảng Lập trình hướng đối tượng C++ - Chương 6: Hàm bạn - Lớp bạn

pdf 9 trang Gia Huy 17/05/2022 2111
Bạn đang xem tài liệu "Bài giảng Lập trình hướng đối tượng C++ - Chương 6: Hàm bạn - Lớp bạn", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_c_chuong_6_ham_ban_lop_b.pdf

Nội dung text: Bài giảng Lập trình hướng đối tượng C++ - Chương 6: Hàm bạn - Lớp bạn

  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) . void InHoanhDoTam(){ Khai báo trong lớp Diem hàm sau: friend void cout<<tam.GiaTriX();} DuongTron::InHoanhDoTam(); }; 3
  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<<x.a1; } return y.a1; } 4
  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 << “(“ << tam.x << “,” << tam.y <<“,” << bankinh << “)”; } }; 9