2012-06-19 59 views
13

Tôi nghi ngờ có liên quan đến các chức năng của bạn bè trong C++. Hàm friend không phải là hàm thành viên của các claas và có thể được gọi trực tiếp từ chính. Vì vậy, điều gì sẽ khác biệt nếu chúng tôi giữ chức năng friend trong phần private hoặc public một phần của class. Tôi thường nhận thấy rằng các chức năng friend luôn ở phần công khai. Trong trường hợp nào chúng ta nên giữ hàm friend trong phạm vi private.Chức năng của bạn bè trong C++

+1

Tôi không biết tại sao điều này lại nhận được phiếu bầu gần đây ... Đây là câu hỏi hoàn toàn hợp lý (nếu ít được nói). – ildjarn

+0

+1 - "khi nào thiết kế tốt để thực hiện chức năng người bạn riêng" là một câu hỏi hoàn hảo. (Hoặc tại sao nó không bao giờ.) – djechlin

+5

"Tuyên bố bạn bè có thể được đặt bất cứ nơi nào trong tuyên bố lớp. Nó không bị ảnh hưởng bởi các từ khóa kiểm soát truy cập." - http://en.wikipedia.org/wiki/Friend_function –

Trả lời

19

Trình biên dịch không chú ý đến việc liệu chức năng của bạn bè có ở phần riêng tư hoặc công cộng (hoặc được bảo vệ) của một lớp hay không. Hầu hết mọi người đặt nó trong phần công khai, nhưng nó sẽ được hiển thị công khai bất kể nơi bạn đặt nó.

4

Không quan trọng nếu bạn khai báo trong phần public: hoặc private: của lớp học. Nó sẽ hoạt động như nhau bất kể.

2

Một lý do cho việc khai báo bạn bè trong phần private là nó có thể giữ chúng cùng với các hàm thành viên hoặc các đối tượng mà chúng được cho là có quyền truy cập.

Ngoài ra, không có sự khác biệt.

2

Từ khóa friend chỉ ở đây để cấp quyền truy cập private cho một chức năng khác mà không phải là một phần của lớp học của bạn. Vì nó không phải là một phần của lớp học của bạn, nó không bị ảnh hưởng bởi public/private thông số kỹ thuật.

0

không quan trọng bạn đặt tuyên ngôn hữu nghị ở đâu. Nó có thể tồn tại bên trong bất kỳ bộ phận nào của lớp học (công khai, riêng tư hoặc được bảo vệ) nhưng phải được đặt bên ngoài bất kỳ chức năng hoặc tổng hợp nào.

Dưới đây là một ví dụ tốt đẹp và lời giải thích từ www.cprogramming.com:

Nó thường là hữu ích cho một lớp để xem các biến riêng của lớp khác, mặc dù các biến này nên có lẽ không được thực hiện một phần của giao diện công khai mà lớp đó hỗ trợ. Ví dụ, nếu bạn đang viết một cây nhị phân, bạn có thể muốn sử dụng lớp Node có dữ liệu riêng tư, nhưng nó vẫn thuận tiện cho các hàm kết hợp các nút với nhau để có thể truy cập trực tiếp dữ liệu mà không cần phải làm việc thông qua giao diện Nút. Đôi khi, thậm chí có thể không phù hợp với chức năng truy cập tới thậm chí còn cung cấp quyền truy cập gián tiếp vào dữ liệu.

Các vấn đề liên quan