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

Tài liệu Lập trình hướng đối tượng & C++ - Chương 6: Hàm bạn, lớp bạ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();...

pdf3 trang | Chia sẻ: putihuynh11 | Lượt xem: 665 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu 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 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:

  • pdfchapter6_4875_1993467.pdf