Sử dụng hàm bạn (friend) cho 2 Class – Kiến Thức 24h

Khi bạn khai báo hàm bạn cho 2 class, nếu bạn chưa có kinh nghiệm bạn sẽ dễ gặp lỗi inaccessible.

Dấu hiệu theo ví dụ bên dưới:

  • Bạn đã khai báo friend void test(Matrix a, Vector b); trong class Matrix
  • Bạn đã khai báo friend void test(Matrix a, Vector b); trong class Vector
  • Nhưng chỉ 1 trong 2 truy cập được vùng private

friend

Cách khắc phục

  • Bạn khai báo tên của 2 class Matrix, và Vector ở đầu chương trình chính, sau đó viết nội dung class bên dưới.

friend1

  • Nếu bạn chia file cho từng class, thì hãy làm như sau:

– Trong file .h của file này bạn khai báo class kia, mục đích báo cho trình biên dịch biết class kia có tồn tại.

VD: ở Matrix.h tôi khai báo Class Vector; Và trong Vector.h tôi khai báo class Matrix.h;

Một ví dụ khác đơn giản hơn

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

#include<iostream>

using

namespace

std

;

class

B

;

                  

//defined later

class

A

;

                  

//correction (A also need be specified)

void

add

(

A

,

B

)

;

 

class

A

{

    

private

:

    

int

a

;

    

public

:

    

A

(

)

{

        

a

=

100

;

    

}

    

friend

void

add

(

A

,

B

)

;

}

;

 

class

B

{

    

private

:

    

int

b

;

    

public

:

    

B

(

)

{

        

b

=

100

;

    

}

    

friend

void

add

(

A

,

B

)

;

}

;

 

void

add

(

A

Aobj

,

B

Bobj

)

{

    

cout

<<

(

Aobj

.

a

+

Bobj

.

b

)

;

}

 

main

(

)

{

    

A

A1

;

    

B

B1

;

    

add

(

A1

,

B1

)

;

    

return

0

;

}

 

Bạn có thể tham khảo thêm tại đây: http://stackoverflow.com/questions/18404299/can-2-classes-share-a-friend-function