Tải bản đầy đủ (.pdf) (9 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (574.72 KB, 9 trang )

Chương 6

HÀM BẠN – LỚP BẠN

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; }
};
class DuongTron {
Diem tam;
int bankinh;
public:


….
void InHoanhDoTam(){
cout<};

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
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)
Khai báo trong lớp Diem hàm sau:

friend void
DuongTron::InHoanhDoTam();
3


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 {
int a1;

public :

Friend void HamDocLap(A);
Friend int B::HamThanhVien();
};
void HamDocLap(A x)
{ cout<
class

int
};

B {

HamThanhVien();

int B::HamThanhVien()
{
A
y; …
return y.a1;
4
}


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


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


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 <Tên lớp>::<Tên hàm thành viên>
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;
float ChieuDai() {
class Diem {
sqrt(
int x,y;
pow((d1.x - d2.x),2)
public:
+

pow((d1.y - d2.y),2));
friend float
}

DoanThang::ChieuDai();
7
};
};


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 A {

friend void B::F();
friend int F1(A, B);

};
Lớp có 2 hàm bạn

class B {

void F();
friend int F1(A , B);

};
void B::F(){ … }
int F1(A x, B y) { … }
Hàm F1(…) là bạn

của 2 lớp A và B
8


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
class DuongTron;
class Diem {
int x,y;
public:
...
friend class
DuongTron;
}:

Khai báo A là
lớp bạn của
lớp B

class DuongTron {
Diem tam;
int
bankinh;
public:
...
DuongTron(int x1, int y1, int bk)
{tam.x = a; tam.y = y1; bankinh = bk;
}

void Ve() {
cout << “(“ << tam.x << “,”
<< tam.y <<“,”
<< bankinh << “)”;
}
9
};



×