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();...
3 trang |
Chia sẻ: putihuynh11 | Lượt xem: 819 | Lượt tải: 0
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:
- chapter6_4875_1993467.pdf