6.7.2 Lớp bạn (friend class)

Giả sử có hai lớp gọi là A và B, và nếu A muốn B để có thể truy cập tài sản cá nhân của nó, nó phải thông báo rằng B là bạn của nó. Thông báo chỉ hoạt động theo một chiều. Các lớp B không thể chỉ nói: “Tôi là bạn của A” – điều đó sẽ không được công nhận.

Lưu ý rằng nó giống như trong đời  thực. Bạn bè của chúng ta là những người mà chúng ta gọi là bạn bè. Những đứa tuyên bố rằng nó là bạn của chúng ta có thể là kẻ lừa đảo, bố láo ăn cắp.

Hãy xem ví dụ →

Trong ví dụ trên thì một lớp có tên Class đã thông báo rằng Friend là bạn của nó. Kết quả là một đối tượng của lớp Friend có thể thao tác các trường private của Class và gọi các phương thức private của nó.

Lưu ý rằng khai báo friend đặt ở đâu không phải là vấn đề quan trọng. Dòng khai báo như sau:

friend class … ;

có thể tồn tại trong bất kỳ phần nào của lớp (public, private hoặc protected), nhưng phải được đặt bên ngoài bất kỳ hàm hoặc tập hợp (aggregate) nào.

Chương trình này sẽ chạy ra kết quả như sau:

It’s a secret, that field = 100