1. Trang chủ
  2. » Giáo Dục - Đào Tạo

CHƯƠNG 6 HÀM BẠN - LỚP BẠN

3 106 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 3
Dung lượng 55,6 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

void InHoanhDoTam{ cout... friend class DuongTron; }: int bankinh; public : ...

Trang 1

HÀM B Ạ N

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

Ch ươ ng 6

1

Nội dung 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

• Hàm b ạ n c ủ a nhi ề u l ớ p

• L ớ p b ạ n

2

Giới thiệu

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ầ

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

};

class DuongTron {

int bankinh;

public:

void InHoanhDoTam(){

cout<<tam.GiaTriX();}

};

Khai báo trong l ớ p Diem hàm sau:

friend voidDuongTron::InHoanhDoTam();

l ấ y giá tr ị d ữ li u thành viên

Nếu sốlượng các thành phầ

dữliệu trong lớp quá nhiề

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 c  a hàm trong l ớ p

mu ố n cho phép truy c ậ p ñ ó v ớ i t ừ khóa friend.

Giới Giới thiệu thiệu

class A {

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;

}

Trang 2

Hàm ñộc lập là hàm bạn

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 {

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

class DoanThang ;

class Diem {

public :

friend float

DoanThang ::ChieuDai();

};

class DoanThang {

Diem d1, d2;

public :

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 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.

• 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.

class B

class A {

friend void B::F();

friend int F1(A, B);

… };

class B {

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

Trang 3

Lớp bạn (friend class)

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 {

class DuongTron {

Diem tam;

int bankinh;

9

public :

friend class

DuongTron;

}:

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 << “)”;

} };

Ngày đăng: 30/01/2016, 10:51

TỪ KHÓA LIÊN QUAN

w